使用 proc FS 测量块 I/O 延迟

使用 proc FS 测量块 I/O 延迟

我正在尝试测量磁盘访问引起的 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 进程的状态是Ddelayacct_blkio_ticks这个状态只是报告时间吗?

相关内容