我正在尝试测量磁盘访问引起的 IO 延迟。为此,我使用delayacct_blkio_ticks
来自/proc/[pid]/stat
响应。无论我的应用程序中完成了多少 IO,我得到的都是常量 0。
proc 人说:
42) delayacct_blkio_ticks %llu (since Linux 2.6.18)
Aggregated block I/O delays, measured in clock ticks (centiseconds).
我使用的是 3.0.101 内核版本。
但是...如果我使用top
,我会得到一个恒定的非零“%wa”值。
top - 00:49:36 up 186 days, 15:06, 3 users, load average: 4.54, 5.80, 5.53
Tasks: 270 total, 1 running, 269 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.1%us, 0.0%sy, 0.0%ni, 97.0%id, 3.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 387581M total, 261149M used, 126432M free, 295M buffers
Swap: 12266M total, 193M used, 12073M free, 82346M cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4290 build 20 0 512g 169g 25m S 8 44.9 241:27.65 java
7614 build 20 0 9056 1268 828 R 0 0.0 0:01.28 top
1 root 20 0 10540 560 536 S 0 0.0 0:46.33 init
我是否读取了错误的测量数据?为什么top
报告正确?仅当我在应用程序中执行某些操作时,WA 值才会高于 0,因此我很确定不是来自其他进程。
确实如此,我不认为 java 进程的状态是D
。delayacct_blkio_ticks
这个状态只是报告时间吗?