Intereting Posts
Есть поддержка Split Pane в Gedit? Использование четырехъядерного ядра, но только 1 запись CPU в `/ proc / cpuinfo`? Работает ли SMP на моем компьютере? Оптимальная настройка Ubuntu для использования Clonezilla? Как я могу переконфигурировать собственные драйверы nvidia из командной строки (ssh)? Проблема с яркостью графики Sony Vaio NVIDIA Почему мой компьютер пытается отключиться, когда я подключаю наушники? Wireshark захватывает только пакет с и на мой компьютер, когда он находится в беспорядочном режиме Как установить ffmpeg без root? Как узнать значение параметра «Визуальные эффекты» с помощью командной строки? Ubuntu 13.04 не отображает диалоговое окно подтверждения закрытия Никакая версия Ubuntu не может быть установлена ​​с любым процессором Intel 6-го поколения Skylake Что занимает столько места на моем диске, рядом с файловой системой? Мышь постоянно перестает работать Почему 11.10 не приходит с некоторыми приложениями от 11.04? Как вы показываете рабочий стол в моменте в Ubuntu?

системные вызовы аппаратных счетчиков производительности 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 

Существует небольшая библиотека обертки 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», чтобы получить накладные расходы, а затем измерить вашу целевую короткую функцию , затем сравните различия.)