Feb 11th 2014
PIOS are expensive but EBS optimisation isn't. If your application is storage bound then setting the “EBS optimised” flag should always be your first step to improving performance.
The benefit is actually two-fold, setting this option essentially adds a dedicated network link for the EBS volumes. So as well as improving data throughput for your storage it also stops it competing with regular network traffic so your overall network performance improves as well.Instance sizing
Firstly, if you are on first generation instance types such as M1 and C1 then you need to check out the newer generation machines now. In almost all cases the M1 and C1 instances have a direct replacement in M3 or C3 which will almost certainly be better value in terms of price<>performance.
ECU's I used to assume had a bit of marketing adjustment. The truth is that in my testing and on CPU bound workloads I find they are pretty spot on (twice the ECU's really does tend to give you twice the performance)
As with hardware sizing generally, look at your workload and choose appropriate instance classes. Don't just default to the general purpose classes.
I'd recommend against 3 year reservations. You can't take advantage of new instance classes unless you manage to sell your old reservations (not so easy on the older generations) also discounts on reservations when AWS drop EC2 prices are entirely at Amazon's discretion. 3 years is way too long to be contracted in to a current instance class at current pricing.
I'd also think very carefully before reserving at Heavy Utilisation. It's not that much cheaper than Medium, the upfront cost is higher and you are billed the hourly rate whether you are using it or not. If you lose funding for your environment then you can't escape the costs until your reservation contract is up.
Volumes are thin provisioned. So new writes to previously unused space tend to be very slow. If you have the time, pre-fill your volumes for maximum performance in production.
Snapshots may be inconsistent if there are writes to the volume in the the initial pending phase. Avoid writes for the first 10 minutes of requesting a snap. Snapshots of Raided volumes however will most likely be inconsistent unless the instance is stopped for the duration of the snap.
PIOPS (Provisioned IO) can “currently” only be changed when provisioning the volume.
Work hard to optimise IO in your application and then use cloudwatch or on OS tools to determine what you really need before reserving IO. Tricks such as aligning block sizes to access (MS-SQL) can pay dividends, though be aware that PIOPS count for block sizes not larger than 16KB. So optimising above that has limited benefit because accessing a 64KB block will occupy 4 PIOPS.