time
é um comando brilhante se você quiser descobrir quanto tempo de CPU um determinado comando leva.
Estou à procura de algo semelhante que possa medir a E / S do disco do programa e de qualquer criança. De preferência, deve distinguir entre E / S que foi armazenada em cache (e, portanto, não causou a rotação do disco) e E / S que não foi armazenada em cache.
Então, eu gostaria de fazer:
iomeassure my_program my_args
e obter 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
Analisei vmstat
, iostat
e sar
, mas nenhum deles está analisando um único processo. Em vez disso, eles olham para todo o sistema.
Eu olhei para 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ídas do sistema de arquivos:' são as gravações em cache em blocos de 512 bytes.
Você pode forçar o cache a ficar 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'