CONCEPT Cited by 1 source
IO wait¶
Definition¶
%iowait on Linux is the fraction of CPU time reported as
idle while at least one CPU-local task is blocked on disk I/O.
It appears as the wa column in vmstat and top, and as the
%iowait column in mpstat / sar.
Mechanically, %iowait is still a form of idle time — the CPU is
not executing any task. What distinguishes it from plain %idle
is the accounting hint: "I am idle because tasks that would
otherwise be runnable are blocked waiting for disk I/O to
complete."
Why it's a disk signal, not a CPU signal¶
Netflix's Brendan Gregg:
A constant degree of wait I/O points to a disk bottleneck; this is where the CPUs are idle, because tasks are blocked waiting for pending disk I/O. You can treat wait I/O as another form of CPU idle, one that gives a clue as to why they are idle.
The metric doesn't say the CPU is overloaded — it's not. It says
the disk is slow enough to keep the CPU idle. Investigation should
pivot to iostat -xz 1 for per-device breakdown:
%util— per-device busy percent.await— average I/O completion time (queue + service) in ms.avgqu-sz— average queue depth; > 1 is often saturation.r/s/w/s/rkB/s/wkB/s— applied workload, for workload characterisation.
Common misinterpretations¶
- "
%iowaitis 0, so disks are fine" — not necessarily.%iowaitcan read 0 when no task is blocked on I/O and the CPU is doing other work; application latency can still have been hurt by slow I/O that then completed.%iowaitis a hint, not a proof. - "High
%iowaitmeans I need more CPU" — wrong direction.%iowaittime is idle CPU time; adding CPUs doesn't help. You need to investigate disk throughput, queue depth, or asynchronous I/O patterns. - "
%iowait> X% is always bad" — depends on the workload. A batch/ETL host intentionally I/O-bound will show sustained high%iowait; an interactive-request-serving host shouldn't.
Application techniques that mask %iowait¶
Many production systems use asynchronous I/O (read-ahead, buffered writes, async queues) specifically so that user-visible request latency doesn't block on disk. Netflix's framing:
Bear in mind that poor performing disk I/O isn't necessarily an application issue. Many techniques are typically used to perform I/O asynchronously, so that the application doesn't block and suffer the latency directly (e.g., read-ahead for reads, and buffering for writes).
This is why a host with slow disks can still feel fast to users,
and why %iowait ≈ 0 doesn't mean the disks are unburdened.
Seen in¶
- sources/2025-07-29-netflix-linux-performance-analysis-in-60-seconds
— canonical wiki statement. The 60-second checklist treats
%iowaitonvmstat/mpstat/topas "CPU idle with a reason" and immediately pivots toiostat -xz 1for device- level follow-up.
Related¶
- concepts/cpu-time-breakdown —
wais one of the named fields; the broader decomposition is needed to interpret%iowaitin context. - concepts/load-average — Linux load average includes
uninterruptible-I/O-blocked tasks, so high
%iowaittypically co-occurs with elevated load average. - concepts/use-method —
%iowaitis a CPU-side symptom of disk saturation/utilisation/errors; the methodology says move to the disk tools. - systems/iostat · systems/vmstat