我知道wa
(在top
)测量等待 I/O 的 CPU 时间。很多文章都这么说。
但我感到困惑的是,基于2个知识点:
- 如果进程使用系统调用来读取磁盘,则该进程被阻止。
- 如果进程被阻塞,它就无法被安排在 CPU 上运行。
正确的?
似乎 CPU 没有时间等待 I/O...会发生什么?
如果能推荐一些书籍或者文章让我进一步阅读就更好了。
答案1
CPU 空闲状态分为两个不同的“子”状态:iowait
和idle
。
如果 CPU 处于空闲状态,则内核将确定当前是否至少有一个从该 CPU 发起的 I/O 正在执行,无论是本地磁盘还是远程安装的磁盘 (NFS)。如果有,则 CPU 处于状态 。如果没有从该 CPU 发起的iowait
I/O 正在执行,则 CPU 处于idle
状态 。
那么,iowait
CPU 空闲时间的百分比和至少有一个 I/O 正在从该 CPU 发起的进行中。
计数器iowait
表明系统可以处理更多计算工作。CPU 处于此iowait
状态并不意味着它不能在该 CPU 上运行其他线程或进程。
所以,iowait
只是一种空闲时间的形式。
答案2
我不能 100% 确定我理解了这个问题,但是有一些想法。
这里还有另一个问题提出了这个问题,并且有一些很好的答案:有人能准确解释一下 IOWait 是什么吗?
这里有一篇很好的帖子:http://veithen.github.io/2013/11/18/iowait-linux.html