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 ?
Tags disk proc io linux filesystems