Справочная страница 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