16
2025
01
17:12:39

I/O wait简介

I/O wait,在不同的Linux系统监控Monitor工具中(top, atop, htop, vmstat, mpstat, iostat等等),显示为iowait, wait, wa, %iowait, or wait%,表示的是:

CPU或者CPUs处于空闲状态,而此时存在未完成的磁盘I/O请求的时间


需要注意的是,这是个描述CPU或者CPUs(即系统全局)的值,而不是描述进程的值。一般来说,在描述CPU/系统时,有如下的若干值总和为100%:

sys + user + steal + iowait + idle = 100%

其中:

  • sys:在内核态运行的时间,有的会将sys细分,区分出

    • irq:处理中断的时间

    • soft:处理软中断的时间

  • user:在用户态运行的时间,有的会将user细分,区分出nice:

    • nice:用户态运行的通过nice提权的时间

  • steal虚拟机环境中,等待CPU服务其他虚拟处理器的时间(物理系统没有)

  • iowait:系统空闲,有未完成的IO请求

  • idle:系统空闲(没有未完成的IO请求)

有的还会增加对虚拟机时间的细分:

  • guest:运行虚拟机的时间

  • gnice:nice提权的运行虚拟机的时间

但无论如何,这些值相加之后为100%,描述的是一个CPU,或者系统(CPUs)。而用于描述线程/进程的时间则为:

  • CPU:线程/进程在CPU上运行的时间,有的会分出:

    • usr:用户态的运行时间

    • sys:在内核态运行的时间,有的会将sys细分,区分出

有的会细分出:

  • guest:运行虚拟机的时间

并且这些占比之和也不是100%,因为这个百分比的分母是单个CPU的总时间,线程/进程上的时间百分比描述的只是这个线程运行时间占在单个CPU上运行时间的百分之几,而有的时候这个百分比会超过100%(甚至到百分之几千上万),这是因为这个进程(不可能是线程)分出的多个线程同时在N个CPU上重负荷运行。

换句话说,io wait的时间和idle的时间内,CPU都在空闲,只不过此时有无io请求在执行而已,因此会出现:

  • 当CPU的处理能力提升的时候,IO wait的比例会升高

  • 当CPU的处理能力降低的时候,IO wait的比例会降低

注意!

此外可以看到,在同步读写和异步读写两种情况中,可能总的操作时间差不多,但有:

  • 同步读写中(sync IO,比如read(2)),sys占比高,iowait占比低,因为当执行IO请求的时候,CPU在等待,不算idle

  • 异步读写中(async IO,比如io_submit(2)),iowait占比高,sys占比低,这是因为当执行IO请求时,CPU空闲,因为请求已经发送给设备,系统(或者说线程/进程)在等待中断发生,从而可以继续后面的操作。




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/8886.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: