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

HUA*_* Di 19 linux central-processing-unit io linux-kernel

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

但我很困惑,基于 2 个知识点:

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

对?

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

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

cha*_*aos 22

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

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

所以,iowait是的时间百分比CPU处于空闲状态有从CPU开始进行至少一个I / O。

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

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

  • @AlecTeal:不,它是正确的,您的评论是错误的。iowait 计算I/O 上*阻塞* 的时间,而不是*服务* I/O。如果您不想通过阅读内核源代码来确认这一点,请尝试一个实验:挂载网络文件系统,开始读取文件,然后防火墙关闭远程机器。即使处理器完全空闲,iowait 时间仍会很长。 (4认同)