CLOUD CONCEPT

IOPS

IOPS, or input/output operations per second, measures the rate at which a storage system completes read and write operations.

Cloud Concepts Hub →

What is IOPS

IOPS describes storage operation rate, not the amount of data transferred or the latency of each request. Engineers use it alongside throughput, latency, and workload characteristics to choose storage configurations that meet application performance requirements without unnecessary cost.

IOPS measures how many read and write operations a storage system completes each second. It is particularly useful when sizing storage for workloads that perform many small requests, such as transactional databases, virtual machine disks, and application metadata stores. An IOPS requirement is meaningful only when accompanied by information such as request size, read/write mix, access pattern, concurrency, and acceptable latency.

IOPS and throughput measure different things. Throughput is the volume of data transferred per second. When operations have a consistent size and are counted at the same layer, throughput approximately equals IOPS multiplied by operation size. For example, 10,000 operations per second at 16 KiB each require about 156 MiB/s. At 256 KiB each, the same operation rate requires 2,500 MiB/s. A storage configuration can therefore reach its throughput limit before reaching its advertised IOPS limit.

Operation counting also matters. An application request is not necessarily one storage operation: the operating system can merge adjacent requests, and storage services can split large requests according to their accounting rules. Database transactions may generate several reads and writes, while caching may eliminate some physical reads entirely. Do not equate transactions per second, API requests per second, and disk IOPS without measuring the relationship.

In cloud environments, performance is constrained by the entire storage path. A block volume has its own IOPS and throughput limits, while the attached compute instance can impose separate aggregate storage limits. CPU availability, network capacity, filesystem behavior, and database settings can create additional bottlenecks. For example, provisioning a volume for 20,000 IOPS will not deliver that rate if the instance supports only 10,000 IOPS across its attached volumes. Adding more volumes does not bypass an instance-level ceiling.

Latency and concurrency determine whether an application can use available IOPS. A workload issuing one request at a time with 2 ms average completion latency can achieve roughly 500 IOPS. Multiple outstanding requests can increase aggregate operation rate, but excessive queueing increases response time. Benchmark with realistic concurrency and inspect tail latency, not just average IOPS. A storage system that completes many operations while violating the application's response-time target is not meeting the requirement.

Select storage according to the workload rather than choosing the highest advertised number. SSD-backed storage generally suits small random operations, while HDD-backed storage can be economical for supported workloads dominated by large sequential transfers. General-purpose SSD storage may satisfy ordinary application needs; provisioned-performance configurations are appropriate when sustained requirements exceed those capabilities or demand more predictable performance. Burst-based configurations require special attention because short tests may consume credits and hide lower sustainable performance.

On AWS, Amazon EBS gp3 allows IOPS and throughput to be configured separately from capacity, within applicable limits. EBS io2 is designed for demanding workloads requiring provisioned IOPS and consistent low latency. In either case, match the EC2 instance's EBS capabilities to the volumes. For managed databases, evaluate the database instance class, storage configuration, and engine behavior together rather than assuming that increasing provisioned storage performance will fix every slow query.

Measure representative peak demand and leave headroom for growth, maintenance, and recovery activity. Compare completed operations, bytes transferred, latency, queue depth, and any relevant burst-credit metrics over the same intervals. Use sustained load tests rather than brief peaks, and verify durability and availability requirements separately: high IOPS does not itself provide replication, backups, or persistence after an instance is terminated.

Key aspects of IOPS

Useful IOPS sizing combines workload characteristics, throughput, latency, concurrency, sustainable capacity, and end-to-end system limits.

Workload-dependent operation rate

Interpret IOPS together with request size, read/write mix, and random versus sequential access. A benchmark with small reads does not establish performance for a workload dominated by large writes.

Separate IOPS and throughput limits

Estimate throughput from operation rate multiplied by operation size, then check both limits independently. Large requests can exhaust bandwidth even when the IOPS limit has not been reached.

Latency and concurrency

Enough outstanding requests are needed to use available storage parallelism. Increase concurrency carefully because longer queues can raise application latency even when aggregate IOPS improves.

End-to-end bottleneck analysis

Check volume limits, aggregate instance limits, CPU, and application behavior before purchasing more storage performance. The effective limit is determined by the constrained part of the path, not simply the volume's advertised capability.

Sustained versus burst performance

Distinguish continuously available performance from temporary performance supported by burst credits. Size sustained workloads against sustainable capacity and test long enough to expose credit exhaustion.

Provisioning and cost

Provision enough performance to meet peak demand with appropriate headroom, but avoid paying for IOPS the application cannot use. Increasing cache effectiveness or reducing unnecessary I/O may be more effective than increasing storage limits.

Cloud services for IOPS

For applications running on EC2, EBS supplies persistent block storage while the EC2 instance determines how much aggregate storage performance the application can access. RDS manages database infrastructure but still requires compatible database instance and storage configurations. CloudWatch helps validate these choices by showing actual operation rates, throughput, latency, and queueing. Use these measurements together to identify whether a workload needs more storage IOPS, greater bandwidth, a larger instance, or application tuning rather than increasing provisioned performance without evidence.

Amazon EC2 image Amazon EC2

EC2 instances impose aggregate limits on EBS IOPS and bandwidth, so instance selection must match attached storage performance. Some instance types also offer local instance store storage, whose high performance must be weighed against its nonpersistent lifecycle.

Open Amazon EC2 →
Amazon RDS image Amazon RDS

RDS exposes storage performance choices for supported database engines and configurations, including general-purpose and provisioned-IOPS options. Effective database performance also depends on instance capacity, cache hit rate, query design, and the amount of physical I/O generated by each transaction.

Open Amazon RDS →
Amazon CloudWatch image Amazon CloudWatch

CloudWatch provides storage and database metrics for assessing operation rates, throughput, latency, and queueing. For operation-count metrics, calculate IOPS by dividing the count over an interval by that interval's duration in seconds, using the metric's documented semantics.

Open Amazon CloudWatch →