Linux에서 디스크 읽기 및 쓰기 대기 시간을 계산하는 방법은 무엇입니까?
/proc
계산을 위해 파일 시스템을 사용할 수 있습니까 ?
나는 사용 iostat
하고 vmstat
명령합니다. 그런데 계산이 어떻게 이루어지는지 이해가 안 되네요.
이 코드를 계산에 사용합니다.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/sysinfo.h>
int main(int argc, char * * argv) {
struct sysinfo si;
sysinfo( & si);
const double xdt = 1024;
float pagein, pageout, oldvalin = 0, oldvalout = 0, res;
for (;;) {
FILE * fp = fopen("/proc/vmstat", "r");
char tmp[256];
char subbuff[256];
while (fp != NULL && fgets(tmp, sizeof(tmp), fp) != NULL) {
if (strstr(tmp, "pgpgin")) {
memcpy(subbuff, & tmp[7], 40);
subbuff[40] = '\0';
pagein = atoi(subbuff);
}
if (strstr(tmp, "pgpgout")) {
printf("\n\n%s", tmp);
memcpy(subbuff, & tmp[7], 40);
subbuff[40] = '\0';
pageout = atoi(subbuff);
}
}
printf("Res : %.2f \t %.2f", pagein - oldvalin, pageout - oldvalout);
oldvalin = pagein;
oldvalout = pageout;
if (fp != NULL) fclose(fp);
sleep(1);
}
}
iostat
명령 에서 r_await
& w_await
필드를 찾는 방법. iostat -xdctm 1
명령을 실행하면
이 출력을 얻었습니다.
Linux 2.6.35.14-106.fc14.i686 (shashi) 08/27/2015 _i686_ (2 CPU)
08/27/2015 05:33:52 PM
avg-cpu: %user %nice %system %iowait %steal %idle
8.75 0.00 2.35 1.10 0.00 87.80
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
sda 3.76 16.44 2.35 2.33 0.07 0.07 62.70 0.17 35.48 4.78 2.24
dm-0 0.00 0.00 2.04 0.59 0.03 0.00 27.88 0.18 68.13 3.31 0.87
dm-1 0.00 0.00 2.60 4.09 0.01 0.02 8.00 2.38 354.78 0.67 0.45
dm-2 0.00 0.00 1.47 13.63 0.03 0.05 10.99 3.76 249.16 0.85 1.28
적어도 명령을 사용하여 iostat
어떻게 얻을 수 있습니까?읽기/쓰기 대기 시간?