it-swarm.cn

谁能确切解释什么是IOWait?

尽管我已经了解了有关iowait的内容,但对我来说仍然是一个谜。

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

还有哪些正确的工具可以诊断出哪些进程确实在等待IO。

最小化IO等待时间的方法是什么?

207
Peter Krumins

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

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

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

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

  • iostat,以监视磁盘的服务时间
  • iotop(如果您的内核支持),以监视IO每个进程的请求的细目分类
  • strace,以查看进程发出的实际操作

最小化IO等待时间的方法是什么?

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

最近遇到了一个老问题,但觉得现有答案不够。

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的帖子

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

减少IOWait

此外,正如我们现在快要进入2013年一样,除了别人所说的那样,简单到极好的IO可以选择负担得起的存储设备,即SSD。SSD很棒!!!

48
Grumpy

iowait

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

这通常意味着块设备(即物理磁盘,而不是内存)太慢,或者只是饱和。

因此,您应该注意,如果您看到系统上的平均负载很高,并且在检查时注意到其中大部分实际上是由于I/O等待所致,则不一定意味着您的系统有麻烦-发生这种情况时,除了与I/O绑定的进程(即,比其他任何事情执行更多I/O(非I/O绑定的系统调用)的进程)之外,计算机根本不做任何事情。从您在系统上所做的任何事情仍然非常敏感的事实,这也应该显而易见。

工具

  • sar(在sysstat包中,在大多数* nix计算机上可用)
  • iostat
  • sarfacesar的前端)
36
Xerxes

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

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

总而言之,“ iowait”是CPU空闲且至少有一个I/O正在进行中的时间百分比。

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

我想知道当一个进程正在等待I/O时,如果系统有其他进程准备运行,会发生什么情况。下面解释了它:

如果CPU处于空闲状态,则内核将确定当前是否有至少一个正在进行的I/O正在从该CPU启动的本地磁盘或远程安装磁盘(NFS)。如果存在,则“ iowait”计数器加一。如果没有从该CPU启动的I/O正在进行,则“空闲”计数器将增加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问题。

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

34
haridsv

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

在学习DTrace时,我使用的一个示例是将cp命令与dd命令进行比较。您可以看到dd进行了更多的读取操作,而cp却没有这样做,主要是因为dd默认使用了缓冲区大小(如果我记得正确)。

1
Milner

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

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

为了最大限度地减少IO)时间,购买更多和更快的内存,获得更快的磁盘,整理磁盘碎片。

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

0
Jeremy French

使用ps aux可以打印过程STAT
如果stat是D或Ds,则该过程处于不间断睡眠(通常是IO)
当进程进入不间断睡眠时,将添加runqueue的nr_iowait,如果nr_iowait> 0,则将cpu的空闲时间计为iowait

vmstat还显示了多少个处理块
r:等待运行时的进程数。
b:不间断睡眠的进程数。

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

0
Singo