What is exactly shown by "perf" as page-faults?
I want to count the number of disk accesses during a complete run of my script. My bash script runs 2 other executable files locally and 2 other executable files remotely. Something like this (those executable files may access other tools themselves):
#!/bin/bash
./executable1 DATA1 &
./executable2 DATA2 &
ssh remote_host './executable3 DATA3' &
ssh remote_host './executable4 DATA4' &
wait;
Now I'm running my bash script with perf
как это:
perf stat -e page-faults,page-faults:u ./myBashScript.sh
но результаты всегда одинаковы, независимо от того, изменяю ли я файлы DATA*, порядок, количество команд,... Примерно так:
128,470 page-faults
127,641 page-faults:u
Теперь мой вопрос: "Как я могу посчитать количество обращений к диску для всего сценария?"
пс:
- Как вы знаете, Linux пытается уменьшить количество обращений к диску, используя свободное место оперативной памяти в качестве кеш-диска, а здесь, "подсчитывая количество обращений к диску", я точно имею в виду, сколько раз ОС должна переносить данные с жесткого диска в основную память ( = RAM ударил / пропустил)
- Мне просто нужно посчитать количество обращений к диску на локальном компьютере, а не на удаленном.
- Извините за слабый английский.
1 ответ
Ошибки страницы в perf
инструмент от linux tools (perf_events
) для мелких и крупных ошибок страницы. И незначительные ошибки страницы не для доступа к диску. И не каждая главная ошибка страницы связана с доступом к диску (только файл диска был mmap
ред). И доступ к диску из чтения / записи не вызовет ошибок страницы.
Некоторые общие решения для подсчета ошибок на странице находятся по https://stackoverflow.com/questions/23302763.
Для подсчета обращений к диску по всему миру используйте iostat
инструмент http://man7.org/linux/man-pages/man1/iostat.1.html (tps, r / s, w / s) или vmstat
инструмент http://man7.org/linux/man-pages/man8/vmstat.8.html (bo, bi, -d
). Оба используются с периодом в секундах, как iostat 1
или же vmstat 1
печатать один набор действий каждую секунду, пока не будет убит Ctrl-C; или как iostat 1 60
или же vmstat 1 60
печатать каждую секунду в течение 1 минуты и выйти.
Другое решение заключается в использовании комбинации perf
инструмент и некоторые конкретные события от ввода / вывода или дисковых подсистем. У Грегга есть несколько примеров расширенного использования perf на http://www.brendangregg.com/perf.html и https://github.com/brendangregg/perf-tools.
Его инструмент iosnoop http://www.brendangregg.com/blog/2014-07-16/iosnoop-for-linux.html и http://www.brendangregg.com/blog/2014-07-23/linux-iosnoop-latency-heat-maps.html (на основе perf) может отслеживать дисковый ввод-вывод по pid процесса, идентификатору диска, смещению и размеру io, а также измерять задержку доступа к диску.
Проверьте также "7.2. Карты тепла" http://www.brendangregg.com/perf.html
Я использовал perf_events для записи вопроса о блокировке (дисковый ввод / вывод) и статических точек трассировки завершения:
# perf record -e block:block_rq_issue -e block:block_rq_complete -a sleep 120