системные вызовы аппаратных счетчиков производительности ubuntu

Я работаю над проектом, и я хотел бы получить значения счетчиков производительности (кеш, TLB и т. Д.) Системного вызова (например: read ()) до и после выполнения файла.

Я попытался сделать это, используя perf на Ubuntu, но не смог получить никаких результатов. Есть ли способ сделать это, используя perf или, возможно, какой-нибудь другой инструмент?

Спасибо за помощь.

3.329057 task-clock (msec) # 0.714 CPUs utilized 16 context-switches # 0.005 M/sec 0 cpu-migrations # 0.000 K/sec 257 page-faults # 0.077 M/sec 1,983,212 cycles # 0.596 GHz 1,352,902 stalled-cycles-frontend # 68.22% frontend cycles idle 1,080,180 stalled-cycles-backend # 54.47% backend cycles idle 1,336,919 instructions # 0.67 insns per cycle # 1.01 stalled cycles per insn 267,730 branches # 80.422 M/sec  branch-misses 0.004663489 seconds time elapsed 

Related of "системные вызовы аппаратных счетчиков производительности ubuntu"

Существует небольшая библиотека обертки https://github.com/castl/easyperf для perf_event_open в режиме подсчета, точно так же, как используется perf stat (ее результат был указан вами).

Вы можете настроить подсчет событий hw (с включенным подсчетом ядра – флаг PERFMON_EVENTSEL_OS в easyperf), затем прочитать текущие значения счетчиков perf_read_all в perf_read_all , затем запустить свою функцию (syscall), которую вы хотите профилировать, а затем прочитать новые значения счетчика. Разница между старыми и новыми значениями – это оценка стоимости целевой функции. Проверьте этот тест, целевая функция foo :

https://github.com/castl/easyperf/blob/master/test.c

Вы не можете измерять слишком маленькие вызовы, потому что чтение счетчиков hw из perf_event_open выполняется через несколько системных вызовов для read . Итак, сделайте несколько похожих системных вызовов (цикл 100 или 1000) или сделайте системные вызовы, которые больше работают, или попытайтесь измерить накладные расходы на чтение, чтобы получить hw счетчики (измерить пустую функцию «foo», чтобы получить накладные расходы, а затем измерить вашу целевую короткую функцию , затем сравните различия.)