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, iostatund 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'