proc FS를 사용하여 블록 I/O 대기 시간 측정

proc FS를 사용하여 블록 I/O 대기 시간 측정

디스크 액세스로 인한 IO 대기 시간을 측정하려고 합니다. 이를 위해 나는 delayacct_blkio_ticks의 응답을 사용합니다 /proc/[pid]/stat. 내 애플리케이션에서 얼마나 많은 IO가 수행되더라도 내가 얻는 것은 상수 0뿐입니다.

프록 사람들이 말했습니다:

42) delayacct_blkio_ticks  %llu  (since Linux 2.6.18)
Aggregated block I/O delays, measured in clock ticks (centiseconds).

커널 버전 3.0.101을 사용하고 있습니다.

하지만...을 사용하면 top0이 아닌 상수 "%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이 상태는 단지 보고 시간인가요?

관련 정보