giip
SES Proposal
InfrastructureMediumIOPSストレージ性能

Random IOPS vs. Sequential IOPS, and How to Read Benchmark Results

Published 2026-08-13 · Updated 2026-08-13 · Last Verified 2026-08-13

Answer

The difference between Random and Sequential is the continuity of access position. On HDD, seek time and rotational latency add up, so the gap between Random and Sequential spans orders of magnitude; on SSD/NVMe, the gap shrinks dramatically but does not disappear (for writes, garbage collection and write amplification add to it as well). And an IOPS figure cannot be compared unless I/O size, queue depth, read/write ratio, and whether direct I/O is used are all stated. When reading a benchmark result, first check whether these four conditions are explicit.

Applicability of This Document

ProductStorage in general (HDD / SATA SSD / NVMe SSD / network-attached storage)
Verified Versionsfio 3.x, sysstat (iostat), nvme-cli, Linux (based on the public specification as of 2026-08-13)
EnvironmentOn-premises, EC2, Azure VM
Required Permissionsfio requires access to the target file/device (root if targeting a device directly). `nvme list` may require root
Execution Impactfio generates I/O load. iostat, lsblk, and nvme list are read-only
RestartNot required
Last Verified2026-08-13

Ready-to-Run Commands

Measure random read (4k) — conditions close to database-style accessLow
対象
Linux + fio 3.x
権限
Read/write access to the target file (root if targeting a device directly)
変更作業
None (read-only), but it generates I/O load
Production実行
Not recommended. Run it in a test environment, or against storage not shared with production
# 対象: Linux + fio 3.x
# 権限: 対象ファイルへの読み取り権限(デバイス直接指定なら root)
# 変更作業: なし(読み取りのみ)だが実行中は他処理の I/O 性能に影響する
# Production 実行: 非推奨。検証環境で実行すること
fio --name=rand_read_4k \
    --filename=/mnt/testdir/fio_testfile \
    --size=64G \
    --rw=randread \
    --bs=4k \
    --ioengine=libaio \
    --direct=1 \
    --iodepth=32 \
    --numjobs=4 \
    --runtime=300 \
    --time_based \
    --ramp_time=30 \
    --group_reporting

`--ramp_time=30` excludes the first 30 seconds from the tally, letting you exclude cache warm-up or the scheduler settling in. Changing `--iodepth` and `--numjobs` changes the numbers significantly. Don't look at a single figure — measure at several points with different iodepth values.

Measure sequential read (1M) — conditions close to a backup or full table scanLow
対象
Linux + fio 3.x
権限
Read access to the target file
変更作業
None (read-only), but it generates I/O load
Production実行
Not recommended. Run it in a test environment
# 対象: Linux + fio 3.x
# 権限: 対象ファイルへの読み取り権限
# 変更作業: なし(読み取りのみ)だが I/O 帯域を占有する
# Production 実行: 非推奨。検証環境で実行すること
fio --name=seq_read_1m \
    --filename=/mnt/testdir/fio_testfile \
    --size=64G \
    --rw=read \
    --bs=1M \
    --ioengine=libaio \
    --direct=1 \
    --iodepth=8 \
    --numjobs=1 \
    --runtime=300 \
    --time_based \
    --group_reporting

For sequential access, look at bandwidth (BW) rather than IOPS. Since the I/O size is large, the IOPS value comes out small — this does not mean it is slow. Keeping in mind that IOPS times block size equals bandwidth helps avoid misreading this.

Measure mixed read/write (70:30) — conditions close to a real workloadMedium
対象
Linux + fio 3.x
権限
Read/write access to the target file
変更作業
Yes (writes to the test file)
Production実行
Do not run this. Since it involves writes, use a dedicated test area
# 対象: Linux + fio 3.x
# 権限: 対象ファイルへの読み書き権限
# 変更作業: あり(テストファイルに書き込む。既存データを指定しないこと)
# Production 実行: 不可。専用の検証領域でのみ実行すること
fio --name=rand_rw_70_30 \
    --filename=/mnt/testdir/fio_testfile \
    --size=64G \
    --rw=randrw \
    --rwmixread=70 \
    --bs=8k \
    --ioengine=libaio \
    --direct=1 \
    --iodepth=32 \
    --numjobs=4 \
    --runtime=600 \
    --time_based \
    --ramp_time=60 \
    --group_reporting

For a measurement that includes writes, run it long enough. On SSD, a short run only shows values from when free space is plentiful, missing the steady state once garbage collection kicks in. Always point `--filename` at a dedicated test file — never at an existing data file.

Check device configuration and actual I/O behavior on the Linux sideRead-only
対象
Linux (sysstat / nvme-cli)
権限
Regular user (nvme list may require root)
変更作業
None (read-only)
Production実行
Possible
# 対象: Linux(sysstat / nvme-cli)
# 権限: 一般ユーザー(nvme list は root が必要な場合がある)
# 変更作業: なし(参照のみ)
# Production 実行: 可能
lsblk -o NAME,SIZE,TYPE,ROTA,MOUNTPOINT,MODEL
sudo nvme list
iostat -x 1 10

`lsblk`'s `ROTA` shows whether it's rotating media (1 = rotational). In `iostat -x`, `r/s`/`w/s` is measured IOPS, `rareq-sz`/`wareq-sz` is average I/O size, `r_await`/`w_await` is latency, and `aqu-sz` is average queue length. Use this to understand what conditions the real workload is actually running under before reading a benchmark result.

How to Read the Results

ColumnMeaningWhat to Check
fio: IOPSI/O completions per secondCannot be compared against another measurement unless paired with the four conditions: bs, iodepth, numjobs, and rw
fio: BW (bandwidth)Transfer volume per secondRoughly equal to IOPS × block size. This is the primary metric for a sequential measurement
fio: clat (completion latency)Time until an I/O completesLook at the 99th percentile and above, not just the average. High IOPS with a large tail latency still feels bad in practice
fio: slat / latSubmission latency and overall latencyA large slat points to the issuing path on the kernel side rather than the device
fio: iodepth distributionThe queue depth actually sustainedIf it never builds up to the specified iodepth, the load generator itself is the limiting factor
iostat: r/s, w/sMeasured read/write IOPSThis is the value of the real workload, not a benchmark. If it's far from the benchmark conditions, the benchmark's premise is off
iostat: rareq-sz, wareq-szAverage I/O size (KB)The real workload's I/O size — match fio's `--bs` to this value
iostat: r_await, w_awaitAverage wait time per request (ms)If large despite IOPS headroom, it points to queue waiting or latency in a lower layer
iostat: aqu-szAverage queue lengthIf it stays small while things are slow, storage is not the limiting factor; if large, the device cannot keep up
lsblk: ROTAWhether it is rotating media (1 = HDD-class)Confirms you haven't mixed up whether the target is HDD or SSD

When to Use This

  • A product catalog's IOPS value differs significantly from what you measured yourself
  • The same storage shows numbers that vary by multiples depending on who measures it
  • A benchmark shows fast numbers, but database processing doesn't get as fast as expected
  • Switching from SATA SSD to NVMe SSD made no perceptible difference
  • Adding many NVMe drives didn't scale performance proportionally
  • It's unclear whether to look at the sequential or random figure

Possible Causes (Most Likely First)

  1. 01

    An IOPS figure is not defined on its own

    IOPS is just "I/O operations per second" — it only becomes meaningful once the size of a single I/O, the number of I/Os issued concurrently (queue depth), the read/write ratio, and whether the cache is bypassed are all fixed. Numbers missing any of these four cannot be compared.

  2. 02

    Physical mechanics dominate random access on HDD

    On rotating media, every random I/O involves moving the head (seek) and waiting for the sector to come around (rotational latency). Sequential access involves almost none of this, so the same device shows an order-of-magnitude gap between random and sequential.

  3. 03

    The gap is not zero even on SSD/NVMe

    With no moving parts, the random-vs-sequential gap shrinks dramatically compared to HDD, but it remains due to flash's page/block structure, write amplification, garbage collection, and mapping-table lookup cost. For writes in particular, the figure differs between the steady state (free space depleted) and the initial state.

  4. 04

    SATA (AHCI) and NVMe have different queue structures

    AHCI is fundamentally designed around a single command queue, limiting how many commands can be outstanding at once. NVMe is designed to have many deep queues per CPU core. This difference matters at high parallelism and shrinks at a queue depth of 1 with sequential access. If "switched to NVMe but it's not faster," the measurement conditions may be low-parallelism.

  5. 05

    The benchmark is measuring the cache

    Without `direct=1`, with a test size smaller than RAM, or with a run so short it only covers warm-up, what's being measured is the page cache or the controller's write-back cache.

  6. 06

    The database's access pattern doesn't match the measurement conditions

    Access to a database's data files is generally random-leaning, while writes to the transaction log are sequential and synchronous. Log writes are governed by write latency, not IOPS or throughput. A good sequential-read number does not guarantee either of these.

Diagnostic Steps

  1. 1

    Measure the real workload's I/O characteristics first

    Read-only

    Use `iostat -x` to get `rareq-sz`/`wareq-sz` (average I/O size), `r/s`/`w/s`, and `aqu-sz` (queue length). Match the benchmark conditions to these.

  2. 2

    Check the device configuration

    Read-only

    Use `lsblk -o ...,ROTA,MODEL` and `nvme list` to determine what's actually being measured (HDD or SSD, local or network-attached).

  3. 3

    Run fio with the measurement conditions explicitly stated

    Low

    Specify `--bs`, `--iodepth`, `--numjobs`, `--rw`, and `--direct=1`, and record the conditions as-is. A benchmark result without recorded conditions cannot be interpreted later.

  4. 4

    Measure at several points with different queue depths

    Low

    Vary iodepth while recording both IOPS and latency. The point where IOPS plateaus but latency keeps climbing is the practical ceiling.

  5. 5

    Run write tests until the steady state

    Medium

    On SSD, a short measurement only shows the initial-state value. Set a long `--runtime` and exclude the ramp-up with `--ramp_time`.

  6. 6

    Isolate layer by layer for a multi-device configuration

    Low

    Measure in order — a single device, the RAID/volume layer, the filesystem layer, and the application layer — to identify where the ceiling is.

Solutions

Low-risk action that can be done immediately

  • Align the measurement conditions of the two figures being compared

    Read-only

    Match I/O size, queue depth, parallelism, read/write ratio, the direct flag, and working-set size. If they cannot be matched, give up the comparison and re-measure under your own conditions.

  • Decide which metric to look at based on the goal

    Read-only

    If response time is the concern, look at latency (clat percentiles); if batch duration is the concern, look at bandwidth; if concurrency is the concern, look at IOPS. These are three different questions.

Change requiring advance review

  • Build a measurement profile matched to the real workload

    Low

    Build measurement conditions that reflect the average I/O size and queue length obtained from `iostat` into `--bs`/`--iodepth`, and keep measuring under those conditions going forward.

  • Raise parallelism to exploit NVMe's strengths

    Medium

    NVMe's advantage shows up at high parallelism. If the application only issues sequential I/O, raising parallelism is more effective than swapping devices.

  • Separate log writes from data writes

    Medium

    Co-locating sequential, synchronous log writes with random data access on the same device causes them to interfere with each other. Consider whether they can be separated.

Change involving a restart or service impact

  • Change the storage layer configuration

    High

    Changing RAID level, stripe size, or recreating the filesystem involves migrating data. A prior backup and rollback procedure are mandatory.

Work requiring expert review

  • Identify the bottleneck in a multi-device configuration at the design stage

    Expert Review Required

    In a configuration with many NVMe devices, the limiting factor shifts from single-device performance to an upstream path. Candidates include the number and generation of PCIe lanes provided by the CPU/platform, the HBA/expander/backplane configuration, the link bandwidth of an external enclosure (DAS), the number of CPU cores available for interrupts and I/O processing, processing in the filesystem or software RAID layer, and ultimately the application's parallelism. Which one matters depends on the configuration, so measure layer by layer to identify it.

!Warnings

  • This article gives no IOPS, bandwidth, or latency figure for any specific product. A product's performance figures depend on the model, firmware, configuration, and measurement conditions. Obtain any number you need either by measuring it yourself or from a published figure where the vendor states the measurement conditions.
  • fio generates actual I/O load. Do not run it against production storage or a path that shares bandwidth with production.
  • A measurement that includes writes (`randrw`, `randwrite`) overwrites the area specified in `--filename`. Never point it at an existing data file or device.
  • A measurement without `--direct=1`, or with a working set smaller than RAM, is measuring the cache, not storage.
  • SSD write performance measured over a short run does not reflect real-world values. It needs to run until the steady state, once free space has shrunk and garbage collection is active.
  • The latency distribution can differ completely even with the same IOPS. Always check the tail latency at the 99th percentile and above, not just the average.

Differences by Version and Environment

HDD (rotating media)Seek time and rotational latency dominate random access, producing the largest gap from sequential. If a RAID cache sits in between, this gap can become invisible in the measurement.
SATA SSD (AHCI-attached)Since the number and depth of queues are limited by the protocol, a gap with NVMe appears at high parallelism. The gap shrinks at low parallelism.
NVMe SSDHaving many deep queues per core gives it an advantage on high-parallelism random access. Note that this advantage is hard to see in a single-thread, queue-depth-1 measurement.
Network-attached storage (e.g., EBS)A service-side ceiling and the network path dominate, rather than device characteristics. It cannot be directly compared against a local NVMe measurement.

If This Doesn't Resolve It

  • Check whether the CPU is saturated

    A high-IOPS measurement can consume all available CPU on interrupt handling and I/O issuing. Check CPU usage with `mpstat` alongside `iostat`.

  • Check the I/O scheduler setting

    `none` is often appropriate for NVMe; leaving a rotating-media scheduler in place introduces unnecessary reordering.

  • Check filesystem alignment

    A misaligned partition or stripe boundary splits a single logical I/O into multiple physical I/Os.

  • Check the application's concurrency

    If things are slow without storage hitting a ceiling, the limiting factor is application-side parallelism or lock contention.

  • Obtain the measurement conditions for anything being compared

    When comparing against a number from elsewhere, check whether that measurement's bs, iodepth, numjobs, rw, and direct flag are published. A figure without that is not comparable.

Basis and Limitations of This Document

General technical explanation

Based on general performance characteristics of storage I/O (seek and rotational latency on rotating media, write amplification on flash memory, and the queue-structure difference between AHCI and NVMe), and the public option specifications of fio and iostat. It includes no performance figures for any specific product or measurements from any specific environment. Obtain any figure you need through measurement in your own environment.

FAQ

What's the difference between Random IOPS and Sequential IOPS?

It is whether the accessed positions are contiguous. On HDD, every random access involves a seek and rotational latency, so the gap from sequential spans orders of magnitude. On SSD/NVMe, with no moving parts, the gap shrinks dramatically, but it does not reach zero due to the internal structure of flash and the effect of garbage collection.

Can products be compared using IOPS figures alone?

No. IOPS only becomes meaningful once I/O size, queue depth, parallelism, read/write ratio, and whether direct I/O is used are all fixed. Numbers without these stated are not comparable. If you want a comparison, measure both yourself under the same conditions.

How much does Random Read IOPS differ between SATA SSD and NVMe SSD?

This article gives no figure. The size of the gap depends on the model, generation, and measurement conditions. The structural difference is that AHCI is centered on a single command queue, while NVMe can have many deep queues per core. This difference shows up at high parallelism and shrinks at a queue depth of 1 with sequential access. Confirm the actual gap with an fio measurement under identical conditions.

Does installing 24 NVMe drives make things 24 times faster?

No. Adding more drives shifts the limiting factor from a single device to an upstream path. Candidates include the number and generation of PCIe lanes on the CPU/platform, the HBA/expander/backplane configuration, the link bandwidth of an external enclosure, the number of CPU cores available for interrupts and I/O processing, processing in the filesystem or RAID layer, and the application's parallelism. Which one matters depends on the configuration, so measure layer by layer to identify it.

For a database, should Random or Sequential be the focus?

Both, but they play different roles. Access to data files is generally random-leaning, so random I/O performance matters there. Transaction log writes are sequential and synchronous, where write latency matters more than IOPS. Also note that co-locating the log and data on the same device causes them to interfere with each other.

Can this be run in production?

`lsblk`, `nvme list`, and `iostat` are read-only and can be run in production as well. Since fio generates actual load and a condition involving writes overwrites the specified area, do not run it in production — prepare a dedicated test area.

Questions This Document Covers

  • Difference in Random Read IOPS between SATA SSD and NVMe SSD
  • Where the bottleneck is in a 24-drive NVMe SSD configuration
  • Why a benchmark's IOPS value differs from the product catalog
  • Does a database care more about random I/O or sequential

What the Risk Labels Mean

  • Read-onlyDoes not change data or settings.
  • LowImpact is limited, but permissions and load should be checked.
  • MediumMay affect performance, locking, or cost.
  • HighMay cause an outage, data loss, or require recovery work.
  • Expert Review RequiredRequires a separate review before applying to production.

GIIP's Scope of Support

Everything up to this point is reproducible by anyone once the measurement conditions are aligned. What's hard in real operations is not measuring correctly — it's recording the conditions used and maintaining a state where the next measurement can be compared against it. At GIIP, an AI agent continuously collects I/O size, queue length, and wait time under identical conditions across several databases on AWS and Azure and roughly 30 web services, and a human specialist investigates the cause once a value deviates from the historical distribution. This mechanism is built to use a time series collected under consistent conditions as the basis for judgment, rather than a one-off benchmark figure.

Author & Technical Review

GIIP Production Operations Team

About 30 years of experience in designing, migrating, and operating large-scale web services, SQL Server, Oracle, AWS, and Azure. Experience includes 12 sets of x12large-class AWS RDS for SQL Server environments, an Oracle environment with roughly 120,000 tables, and migrating roughly 3TB from TiDB to Aurora MySQL. AI agents and human experts currently continue to monitor and operate multiple cloud databases and about 30 web services.

Related Knowledge

Related Services

Get a consultation on storage performance measurement conditions

If you need to repeat the same checks across multiple environments, we can discuss your entire operations setup.

Get a consultation on storage performance measurement conditions

← Back to Knowledge Base