perf_event_open и PERF_COUNT_HW_INSTRUCTIONS

Я пытаюсь профилировать существующее приложение с довольно сложной структурой. На данный момент я использую perf_event_open и необходимые вызовы ioctl для включения интересующих меня событий.

manpage остается, что PERF_COUNT_HW_INSTRUCTIONS следует использовать осторожно - так какой из них следует предпочесть в случае процессора Skylake? Может конкретный Intel PMU?


person FloriUni    schedule 30.12.2019    source источник


Ответы (1)


Справочная страница perf_event_open http://man7.org/linux/man-pages/man2/perf_event_open.2.html говорит о PERF_COUNT_HW_INSTRUCTIONS:

PERF_COUNT_HW_INSTRUCTIONS Устаревшие инструкции. Будьте осторожны, на них могут влиять различные проблемы, в первую очередь счетчики аппаратных прерываний.

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

Поэтому безопасно использовать события PERF_COUNT_HW_INSTRUCTIONS и PERF_COUNT_HW_CPU_CYCLES на большинстве процессоров. Подсистема perf_events в ядре Linux сопоставит COUNT_HW_CPU_CYCLES с некоторыми необработанными событиями, более подходящими для используемого в данный момент процессора и его PMU.

В зависимости от ваших целей вы должны попытаться получить некоторую статистику по значениям PERF_COUNT_HW_INSTRUCTIONS для вашего фрагмента кода. Вы также можете проверить стабильность этого счетчика несколькими запусками perf stat с помощью какой-нибудь простой программы:

perf stat -e cycles:u,instructions:u /bin/echo 123
perf stat -e cycles:u,instructions:u /bin/echo 123
perf stat -e cycles:u,instructions:u /bin/echo 123

Или используйте встроенную функцию повтора perf stat:

perf stat --repeat 10 -e cycles:u,instructions:u /bin/echo 123

У меня +-10 отклонений событий инструкций (менее 0,1%) для 200 тысяч выполненных инструкций, так что это очень стабильно. Для циклов у меня есть вариация 5%, поэтому это должно быть циклическое событие, помеченное с осторожным предупреждением.

person osgx    schedule 02.01.2020