Existe uma maneira confiável de dizer quanto tempo é E / S

2

Estou programando algum código e gostaria de saber quanto do tempo gasto deve-se à leitura dos dados do disco. Eu não acredito no resultado que time me dá. Por exemplo, eu tenho um arquivo de 1,3 GB e se eu executar wc , obtenho

time wc largefile.file 
  50000000  150000000 1316665179 largefile.file

real    0m26.835s
user    0m18.363s
sys     0m0.495s

Não é possível que tenha tomado < 0,5 segundos para ler o arquivo do meu disco rígido antigo.

Existe uma maneira confiável de saber quanto tempo foi devido a E / S?

Mais detalhes sobre por que não vejo como interpretar time . Se eu fizer

time cat largefile.file > /dev/null

real    0m24.230s
user    0m0.060s
sys     0m1.473s

então é tentador dizer que cerca de 22,5 segundos são gastos em E / S. Mas a figura wc acima implica que é de 8 segundos. Essas duas figuras não são consistentes.

    
por Lembik 12.05.2014 / 20:32

1 resposta

2

sys significa tempo de CPU gasto no kernel, mas você quer o tempo de espera do io.

O Google pesquisou outra resposta de troca de pilha apontando para " iowait por processo de / proc / $ pid / stat ". (E talvez precise executar o programador em um depurador e definir um ponto de interrupção em exit() / _exit() , para que você possa ler o iowait antes que o processo desapareça?).

Muitas vezes eu apenas o calculo subtraindo o tempo de CPU (user + sys) do tempo real. Isso pressupõe que o processo não espere por coisas que você não conta como "IO".

    
por 12.05.2014 / 22:42

Tags