Performance tuning Amazon EBS
The performance of a block storage device is commonly measured and quoted in a unit called IOPS, short for Input/Output Operations per Second (IOPS).
To put the numbers in this post into perspective, a disk drive spinning at 7,200 RPM can perform at 75 to 100 IOPS whereas a drive spinning at 15,000 RPM will deliver 175 to 210. The exact number will depend on a number of factors including the access pattern (random or sequential) and the amount of data transferred per read or write operation etc
Some of the key factors that affect EBS QoS are:
- Bandwidth – The rate of data throughput available
- Latency – The time delay for a read/write operation to execute
- Queue depth – The number of outstanding operations waiting to execute to the underlying disks (Traditional or SSD).
Now let us explore those factors and some solutions for the same.
Bandwidth: Use EBS Optimized Instances:
Usually the Network traffic and EBS traffic is shared in the Amazon EC2 instance, which means consistent EBS performance depends on amount of non-EBS related network you send to and from your instance. Since you cannot predict this there will be contention between EBS and internet traffic and at times, traffic to EBS can suffer a lot. To solve this problem and improve the performance, AWS introduced EBS-optimized instances. It is an optimized configuration stack that provides additional and dedicated capacity between EC2 and EBS IO. This optimization minimizes the contention between EBS I/O and other traffic from your Amazon EC2 instance and thereby gives you best and consistent performance. EBS-optimized instances deliver dedicated throughput to EBS, with options between 500 Mbps and 1,000 Mbps, depending on the instance type you use and enables you to effectively use PIOPS volumes (if attached). This is additional throughput, and doesn't affect other general purpose network throughput already available on the instance. EBS-Optimized instances can be used with both standard and PIOPS volumes.
Standard EBS Volumes + EBS-OPT Instances: Scaling throughput from a number of volume stripes where I/O performance consistency isn't critical.
PIOPS Volumes + EBS-OPT Instances: Performance-sensitive production databases that require dedicated EBS traffic and high IOPS performance. It is recommended to always use PIOPS with EBS-Optimized instances to get the full performance benefits.
Things to note:
- Not all Amazon EC2 instances are EBS-Optimized. Only the following list is currently supported, please refer AWS documentation for the latest supported types. High-CPU Extra Large (c1.xlarge) ,M1 Large (m1.large), M1 Extra Large (m1.xlarge), High-Memory Double Extra Large (m2.2xlarge), High-Memory Quadruple Extra Large (m2.4xlarge), M3 Extra Large (m3.xlarge) ,M3 Double Extra Large (m3.2xlarge).
- Provisioned IOPS volumes may not be available in every AZ inside a Region where EBS-OPT is available (currently). AWS will sort this going forward. In mean time, you can use an EBS-Optimized instance with Standard EBS volumes as well to get dedicated throughput between your instance and volumes(in such AZ).
EBS Article Series (continued..)
Part 1: Understanding Amazon Elastic Block Store
Part 2: Understanding Standard EBS Volumes
Part 3: Understanding EBS PIOPS Volumes
Part 4: Understanding EBS-Optimized Instances
Part 5: Understanding Latency in EBS
Part 7: 10% of your provisioned IOPS 99.9% of the time
Part 8: Performance Tuning - Pre Warming the EBS volume
Part 9: Performance Tuning - EBS Striping
Part 10: Performance Tuning - IO Block Size
Part 11: Understanding Amazon EBS Snapshots
Part 12: Securing Amazon EBS volumes - EBS Encryption using SecureCloud
Part 13: Amazon EBS Security Best practices and tips