Измерение дискового ввода-вывода использования программы

12

time это блестящая команда, если вы хотите выяснить, сколько процессорного времени занимает данная команда.

Я ищу что-то подобное, что может измерить дисковый ввод программы и любых детей. Предпочтительно следует различать операции ввода-вывода, которые были кэшированы (и, следовательно, не приводили к вращению диска), и операции ввода-вывода, которые не кэшировались.

Итак, я хотел бы сделать:

iomeassure my_program my_args

и получить вывод, похожий на:

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

Я смотрел vmstat, iostatи sar, но ни один из них не смотрит на единый процесс. Вместо этого они смотрят на всю систему.

Я посмотрел iotop, но это только дает мне представление в этот момент.

--- редактировать ---

Ответ Snap кажется близким.

«Входные данные файловой системы» - это не кэшированные чтения в 512-байтовых блоках.

«Вывод файловой системы:» - это кэшированные записи в 512-байтовых блоках.

Вы можете сделать кеш пустым:

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

Я проверил с:

 seq 10000000 > seq
 /usr/bin/time -v bash -c 'perl -e "open(G,\">f\"); print G <>;close G; unlink \"f\";" seq'
Оле Танге
источник

Ответы:

9

Вы не указали, какую операционную систему вы используете.

Linux

Вместо использования time fooкоторого (обычно) встроенной оболочки вы можете попробовать внешнюю команду /usr/bin/time foo. Он дает некоторую дополнительную информацию, такую ​​как количество входов и выходов файловой системы (но не информацию о попаданиях в кэш или количестве байтов). Смотрите man timeи man getrusageдля дальнейших инструкций.

Обратите внимание, что для этой функции требуется ядро ​​Linux версии 2.6.22 или новее.

FreeBSD

Использование /usr/bin/time -l foo. Это дает количество входов и выходов. Смотрите man timeи man getrusageдля дальнейших инструкций.

щелчок
источник