Mierzenie użycia dysku we / wy przez program

12

time to genialne polecenie, jeśli chcesz dowiedzieć się, ile czasu zajmuje procesor.

Szukam czegoś podobnego, co może zmierzyć dyskowe we / wy programu i dowolnych dzieci. Najlepiej, aby rozróżniał między operacjami we / wy, które były buforowane (a tym samym nie powodowały wirowania dysku), a operacjami we / wy, które nie były buforowane.

Więc chciałbym zrobić:

iomeassure my_program my_args

i uzyskaj dane wyjściowe podobne do:

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

Patrzyłem na vmstat, iostati sar, ale żaden z nich nie patrzy na jeden proces. Zamiast tego patrzą na cały system.

Patrzyłem na to iotop, ale to daje mi tylko widok w tej chwili.

--- edytować ---

odpowiedź snapa wydaje się bliska.

„Wejścia systemu plików:” to niebuforowane odczyty w 512-bajtowych blokach.

„Wyjścia systemu plików:” to zapisy w pamięci podręcznej w blokach 512-bajtowych.

Możesz wymusić opróżnienie pamięci podręcznej za pomocą:

sync ; echo 3 | sudo tee /proc/sys/vm/drop_caches >/dev/null

Testowałem z:

 seq 10000000 > seq
 /usr/bin/time -v bash -c 'perl -e "open(G,\">f\"); print G <>;close G; unlink \"f\";" seq'
Ole Tange
źródło

Odpowiedzi:

9

Nie określono, którego systemu operacyjnego używasz.

Linux

Zamiast używać time foo(zwykle) wbudowanej powłoki, możesz spróbować wykonać polecenie zewnętrzne /usr/bin/time foo. Daje dodatkowe informacje, takie jak liczba wejść i wyjść systemu plików (ale brak informacji o trafieniach w pamięci podręcznej lub ilości bajtów). Zobacz man timei man getrusagedalsze instrukcje.

Pamiętaj, że ta funkcja wymaga jądra Linux w wersji 2.6.22 lub nowszej.

FreeBSD

Zastosowanie /usr/bin/time -l foo. Podaje liczbę wejść i wyjść. Zobacz man timei man getrusagedalsze instrukcje.

kłapnięcie
źródło