CPU Wait Time Calculator
Calculate iowait percentage from /proc/stat and its impact on effective CPU capacity.
Inputs
iowait %
15.00%
Effective CPU % (100 − iowait)
85.00%
Core-Equivalent Lost to I/O Wait
1.20
Severity
Moderate — some CPU cycles lost to I/O wait; monitor storage latency.
Step by step
Values used
iowait Ticks (from /proc/stat delta) = 1,500; Total Ticks (from /proc/stat delta) = 10,000; CPU Cores = 8
Effective CPU capacity
iowait% = iowait_ticks / total_ticks × 100; cpu_effective% = 100 − iowait%
iowait %
= 15.00
Effective CPU % (100 − iowait)
= 85.00
Core-Equivalent Lost to I/O Wait
= 1.20
Severity
= Moderate — some CPU cycles lost to I/O wait; monitor storage latency.
How it works
iowait is CPU idle time specifically attributable to waiting on outstanding I/O — the CPU had nothing else to run and the only reason it wasn't 'plain idle' is that a process on that CPU is blocked on disk or network I/O. As a simplified capacity model, treating iowait as directly subtracted from 100% gives an 'effective CPU' figure that highlights how much compute capacity is effectively unavailable due to I/O bottlenecks rather than genuine CPU demand — a system with sustained high iowait often benefits far more from faster storage or more caching than from more CPU cores.
Formula
Effective CPU capacity
iowait% = iowait_ticks / total_ticks × 100; cpu_effective% = 100 − iowait%
- t_{iowait}
- iowait ticks
- t_{total}
- total ticks
Frequently Asked Questions
Does high iowait mean the CPU is the bottleneck?
No — quite the opposite. High iowait means the CPU is idle specifically because it's waiting on I/O, so the bottleneck is the storage (or network) subsystem, not CPU compute capacity. Adding more CPU cores won't help; faster storage, better caching, or reducing I/O demand will.
Why is iowait counted as a form of idle rather than busy time?
Because the CPU genuinely isn't executing any instructions during that time — it's a sub-classification of idle that specifically flags 'idle, and there happens to be pending I/O from a process on this CPU', to distinguish it from ordinary idle with nothing pending, which is diagnostically useful even though both are technically 'not computing'.
Can iowait be misleading on multi-core systems?
Yes — per-core iowait can vary widely, and a single core showing high iowait due to one I/O-heavy process doesn't necessarily mean the whole system is I/O-constrained. Check per-core figures via `mpstat -P ALL` alongside `iostat -x` to correlate iowait with actual device-level latency and utilization.