I/O wait, shown as iowait or wa in tools like top and vmstat, is one of the CPU time states, alongside user, system, and idle. It measures the time a CPU had nothing else to run while an I/O operation it issued was still in flight.
Two things make iowait easy to misread. First, it is a percentage of CPU time, not a queue depth and not a latency, so it tells you the CPU was idle while storage was busy, never how slow storage actually is. Second, the number moves with how much other work is running. A host with one blocked process and nothing else to do can show 25% iowait on a 4 core machine and be completely healthy, while a busy host with the exact same storage problem shows almost no iowait because the scheduler always has another thread to run. Treat iowait as a symptom that points at the storage layer, not as a cause you can fix directly.
The value comes from correlation. Rising iowait plus a climbing load average plus a jump in read or write bytes on one block device is a local storage bottleneck. Rising iowait with flat disk throughput usually points at a remote filesystem or a saturated network path instead. Hyperping records CPU time per state, including iowait, every 30 seconds next to per device disk I/O, so both halves of that comparison sit on one timeline.