就我所了解的iowait而言,它仍然是个谜。

我知道这是CPU等待IO操作完成所花费的时间,但是究竟是哪种IO操作呢?我还不确定为什么如此重要?在IO操作完成后,CPU不能只是做其他事情然后回到处理数据吗?

还有什么合适的工具来诊断哪些进程确实在等待IO。

又有什么方法可以减少IO等待时间?

评论

而且,什么是高iowait?

#1 楼


我知道这是CPU等待IO操作完成所花费的时间,但是究竟是哪种IO操作呢?我还不确定的是,为什么它如此重要?
在IO操作完成后,CPU不能只是做其他事情吗?
然后返回处理数据?


是的,操作系统将安排其他进程在IO阻塞时运行。但是,在该过程中,除非使用异步IO,否则除非完成任何IO操作,否则它不会继续进行。


还有什么正确的工具来诊断哪些过程)恰好
等待IO。


一些您可能会发现有用的工具



iostat,以监视磁盘的服务时间

iotop(如果内核支持),以监视每个进程的IO请求的故障情况,以查看磁盘发出的实际操作过程


什么是减少IO等待时间的方法?



确保您有可用的物理内存因此操作系统可以在内存中缓存磁盘块
使文件系统磁盘使用率保持在80%以下,以避免过多的碎片
调整文件系统
使用电池支持的阵列控制器
选择合适的缓冲区大小执行io操作时


评论


不要忘记“确保后端存储足够快以跟上I / O负载。”

– jgoldschrafe
2012年1月25日20:56

@Dave Cheney,当我的进程空闲时,是因为它正在等待IO。那么IOWait和空闲之间有什么区别?

–ctrl-alt-delor
2012年7月10日在9:07

在IOwait中,该进程处于“不间断睡眠”状态,这意味着该进程无法杀死,以避免损坏磁盘上数据的风险。正常的空闲过程实际上什么也没做,因此杀死它的风险较小。

– mveroone
2014年1月2日在8:18

最重要的是,这实际上意味着您的IO太慢。无论您是否受CPU限制还是CPU饥饿,“使服务器更快”都是不同的,因为有人认为速度较慢的笔记本光盘足以运行数据库服务器,并且IO负载使CPU仅使用它能使用的2%,就像等待为IO完成而疯狂。

– TomTom
2014年11月7日,9:40

天哪,我不敢相信这里的前3个答案是如此错误。 haridsv下面的答案是正确的。没有CPU在“等待” io的完成。是的,某些io可能会阻塞-通常有一个很好的理由,在某些情况下,所有io都可能会阻塞。但是,您也可以看到iowait发生了完全异步的操作。

–symcbean
16-09-17在22:59

#2 楼

旧问题,最近遇到了麻烦,但感觉到现有的答案还不够。

IOWait的定义和属性

IOWait(通常在顶部标记为%wa)是空闲的子类别( %idle通常表示为除定义的子类别以外的所有空闲状态,这意味着CPU没有执行任何操作。因此,只要CPU可能正在处理另一个进程,它就会这样做。另外,空闲,用户,系统,iowait等都是相对于CPU的度量。换句话说,您可以将iowait视为等待io导致的空闲。

准确地说,iowait是花费在接收和处理硬件中断上的时间(占处理器滴答的百分比)。通常将软件中断标记为%si。重要和潜在的误解

IOWait很重要,因为它通常是了解您是否陷入IO瓶颈的关键指标。但是,缺少iowait并不一定意味着您的应用程序就不会成为IO的瓶颈。考虑在系统上运行的两个应用程序。如果程序1严重瓶颈,而程序2占用大量CPU用户,则CPU的%user + %system可能仍然约为100%,并且iowait相应地显示为0。但这仅仅是因为程序2是密集的并且相对来说什么也没说关于程序1,因为所有这些都是从CPU的角度来看。

用于检测IOWait的工具

请参阅Dave Cheney和Xerxes的帖子

还会在top中显示一个简单的%wa

减少IOWait

另外,由于我们即将进入2013年,除了其他人所说的那样,简单的IO的选择价格合理的存储设备即SSD。 SSD很棒!!

#3 楼

我发现此链接中的解释和示例非常有用:“ iowait”到底是什么?顺便说一句,为了完整起见,BTW在这里是指磁盘I / O,但也可以包括网络安装的磁盘(例如nfs)上的I / O,如另一篇文章中所述。

我将引用一些重要的部分(以防链接消失),其中一些是其他人已经说过的重复,但对我来说至少这些更清楚了:


总而言之,'iowait'是时间百分比。
CPU处于空闲状态,并且至少有一个I / O正在进行中。

每个CPU可以处于四种状态之一:用户,系统,空闲,iowait。


我想知道当一个进程正在等待I / O时,如果系统有其他进程准备运行,会发生什么情况。以下内容对此进行了说明:


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


这是一个例如:


假设有两个程序在CPU上运行。一种是从磁盘读取的“ dd”程序。另一个程序是不执行I / O的程序,但是会花费100%的时间进行计算。现在假设
I / O子系统有问题,而物理I / O正在花费一秒钟来完成。每当“ dd”程序在等待其I / O完成时处于睡眠状态时,另一个程序便可以在该CPU上运行。当发生时钟中断时,总是会有一个程序在用户模式或系统模式下运行。
因此,%idle和%iowait值将为0。即使iowait
现在是0,这并不意味着没有I / O问题,因为如果物理I / O占用了一秒钟来完成
,显然是一个I / O问题。


全文值得一读。这是此页面的镜像,以防万一它掉了。

评论


驱动程序完成I / O操作后,正在等待的CPU是否也会负责I / O中断。

– Srikan
9月6日20:11

@Srikan我认为CPU仅参与处理,而不涉及中断的生成。

–haridsv
9月8日晚上8:18

#4 楼

iowait

iowait是处理器等待(即处于空闲状态且不执行任何操作)的时间,在此期间实际上有未完成的磁盘I / O请求。

这通常意味着块设备(即物理磁盘,而不是内存)太慢,或者只是饱和。在检查时注意到,大多数情况实际上是由于I / O等待所致,并不一定意味着您的系统有麻烦-发生这种情况的原因是,除了与I / O绑定的进程之外,您的机器根本无事可做(也就是说,执行I / O操作最多的进程(非I / O绑定系统调用)。从您在系统上执行的任何操作仍然非常敏感的事实也应该显而易见。

工具




sar(来自sysstat软件包,在大多数* nix机器上可用)
iostat

sarfacesar的前端)


评论


请注意,严格来说,I / O等待时间的定义仅在单处理器系统上有效。对于多处理器系统,它需要进行一些改进:veithen.blogspot.be/2013/11/iowait-linux.html

– Andreas Veithen
13年11月18日在22:40

iowait在多大程度上影响平均负载?假设有100个线程在等待网络,洛杉矶会是100个吗?

–伊万·巴拉索夫(Ivan Balashov)
17年2月20日在12:01



#5 楼

对于Solaris,如果需要查看正在运行的I / O操作,则可以使用DTrace查看进程在做什么。对于Linux,有一个类似的程序称为systemtap,它提供与内核和进程调用类似的暴露程度。

我在学习DTrace时使用的一个示例是将cp命令与dd命令进行比较。您可以看到dd进行了更多的读取读取,而cp却没有进行更多读取,这主要是由于默认情况下dd使用的缓冲区大小(如果我没有记错的话)。

#6 楼

哪种IO操作将取决于您的应用程序和设置。

这很重要,因为在某些情况下,CPU无法获取需要继续执行的数据或指令。在某些情况下,它可以继续,但是将取决于正在运行的应用程序及其功能。如果您有一个执行大量磁盘访问的单线程应用程序,则需要等待。

要最大程度地减少IO时间,请购买更多和更快的内存,获得更快的磁盘,对磁盘进行碎片整理。

如果它是内部应用程序的瓶颈,请查看是否可以对其进行优化以读取更大的块或异步执行IO。

评论


好的,那么iowait是花费在阻塞IO操作上的时间吗?

– Peter Krumins
09年5月27日在10:03

因此,例如,如果我执行select()或poll()并阻塞了,那么等待描述符可用的时间将构成iowait时间?

– Peter Krumins
2009年5月27日10:05

我认为那应该属于SO,因为它看起来像是一个编程问题。

– Jeremy French
2009年5月27日10:24

Peteris-是的,这是考虑它的好方法。

–user2278
09年5月27日在13:42

#7 楼

使用ps aux可以打印进程STAT
如果stat是D或Ds,则该进程处于不间断睡眠(通常是IO)
,当进程进入不间断睡眠时,将添加runqueue的nr_iowait,并且如果nr_iowait> 0 ,cpu的空闲时间计入iowait
r:等待运行时间的进程数。
b:进程数在不间断的睡眠中。

http://bencane.com/2012/08/06/troubleshooting-high-io-wait-in-linux/