Medindo o uso de E / S do disco de um programa

12

time é um comando brilhante se você quiser descobrir quanto tempo de CPU um determinado comando leva.

Estou procurando algo semelhante que possa medir a E / S de disco do programa e qualquer filho. De preferência, ele deve distinguir entre E / S que foi armazenada em cache (e, portanto, não fez o disco girar) e E / S que não foi armazenada em cache.

Então eu gostaria de fazer:

iomeassure my_program my_args

e obtenha uma saída semelhante a:

Cached read: 10233303 Bytes
Cached write: 33303 Bytes  # This was probably a tmp file that was erased before making it to the disk
Non-cached read: 200002020 Bytes
Non-cached write: 202020 Bytes

Eu olhei vmstat, iostate sar, mas nenhum deles está olhando para um único processo. Em vez disso, eles olham para todo o sistema.

Eu olhei iotop, mas isso só me dá uma visão neste instante.

--- editar ---

a resposta de snap parece próxima.

'Entradas do sistema de arquivos:' são as leituras não armazenadas em cache em blocos de 512 bytes.

'Saída do sistema de arquivos:' é a gravação em cache em blocos de 512 bytes.

Você pode forçar o cache vazio com:

sync ; echo 3 | sudo tee /proc/sys/vm/drop_caches >/dev/null

Eu testei com:

 seq 10000000 > seq
 /usr/bin/time -v bash -c 'perl -e "open(G,\">f\"); print G <>;close G; unlink \"f\";" seq'
Ole Tange
fonte

Respostas:

9

Você não especificou qual sistema operacional você usa.

Linux

Em vez de usar o time fooque é (geralmente) um shell embutido, você pode tentar o comando externo /usr/bin/time foo. Ele fornece algumas informações adicionais, como número de entradas e saídas do sistema de arquivos (mas nenhuma informação sobre ocorrências de cache ou valores de bytes). Veja man timee man getrusagepara mais instruções.

Observe que esse recurso requer a versão 2.6.22 do kernel Linux ou mais recente.

FreeBSD

Use /usr/bin/time -l foo. Fornece o número de entradas e saídas. Veja man timee man getrusagepara mais instruções.

estalar
fonte