Methodology
Block storage benchmark methodology
How random and sequential IOPS, throughput and tail latency of cloud block volumes are measured with fio, including volume sizing, preconditioning and verification.
Version 1.0 Updated:
Scope
- Network-attached block volumes (default performance tier) and local NVMe where offered
- 4 KiB random read and write IOPS at queue depth 32
- 1 MiB sequential read throughput
- p99 completion latency for 4 KiB random reads at queue depth 1
| Tool | Version |
|---|---|
| fio | Recorded per run |
Volume configuration
A 200 GB volume of the provider’s default general-purpose tier is attached to the compute instance used in the compute methodology. Where performance scales with volume size, the size is noted and kept identical across providers. Provisioned-IOPS tiers are tested separately.
Preconditioning
The volume is filled sequentially once with fio --rw=write --bs=1M over its full size, so reads hit allocated blocks and thin-provisioning effects are removed.
Jobs
| Job | fio parameters |
|---|---|
| Random read IOPS | --rw=randread --bs=4k --iodepth=32 --numjobs=4 --direct=1 --time_based --runtime=120 |
| Random write IOPS | --rw=randwrite --bs=4k --iodepth=32 --numjobs=4 --direct=1 --time_based --runtime=120 |
| Sequential read | --rw=read --bs=1M --iodepth=16 --numjobs=1 --direct=1 --time_based --runtime=120 |
| Read latency | --rw=randread --bs=4k --iodepth=1 --numjobs=1 --direct=1 --time_based --runtime=120 |
All jobs use --ioengine=libaio on the raw device and JSON output (--output-format=json).
Repetitions and verification
Each job runs 5 times on 3 volumes. The median is published with min/max. Burst-credit behaviour is detected by comparing the first and last 30 seconds of each run; if they differ by more than 20%, both phases are reported. Verification follows the same ±5% re-run rule as compute.
Limitations
- Results reflect the volume tier, size and instance type tested; many providers cap IOPS per instance as well as per volume.
- File-system overhead is excluded because tests use the raw device.