首页 > 解决方案 > Perf 错误:sys_perf_event_open() 系统调用为事件 (msr/tsc/) 返回了 22(无效参数)

问题描述

我正在使用 perf 来监视系统中的某些事件。但是,我收到以下错误,我不知道它来自哪里,因为该事件列在 perf list 中

sudo perf 记录 -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?

如何检查 No 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返回命令未找到任何帮助/想法表示赞赏。

标签: profilingperftscmsr

解决方案


perf record可以通过使用组抽样来收集此信息。例如下面的命令

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

根据 cycle(第一个计数器)溢出收集所有三个事件的值。未记录的:S修饰符是必要的,它确保只有组的领导者触发样本。要查看此信息,请使用perf report --group,该参数可能不是必需的。恐怕每个样本的实际值仅在非常详细的perf script -D.


推荐阅读