5

Я хочу посчитать количество обращений к диску во время полного запуска моего скрипта. Мой 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 ударил / пропустил)
  • Мне просто нужно посчитать количество обращений к диску на локальном компьютере, а не на удаленном.
  • Извините за слабый английский.

1 ответ1

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .