Что именно показывает «perf» как ошибки страницы?

825
Dark

Я хочу посчитать количество обращений к диску во время полного запуска моего скрипта. Мой bash-скрипт запускает 2 других исполняемых файла локально и 2 других исполняемых файла удаленно. Примерно так (эти исполняемые файлы могут обращаться к другим инструментам сами):

#!/bin/bash  ./executable1 DATA1 & ./executable2 DATA2 &  ssh remote_host './executable3 DATA3' & ssh remote_host './executable4 DATA4' &  wait; 

Теперь я запускаю свой скрипт bash, perfнапример:

perf stat -e page-faults,page-faults:u ./myBashScript.sh 

но результаты всегда одинаковы, независимо от того, изменяю ли я файлы DATA *, порядок, количество команд, ... Примерно так:

128,470 page-faults 127,641 page-faults:u 

Теперь мой вопрос: «Как я могу подсчитать количество обращений к диску для всего сценария?»

пс:

  • Как вы знаете, Linux пытается уменьшить количество обращений к диску, используя свободное место оперативной памяти в качестве кеш-диска, а здесь, «подсчитывая количество обращений к диску», я точно имею в виду, сколько раз ОС должна переносить данные с жесткого диска в основную память (= RAM ударил / пропустил)
  • Мне просто нужно посчитать количество обращений к диску на локальном компьютере, а не на удаленном.
  • Извините за слабый английский.
5

1 ответ на вопрос

0
osgx

сбои страниц в 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