Estou trabalhando na criação de uma ferramenta para exibir estatísticas do sistema no Linux. Estou usando as APIs / sys e / proc para isso para saber como elas funcionam.
Atualmente, estou lendo /sys/block/<dev>/stat
para obter estatísticas de dispositivos de bloco ( docs ) . Isso funciona muito bem para ver o quanto a leitura e a gravação estão acontecendo no disco, mas estou imaginando se é possível ver a E / S total do dispositivo de bloco do ponto de vista de um aplicativo.
Veja um exemplo para demonstrar o que quero dizer:
> cat somebigfile > /dev/zero # Takes some time, triggers device I/O
> cat somebigfile > /dev/zero # Runs quickly a second time, no device I/O
Acredito que a diferença entre as duas execuções se deve ao fato de o kernel ir para o cache de buffer em vez do disco para a segunda leitura. Eu confirmei isso ao liberar o cache usando /proc/sys/vm/drop_caches
, fazendo com que o comando fosse executado da mesma forma novamente.
Qual é a maneira mais fácil de ver o total de bytes lidos em dispositivos de bloco, incluindo bytes fornecidos pelo cache de buffer, durante algum período de tempo?
Eu também estou pensando em somar os valores em /proc/<pid>/io
, mas isso inclui todo o I / O e não é dividido por dispositivo ou tipo.
Estou ciente de que poderia fazer isso usando algo como System Tap , mas estou me perguntando se existe uma maneira mais simples.