time
ist ein brillanter Befehl, wenn Sie herausfinden möchten, wie viel CPU-Zeit ein bestimmter Befehl benötigt.
Ich suche nach etwas ähnlichem, das die Scheibe I / O des Programms und irgendwelcher Kinder messen kann. Vorzugsweise sollte unterschieden werden zwischen zwischengespeicherten E / A-Vorgängen (und die Festplatte wurde nicht gedreht) und nicht zwischengespeicherten E / A-Vorgängen.
Also würde ich gerne machen:
iomeassure my_program my_args
und erhalte eine Ausgabe ähnlich der folgenden:
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
Ich habe betrachtet vmstat
, iostat
und sar
, aber keiner von ihnen in einem einzigen Prozess suchen. Stattdessen betrachten sie das gesamte System.
Ich habe angeschaut iotop
, aber das gibt mir nur einen Blick in diesem Moment.
--- edit ---
Die Antwort von snap scheint nahe zu sein.
"Dateisystemeingaben:" sind die nicht zwischengespeicherten Lesevorgänge in 512-Byte-Blöcken.
"Dateisystemausgaben:" sind die zwischengespeicherten Schreibvorgänge in 512-Byte-Blöcken.
Sie können das Leeren des Caches erzwingen mit:
sync ; echo 3 | sudo tee /proc/sys/vm/drop_caches >/dev/null
Ich habe getestet mit:
seq 10000000 > seq
/usr/bin/time -v bash -c 'perl -e "open(G,\">f\"); print G <>;close G; unlink \"f\";" seq'