使用 /proc/vmstat 文件的磁盘 I/O 延迟

使用 /proc/vmstat 文件的磁盘 I/O 延迟

如何计算Linux中的磁盘读写延迟?

是否可以使用/proc文件系统进行计算?

我正在使用iostatvmstat命令。但我不明白计算是如何进行的。

我用这段代码进行计算。

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

相关内容