Skip to main content
RunBook Academy

CephII · Storage Performance FundamentalsStorage Performance Fundamentals

IOPS, throughput, latency — and why two of them fight

Foundation⏱ ~15 mincephfio

What you'll learn

  • Define IOPS, throughput, and latency and state the relationship between them
  • Derive which of the three a given workload is actually limited by
  • Explain why a benchmark can show high IOPS and unusable latency at once
  • Read a Ceph performance complaint and identify which number is being described

Prerequisites

None — start here.

Verified against Ceph Tentacle 20.2.x · Ceph Squid 19.2.x (supported previous) · cephadm matches the verified Ceph release · podman 4.x · csi-rbd and csi-cephfs current · RBD / CephFS / RGW current (matches Ceph release) · Linux kernel 5.15+ (5.10 minimum) · Ubuntu 24.04 LTS (Ceph host baseline) · Debian 12 (Bookworm) (Ceph host baseline) · Rocky Linux / RHEL / AlmaLinux 9.x (Ceph host baseline) · Proxmox VE 9.x (cross-course integration) · Kubernetes 1.31+ (cross-course integration) · 2026-08-18

Not yet marked complete on this device.

Why this matters in production

Every storage complaint arrives as “it is slow”, and the first job is to work out which of three different things the person means. They are related by simple arithmetic and they behave completely differently under load, so guessing wrong sends you tuning the wrong thing for a day.

  • IOPS — operations per second. How many discrete requests the device or cluster completes.
  • Throughput — bytes per second. How much data moves.
  • Latency — time per operation. How long one request takes.

The arithmetic that binds them

For a workload with a fixed block size:

throughput = IOPS x block size

A device doing 10,000 IOPS at 4 KiB moves about 40 MiB/s. The same device doing 1,000 IOPS at 1 MiB moves about 1 GiB/s. Both numbers describe the same hardware; the workload chose which one looks good.

Latency relates to the others through concurrency, which is where intuition usually breaks:

IOPS ≈ queue depth / latency

At queue depth 1, a device with 1 ms latency does 1,000 IOPS and nothing you do to the device changes that. Raising queue depth to 32 can take it to 30,000 IOPS — with latency now considerably worse than 1 ms per operation, because requests are waiting in a queue. Nothing got faster. More work is in flight.

Which number does the workload care about?

WorkloadCares aboutBecause
Database commitlatencythe transaction blocks until the write lands
Database read from buffer pool misslatency, then IOPSone page at a time, many of them
VM boot stormIOPSthousands of small reads, concurrency is high
Backup or restorethroughputlarge sequential transfers, latency irrelevant
Ceph recoverythroughputmoves whole objects as fast as the budget allows
Log ingestionthroughput and IOPSmany small appends, batched

The two rows that matter most for a Ceph operator are the last two. Recovery is a throughput-shaped workload sharing hardware with latency-shaped client workloads, and that collision is the single most common cause of “the cluster went slow” tickets.

Where each number is visible in Ceph

ID=12
POOL=rbd-vms
ceph -s                     # cluster-wide client IOPS and throughput
ceph osd perf               # per-OSD commit and apply latency, ms
ceph daemonperf osd.${ID}    # live per-OSD operation counters
rados bench -p ${POOL} 60 write   # deliberate throughput measurement

ceph -s reports what clients are getting. ceph osd perf is the one to reach for when latency is the complaint: it lists every OSD with its commit latency, and a single outlier in a column of otherwise similar numbers is a failing device far more often than it is a tuning problem.

Reading a complaint correctly

“The database is slow” almost always means latency. “The backup does not finish in the window” almost always means throughput. “The VMs hang when everyone logs in at 09:00” means IOPS under concurrency. Ask which one before touching anything, because the remedies are different and some of them are opposites: adding queue depth improves throughput and worsens latency, and throttling recovery improves client latency while making recovery take longer.

Quiz

Knowledge check · 4 questions

  1. Q1. A benchmark reports 45,000 IOPS at 4 KiB from an OSD device, but the database on that pool sees 12 ms commit latency. What is the most likely explanation?

  2. Q2. Doubling the queue depth of a workload generally increases IOPS and improves per-operation latency at the same time.

  3. Q3. A cluster serving VM disks receives complaints of stuttering during business hours. ceph -s shows healthy status and moderate client throughput. Walk the investigation.

    Four-node cluster, 24 SATA SSD OSDs, 3-way replication, RBD for 60 VMs. ceph -s shows HEALTH_OK, client I/O around 180 MiB/s read and 40 MiB/s write. Complaints are of brief freezes rather than sustained slowness. No recovery is in progress. Nothing changed recently.

  4. Q4. Give the two formulas that relate IOPS, throughput, latency, and queue depth, and explain what each one predicts about a tuning change.

Passing score: 75%. Answers are checked in this browser.

Production discipline

Establish which of the three numbers a complaint is about before changing anything, and record all four values — IOPS, throughput, latency percentiles, and queue depth — whenever you measure. Watch distributions rather than means: ceph osd perf is the highest-value single command for latency complaints because one outlier device raises p99 for every placement group it participates in. And treat recovery as what it is — a throughput workload sharing devices with latency-sensitive clients.

Cross-course references

  • Linux: Part XLI (Disk Performance) and Part XXXVIII (Performance Fundamentals) for the single-host view.
  • Observability: histogram and percentile metrics are the right shape for all three numbers.
  • Proxmox: Part VIII (Ceph) for the hyperconverged case where client and cluster workloads share hardware.