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

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

但我很困惑,根据2个知识点:

  1. 如果进程使用系统调用来读取磁盘,则进程被阻止。
  2. 如果某个进程被阻塞,则不能在CPU上运行。

对?

CPU看起来没有时间在I / O上等待…会发生什么?

如果推荐一些书或文章给我进一步阅读,那么更好。

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

如果CPU处于空闲状态,则内核将确定是否至less有一个I / O正在进行到本地磁盘或从该CPU启动的远程挂载的磁盘(NFS)。 如果有,则CPU处于iowait状态。 如果没有从该CPU启动的I / O,则CPU处于idle状态。

所以, iowait是CPU闲置的时间百分比,并且至less有一个由该CPU启动的I / O。

iowait计数器指出,该系统可以处理更多的计算工作。 仅仅因为CPU处于iowait状态并不意味着它不能在该CPU上运行其他线程或进程。

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

我不是100%确定我明白这个问题,但有一些想法。

这里还有另外一个问题,问这个问题,并且有一些很好的答案: 任何人都可以正确地解释IOWait是什么?

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