如何计算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
命令,我怎样才能得到读/写延迟?