You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何iostat显示磁盘利用率100%但aqu-sz小于1?

问题:磁盘利用率100%但平均队列大小aqu-sz远低于1的矛盾解析

某C程序在单个文件内顺序写入12-16 KiB大小的块至若干文件,在~16 KiB写负载下,1秒间隔的iostat -x输出如下:

Device               w/s     wkB/s   wrqm/s  %wrqm w_await wareq-sz  aqu-sz  %util
nvme1n1          7497.00 105250.50     0.00   0.00    0.03    14.04    0.23 100.00

该输出显示磁盘利用率100%,aqu-sz(平均队列大小)为0.23,这是该工作负载的典型读数:队列大小通常在0.20-0.25之间,利用率常为100%,偶尔会降至90%或95%。

按定义,利用率是“磁盘至少有一个请求待处理的时间占比”,100%意味着始终至少有一个请求待处理;而aqu-sz是请求队列的时间平均大小,即提交至块层未完成的在途请求平均数量。

但此处读数与定义矛盾:若始终至少有一个请求待处理,平均队列大小应至少为1.0,这是为何?

注1:本次运行的读和丢弃统计均约为0,已省略。
注2:与单磁头磁盘不同,多独立磁头HDD和现代SSD可处理多个待处理请求,利用率100%并不代表设备饱和。


解答

这看似矛盾的核心是**iostat的两个指标统计对象和逻辑存在差异**,具体拆解为两点:

  1. 统计对象不一致
    aqu-sz统计的是内核块层IO调度器队列的平均长度,而%util统计的是NVMe存储设备本身的忙碌时间占比。
    NVMe设备采用队列式IO提交机制,块层队列中的请求会被设备快速取走,转移到设备内部的处理队列中执行,因此块层队列绝大多数时间处于空状态,aqu-sz自然数值极低;但设备内部一直在处理请求,没有空闲,所以利用率显示100%。

  2. 超高速请求处理与统计粒度的叠加影响
    NVMe单请求处理时间极短(本例中w_await仅0.03毫秒),在1秒的统计周期内,块层队列仅在请求提交的瞬间存在请求,其余时间为空,但设备始终在处理内部队列的请求,利用率统计为100%;而aqu-sz是时间加权的平均队列长度,大量空队列的时间拉低了整体平均值,最终远低于1。


内容的提问来源于stack exchange,提问作者BeeOnRope

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 19:02:12