Latência de E / S de disco usando o arquivo / proc / vmstat

4

Como faço para calcular a latência de leitura e gravação de disco no Linux?

É possível fazer o cálculo usando o sistema de arquivos /proc ?

Estou usando o comando iostat e vmstat . Mas eu não entendo como o cálculo funciona.

Este código que estou usando para cálculo.

  #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] = '
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
'; pagein = atoi(subbuff); } if (strstr(tmp, "pgpgout")) { printf("\n\n%s", tmp); memcpy(subbuff, & tmp[7], 40); subbuff[40] = '
  #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] = '
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
'; pagein = atoi(subbuff); } if (strstr(tmp, "pgpgout")) { printf("\n\n%s", tmp); memcpy(subbuff, & tmp[7], 40); subbuff[40] = '%pre%'; pageout = atoi(subbuff); } } printf("Res : %.2f \t %.2f", pagein - oldvalin, pageout - oldvalout); oldvalin = pagein; oldvalout = pageout; if (fp != NULL) fclose(fp); sleep(1); } }
'; pageout = atoi(subbuff); } } printf("Res : %.2f \t %.2f", pagein - oldvalin, pageout - oldvalout); oldvalin = pagein; oldvalout = pageout; if (fp != NULL) fclose(fp); sleep(1); } }

No comando iostat , como encontro r_await & w_await fields. Quando eu executo o comando iostat -xdctm 1 ,

Eu tenho esta saída.

%pre%

Pelo menos usando o comando iostat , como posso obter a Latência de leitura / gravação ?

    
por shas 20.08.2015 / 08:13

0 respostas