我正在使用性能监视特定事件的系统。但是,由于出现在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
性能列表| 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 返回找不到命令 任何帮助/想法表示赞赏。
答案 0 :(得分:3)
可以使用组采样通过perf record
来收集此信息。例如,以下命令
perf record -a -e '{cycles,msr/aperf/,msr/tsc/}:S'
基于cycle
(第一个计数器)溢出收集所有三个事件的值。未记录的:S
修饰符是必需的,它可以确保只有组长触发样本。要查看此信息,请使用perf report --group
,该参数可能不是必需的。恐怕每个样本的实际值仅在非常冗长的perf script -D
中可见。
答案 1 :(得分:2)
perf
中引入了patch,以支持MSR性能监视单元。这些MSR PMU支持自由运行的MSR计数器。这些计数器包括基于时间和频率的计数器,例如TSC
,IA32_APERF
,IA32_MPERF
和IA32_PPERF
。
这些MSR事件不支持采样模式。如Linux内核(v4.9)源代码中的this行代码所示。
摘要:
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
阅读this,以了解有关计数和采样事件/模式的更多信息。