理解 %IOWAIT (%WIO)
%iowait 是'sar -u'等工具检查 CPU 使用率时显示的一个指标,在 Linux 上显示为 %iowait,在有的 Unix 版本上显示为 %wio,含义都是一样的。这个指标常常被误读,很多人把它当作 I/O 问题的征兆,我自己每隔一段时间就会遇到对 %iowait 紧张兮兮的客户,不得不费尽唇舌反复解释。事实上这个指标所含的信息量非常少,不能单独用来判断系统有没有 I/O 问题。在此我们详细探讨一下它真正的含义,先从 man page 上的解释开始:
| 时间 | CPU | %user | %nice | %system | %iowait | %steal | %idle |
|---|---|---|---|---|---|---|---|
| 09:35:06 AM | all | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 100.00 |
| 09:35:07 AM | all | 0.51 | 0.00 | 2.53 | 13.13 | 0.00 | 83.84 |
| 09:35:08 AM | all | 1.54 | 0.00 | 7.69 | 39.49 | 0.00 | 51.28 |
| 09:35:09 AM | all | 2.04 | 0.00 | 9.18 | 39.80 | 0.00 | 48.98 |
| 09:35:10 AM | all | 1.02 | 0.00 | 7.65 | 40.31 | 0.00 | 51.02 |
Linux: %iowait Percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.
HP-UX: %wio idle with some process waiting for I/O (only block I/O, raw I/O, or VM pageins/swapins indicated).
Linux 和 HP-UX 的 man page 分别从两个角度描述了这个指标:Linux 着眼于 I/O,强调的是仍有未完成的 I/O 请求;而 HP-UX 着眼于进程,强调的是仍有进程在等待 I/O。二者所说的是同一件事的两个方面,合在一起就完整了,就是:至少有一个 I/O 请求尚未完成,有进程因为等待它而休眠。

