linux iowait
iowait和load一样,都是非常容易让人产生误解的系统指标。
iowait表示cpu空闲且有未完成的io请求的时间,iowait高并不能反映出磁盘是系统的性能瓶颈。iowait高的时候cpu正处于空闲状态,没有任务可以执行。此时存在已经发出的磁盘io,此时的cpu空闲状态称之为iowait。本质上,iowait是一种特殊的cpu空闲状态。
iowait状态的cpu是运行在pid为0的idle线程上。
cpu此时之所以进入睡眠状态,是因为进程处于睡眠状态,在等待某个特定的事件(比如网络数据,io操作完成等)。
iowait仅能反应磁盘io的指标,并不能反应其他io设备的指标,比如网络丢包。
在io wait的进程处于不可中断状态,通过top命令可以看到进程状态为
由此可见,iowait包含的信息量非常少,仅凭iowait升高不能判断出系统io有问题。要想判断系统io有问题,还需要使用iostat等命令来查看系统的svctm、util、avgqu-sz等指标。
case 1
仅cpu的繁忙程度变化的情况下,会影响到iowait的值。
case 2
在cpu繁忙程序不变的情况下,发起io请求的时间不同也会影响到iowait的值。