Ошибка Perf: системный вызов sys_perf_event_open () возвратился с 22 (неверный аргумент) для события (msr / tsc /) - PullRequest
0 голосов
/ 19 ноября 2018

Я использую perf для мониторинга системы на наличие определенных событий.Тем не менее, я получаю следующую ошибку и понятия не имею, откуда она берется, так как событие указано в списке perf

perf запись sudo -e msr / tsc / -a

Error:
The sys_perf_event_open() syscall returned with 22 (Invalid argument) for event (msr/tsc/).
/bin/dmesg may provide additional information.
No CONFIG_PERF_EVENTS=y kernel support configured?

Как я могу проверить Нет CONFIG_PERF_EVENTS = y настроена ли поддержка ядра?

** Некоторые результаты теста:

sudo dmesg | grep "perf\|pmu"**
[    0.029179] ENERGY_PERF_BIAS: Set to 'normal', was 'performance'
[    0.029179] ENERGY_PERF_BIAS: View and update with x86_energy_perf_policy(8)
[ 9475.406967] perf: interrupt took too long (2509 > 2500), lowering kernel.perf_event_max_sample_rate to 79500
[ 9475.990901] perf: interrupt took too long (3146 > 3136), lowering kernel.perf_event_max_sample_rate to 63500
[ 9476.886941] perf: interrupt took too long (3942 > 3932), lowering kernel.perf_event_max_sample_rate to 50500
[76057.268195] perf: interrupt took too long (4934 > 4927), lowering kernel.perf_event_max_sample_rate to 40500
[167368.007839] perf: interrupt took too long (6171 > 6167), lowering kernel.perf_event_max_sample_rate to 32250
[168338.165608] perf: interrupt took too long (7804 > 7713), lowering kernel.perf_event_max_sample_rate to 25500

perf list | grep msr

  msr/aperf/                                         [Kernel PMU event]
  msr/mperf/                                         [Kernel PMU event]
  msr/pperf/                                         [Kernel PMU event]
  msr/smi/                                           [Kernel PMU event]
  msr/tsc/   

sudo uname -a Linux bla 4.9.0-amd64 # 1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU / Linux

sudo /proc/config.gz возвращает команду не найдено Любая помощь / идеи приветствуются.

Ответы [ 2 ]

0 голосов
/ 01 августа 2019

Можно собрать эту информацию с помощью perf record, используя групповую выборку.Например, следующая команда

perf record -a -e '{cycles,msr/aperf/,msr/tsc/}:S'

собирает значения всех трех событий на основе переполнения cycle (первый счетчик).Недокументированный модификатор :S необходим, он гарантирует, что только лидер группы запускает выборки.Для просмотра этой информации вы используете perf report --group, параметр может не понадобиться.Боюсь, что фактические значения для каждого образца видны только в самом подробном perf script -D.

0 голосов
/ 20 ноября 2018

В perf был добавлен патч для поддержки модулей мониторинга производительности MSR.Эти MSR PMU поддерживают автономные счетчики MSR.Эти счетчики включают счетчики времени и частоты, такие как TSC, IA32_APERF, IA32_MPERF и IA32_PPERF.

. Эти события MSR не поддерживают режимы выборки.Как видно из этой строки кода в исходном коде ядра Linux (v4.9).

Фрагмент:

if event->attr.sample_period) /* no sampling */ return -EINVAL;

perf_events Инструмент может работать тремя способами (считая события, события выборки и события bpf).Помните, что когда вы запускаете perf record, вы теперь запускаете режим сэмплирования.Даже если вы явно не указали sampling period, внутренняя выборка выполняется с частотой выборки по умолчанию.

Для подсчета msr событий вам нужно запустить perf_events в режиме подсчета / агрегирования.Для этого вы запускаете perf stat -

perf stat -e msr/tsc/ -a

^C

Performance counter stats for 'system wide':

 34,83,07,96,035      msr/tsc/                                                    

 2.419151644 seconds time elapsed

Чтение этого , чтобы понять больше о событиях / режимах подсчета и выборки.

...