vmstat:cpu 等待到底是什么意思



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

我的问题是:处理器在等待 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

希望对别人有帮助!

格雷廷斯,

托马斯

如果进程在等待 IO 设备时处于"不间断"状态,则会发生 IO 等待。

如果进程当前执行某些系统调用,则进程是"不间断的"——我认为等待光盘旋转的正常read不会导致 IO-wait ——这将导致应用程序中的错误行为或如果进程中断可能丢失数据(例如,由于用于访问特殊硬件的驱动程序的限制)。

网络上搜索例如"linux不间断内核睡眠解释"后,可以获得进一步阅读

最新更新