Answers:
我知道这是CPU等待IO操作完成所花费的时间,但是究竟是哪种IO操作呢?我还不确定为什么如此重要?在IO操作完成之后,CPU不能只是做其他事情,然后回到处理数据的角度吗?
是的,操作系统将安排其他进程在IO上被阻止时运行。但是在该过程中,除非使用异步IO,否则在完成任何IO操作之前它不会继续进行。
还有什么是正确的工具来诊断哪些进程确实在等待IO。
您可能会发现有用的一些工具
iostat
,以监视磁盘的服务时间iotop
(如果您的内核支持),以监视每个进程的IO请求细分strace
,查看流程发出的实际操作还有什么方法可以最大程度地减少IO等待时间?
最近遇到了一个老问题,但觉得现有答案不够。
IOWait(通常%wa
在顶部标记)是闲置的子类别(%idle
通常表示为除定义的子类别之外的所有闲置),这意味着CPU没有执行任何操作。因此,只要CPU可能正在处理另一个进程,它就会这样做。另外,空闲,用户,系统,iowait等都是相对于CPU的度量。换句话说,您可以将iowait视为等待io导致的空闲。
准确地说,iowait是接收和处理硬件中断所花费的时间(占处理器滴答的百分比)。通常将软件中断标记为%si
。
IOWait很重要,因为它通常是了解您是否遇到IO瓶颈的关键指标。但是,缺少iowait并不一定意味着您的应用程序就不会成为 IO的瓶颈。考虑在一个系统上运行的两个应用程序。如果程序1严重受到io瓶颈的影响,而程序2却是CPU的繁重用户,则%user + %system
CPU的使用率仍可能约为100%,并且iowait相应地显示为0。但这仅仅是因为程序2是密集的并且相对而言似乎什么也没说程序1,因为所有这些都是从CPU的角度来看的。
查看Dave Cheney和Xerxes的帖子
而且还会top
显示一个简单的内容%wa
。
此外,正如我们快要进入2013年一样,除了其他人所说的那样,简单而出色的IO存储设备(即SSD)的价格也是可以承受的。固态硬盘很棒!!!
iowait
iowait
是时候该处理器/处理器正在等待(即处于空闲状态,并不会什么),在此期间,有实际上是优秀的磁盘I / O请求。
这通常意味着块设备(即物理磁盘,而不是内存)太慢,或者只是饱和。
因此,您应该注意,如果您看到系统上的平均负载很高,并且在检查时注意到其中大部分实际上是由于I / O等待所致,则不一定意味着您的系统有麻烦-发生这种情况时,除了与I / O绑定的进程(即,比其他任何事情执行更多I / O(非I / O绑定的系统调用)的进程)之外,计算机根本不做任何事情。从您在系统上所做的任何事情仍然非常敏感的事实,这也应该显而易见。
工具
sar
(从sysstat
软件包中,可在大多数* nix机器上获得)iostat
sarface
(的前端sar
)iowait
影响Load Average
?假设有100个线程在等待网络,洛杉矶会是100个吗?
我发现此链接中的解释和示例非常有用:“ iowait”到底是什么?。顺便说一句,为了完整起见,BTW在这里是指磁盘I / O,但也可以包括网络安装的磁盘(例如nfs)上的I / O,如本另一篇文章中所述。
我将引用一些重要的部分(以防链接消失),其中一些将是其他人已经说过的重复,但是对我来说至少这些更清楚了:
总而言之,“ iowait”是CPU空闲且至少有一个I / O正在进行中的时间百分比。
每个CPU可以处于以下四种状态之一:用户,sys,空闲,iowait。
我想知道当一个进程正在等待I / O时,如果系统有其他进程准备运行,会发生什么情况。下面解释了它:
如果CPU处于空闲状态,则内核将确定当前是否有至少一个正在进行的I / O正在从该CPU启动的本地磁盘或远程安装磁盘(NFS)。如果存在,则“ iowait”计数器加1。如果没有从该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问题。
哪种IO操作取决于您的应用程序和设置。
这很重要,因为在某些情况下,CPU无法获取需要继续执行的数据或指令。在某些情况下,它可以继续,但是将取决于正在运行的应用程序及其功能。如果您有一个执行大量磁盘访问的单线程应用程序,则需要等待。
为了最大程度地减少IO时间,请购买更多和更快的内存,获得更快的磁盘,整理磁盘碎片。
如果它是内部应用程序的瓶颈,请查看是否可以对其进行优化以读取更大的块或异步执行IO。
如果状态为D或Ds,则使用ps aux可以打印进程STAT ,
当进程进入不间断睡眠时,该进程处于不间断睡眠(通常为IO),添加了runqueue的nr_iowait,如果nr_iowait> 0,则计算cpu的空闲时间去等待
vmstat还显示了多少个进程块
r:等待运行时的进程数。
b:不间断睡眠的进程数。
http://bencane.com/2012/08/06/troubleshooting-high-io-wait-in-linux/