Update: This article was originally published back in 2020. Recently more and more modern systems use fast NVMe storage, and as such, elevated iowait does not always indicate a storage bottleneck. In many cases, the storage subsystem is no longer the bottleneck, and elevated iowait instead coincides with CPU-side constraints such as scheduling delays, interrupt pressure, or inefficient application behavior, rather than storage contention.
As a result, iowait should always be evaluated alongside latency, queue depth, and application-level performance.