linux - vmstat : What exactly does cpu wait mean?

标签 linux linux-kernel

今天我有一个 linux 系统,在 vmstat 等待列中有 100% 等待。

我的问题是:处理器在等待 I/O 时究竟做了什么?

据我了解,CPU 不能真正等待 - 它必须运行一些代码! 那么它是否运行了一些严格的“等待磁盘中断到来”代码? 为什么当来自磁盘的中断到达时它不运行其他代码并返回?

据我所知,磁盘太慢了,以至于 CPU 可以执行很多很多周期,直到磁盘准备就绪。

为什么 linux 让 cpu 等到 I/O 完成而不是给它一些工作去做?

托马斯

最佳答案

我在这里找到了答案:http://veithen.github.io/2013/11/18/iowait-linux.html

因此,处理器级别的“等待 I/O”意味着: 处理器除了等待 I/O 什么都不做。 在等待 I/O 时,处理器可以运行用户代码,在这种情况下,等待 I/O 消失并且 CPU% 上升。

这里是链接页面中的测试用例。

只需运行一个在第一个 CPU 上执行大量 I/O 的任务:

taskset 1 dd if=/dev/sda of=/dev/null bs=1MB

您可以看到第一个 CPU 现在正在运行内核代码 (sy) 或等待 I/O (wa):

%Cpu0  :  0.0 us,  2.9 sy,  0.0 ni,  0.0 id, 97.1 wa,  0.0 hi,  0.0 si,  0.0 st

现在我们在同一个 cpu 上开始一个紧密的 cpu 循环:

taskset 1 sh -c "while true; do true; done"

然后 - 看看 - I/O 等待消失了,因为 CPU 现在除了等待 I/O 之外还有其他事情要做 - 它运行用户态代码!

%Cpu0  : 91.3 us,  1.3 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  7.3 si,  0.0 st

希望对其他人有所帮助!

问候,

托马斯

关于linux - vmstat : What exactly does cpu wait mean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36796635/

相关文章:

web 文件夹外的 Java Servlet 绝对路径 [ Windows & Linux ]

linux - 在 linux 中添加系统调用时修改 syscall_table.S

linux-kernel - 用于暂停/恢复的 GPIO?

linux - Bash:如何在后台 while 循环中检索变量值

linux - 无法更新适用于 Linux 的 Github 桌面(错误 : 429 Too Many Requests)

c - linux c 程序 除了读取/var/log 中的文件之外,还有另一种读取日志的方法吗?

c - 如何停止 crontrack session

linux - 在所有内核上设置控制寄存器

python - 如何在 ubuntu 上将我的 python 版本从 3.7.5 降级到 3.6.5

c# - 初学者如何在 Linux 中开始使用 Mono?