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


18

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

但是基于两个知识点,我感到困惑:

  1. 如果某个进程使用系统调用读取磁盘,则该进程将被阻止。
  2. 如果某个进程被阻止,则无法安排该进程在CPU上运行。

对?

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

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


我介入并写下了正确的答案。抱歉,当您需要我时我不在那儿;-)
Alec Teal 2015年

Answers:


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仅仅是空闲时间的一种形式。


这实际上是错误的。还有NFS-CPU甚至没有这个概念。从根本上讲,这是CPU花费的时间,因为它正在处理一些底层IO东西-从访问它所连接的东西的意义上说,不是处理通常读取文件而未读取的I / O。例如,在Raspberry Pi上没有DMA控制器,因此CPU无法执行“嘿,主板从卡上读取我这么多字节,然后从此处开始将它们放在ram中”,它必须手动执行
Alec Teal

因此它花费大量时间不断等待io,就像读卡完成一样。您听起来好像可以通过此“ io等待”(当然不计算在内)来衡量高速缓存未命中,IO等待的定义如下:内核在低级设备I / O例程中花费的时间-例如在RPi中,它实际上必须从卡上执行读取过程,而CPU(作为无DMA的块)必须等待IO总线上的数据。使用DMA控制器时,它会与控制器对话,并说“完成后告诉我”-在DMA控制器执行设备IO时让它做其他事情
Alec Teal 2015年

使用dstat查看IOwaiting BTW,也无法真正按进程来衡量iowait和花费在做内核工作上的时间。就像说有两个过程“写入”到“文件”一样,第一个快速完成,FS出于某种原因选择缓存写入,第二个导致缓存刷新,计算返回更长的时间是不公平的从写入到导致写入的过程。与I / O等待相同,这就是为什么不按进程进行度量的原因。
亚历克·蒂尔

4
@ AlecTeal:不,它是正确的,您的评论是错误的。iowait计算在I / O上阻塞的时间,不 I / O 提供服务。如果您不想通过读取内核源代码来确认这一点,请尝试以下实验:安装网络文件系统,开始读取文件,然后对远程计算机进行防火墙保护。即使处理器完全空闲,iowait时间仍然会很高。
戴维(David)

1
我对此答案进行了测试。dd if=/dev/sda of=/dev/null赚高wa。然后运行while-true代码,wa而不是us。谢谢你
华迪

-2

我不是100%肯定我理解这个问题,但是有一些想法。

这里还有一个问题问了这个问题,并且有很好的答案:谁能确切解释什么是IOWait?

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


7
迈克,答案最好包括内容,而不仅仅是内容的链接。通过在此处提供内容,可以确保当这些链接消失时,您的答案仍然有价值。
EEAA 2015年

1
@EEAA,那么答案需要编辑,而不是一无是处吗?或者可以将其移至评论中。它仍然包含有用的信息。否决票意味着该信息是无用的,还使其几乎不可见吗?我并不是说您投票否决,我只是想知道人们在这里采用的方法。
罗兰·皮拉卡斯

3
@RolandPihlakas这是一个动机问题。在这种情况下,下注+评论为用户提供了修正其答案的动力。在解决问题后,我很乐意删除我的DVD。编辑它们会适得其反,因为它会导致不良行为。多年来,尽管有人被要求不这样做,但我们有几个用户发布过链接的答案。如果用户不愿意在答案上花些力气,那么我不会通过修复工作来帮助他们。
EEAA 2015年

@EEAA感谢您的详尽回答。您的方法是可以理解的,并且通过您的评论,您也可以为答案的作者提供激励。相比之下,我担心无声无语的投票多数人无能为力,因为它们晦涩难懂。但是我有点不准确-我主要想知道为什么答案这么低以至于它变灰了?您对一两个否决票的评论应该足够了吗?
Roland Pihlakas 2015年

2
@RolandPihlakas人们认为答案没有用,所以他们投了反对票。他们拒绝投票,因为是星期二。他们之所以投票,是因为今天在明尼阿波利斯正在下雪(确实如此,并且应该在春季晚些时候下雪)。谁知道。
EEAA
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.