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
, iostat
e 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'