time
est une commande brillante si vous voulez savoir combien de temps CPU prend une commande donnée.
Je cherche quelque chose de similaire qui peut mesurer les E / S disque du programme et des enfants. De préférence, il doit faire la distinction entre les E / S qui ont été mises en cache (et n'ont donc pas entraîné la rotation du disque) et les E / S qui n'ont pas été mises en cache.
Je voudrais donc faire:
iomeassure my_program my_args
et obtenir une sortie similaire à:
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
Je l' ai regardé vmstat
, iostat
et sar
, mais aucun d' entre eux sont à la recherche d'un seul processus. Au lieu de cela, ils regardent l'ensemble du système.
J'ai regardé iotop
, mais cela ne me donne une vue que cet instant.
--- Éditer ---
La réponse de Snap semble proche.
«Entrées du système de fichiers:» correspond aux lectures non mises en cache dans des blocs de 512 octets.
«Sorties du système de fichiers:» est l'écriture mise en cache dans des blocs de 512 octets.
Vous pouvez forcer le cache vide avec:
sync ; echo 3 | sudo tee /proc/sys/vm/drop_caches >/dev/null
J'ai testé avec:
seq 10000000 > seq
/usr/bin/time -v bash -c 'perl -e "open(G,\">f\"); print G <>;close G; unlink \"f\";" seq'