对于较旧的内核 INST_RETIRED.ANY (以及中记录的许多其他计数器)https://perfmon-events.intel.com/ahybrid.htm)作为 perf 的计数器。
我现在使用 perf 和运行在 Sapphire Rapids {Golden Cove} 处理器上的 6.7 内核。
当我执行以下操作时
perf stat -e INST_RETIRED.ANY,cycles sleep 2
我明白了
event syntax error: 'INST_RETIRED.ANY,cycles'
\___ parser error
这是预期的行为吗?
答案1
至少当我运行sudo perf list
并寻找时inst_retired
,我发现inst_retired.any
,它符合其他事件的大写约定。因此,这些很可能在工具中被重命名。我可以跑
perf stat -e inst_retired.any,cycles sleep 2
并得到
Performance counter stats for 'sleep 2':
1.600.192 inst_retired.any
2.142.871 cycles
2,001396579 seconds time elapsed
0,000000000 seconds user
0,001231000 seconds sys
在这台英特尔(不是 gen12/13)机器上。
答案2
INST_RETIRED.ANY 返回解析错误的原因是 perf 的版本与 Linux 的版本不匹配,而它必须匹配。
我认为机器设置正确的人给了我这台机器,所以我没有费心去检查版本是否不匹配。幸好有评论者建议检查perf的版本,结果解决了问题