为什么 CPU 花时间在 IO(wa) 上?

为什么 CPU 花时间在 IO(wa) 上?

我知道wa(在top)测量等待 I/O 的 CPU 时间。很多文章都这么说。

但我感到困惑的是,基于2个知识点:

  1. 如果进程使用系统调用来读取磁盘,则该进程被阻止。
  2. 如果进程被阻塞,它就无法被安排在 CPU 上运行。

正确的?

似乎 CPU 没有时间等待 I/O...会发生什么?

如果能推荐一些书籍或者文章让我进一步阅读就更好了。

答案1

CPU 空闲状态分为两个不同的“子”状态:iowaitidle

如果 CPU 处于空闲状态,则内核将确定当前是否至少有一个从该 CPU 发起的 I/O 正在执行,无论是本地磁盘还是远程安装的磁盘 (NFS)。如果有,则 CPU 处于状态 。如果没有从该 CPU 发起的iowaitI/O 正在执行,则 CPU 处于idle状态 。

那么,iowaitCPU 空闲时间的百分比至少有一个 I/O 正在从该 CPU 发起的进行中。

计数器iowait表明系统可以处理更多计算工作。CPU 处于此iowait状态并不意味着它不能在该 CPU 上运行其他线程或进程。

所以,iowait只是一种空闲时间的形式。

答案2

我不能 100% 确定我理解了这个问题,但是有一些想法。

这里还有另一个问题提出了这个问题,并且有一些很好的答案:有人能准确解释一下 IOWait 是什么吗?

这里有一篇很好的帖子:http://veithen.github.io/2013/11/18/iowait-linux.html

相关内容