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

时间:2016-04-22 14:34:49

标签: linux linux-kernel

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

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

据我所知,cpu不能真正等待 - 它必须运行一些代码! 那么它是否正在运行一些“等到磁盘中断到来”代码? 为什么它没有运行其他代码并在磁盘中断到来时返回?

据我所知,磁盘速度太慢,以至于cpu可以执行许多次循环,直到磁盘准备就绪。

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

托马斯

2 个答案:

答案 0 :(得分:2)

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

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

在搜索网页后可以进一步阅读。 ' linux不间断内核睡眠解释'

答案 1 :(得分:1)

我在这里找到了答案: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 Wait已经消失,因为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

希望能帮到别人!

Grettings,

托马斯