Arm64架构AlmaLinux 8.8中perf工具缺失arm_spe事件的解决求助
1. 确认硬件支持
Arm SPE是硬件级的统计采样扩展,先检查CPU是否具备该特性:
执行命令:
cat /proc/cpuinfo | grep -E 'Features|flags'
查看输出中是否包含spe或statistical-profiling标识。如果没有,说明硬件不支持Arm SPE,无法启用相关事件;如果有,继续后续排查。
2. 检查内核配置
AlmaLinux 8默认内核可能未开启Arm SPE相关支持,查看当前内核配置:
grep -E 'CONFIG_ARM_SPE_PMU|CONFIG_PERF_EVENTS' /boot/config-$(uname -r)
需确保CONFIG_ARM_SPE_PMU=y(必须是内置编译,不能为模块)且CONFIG_PERF_EVENTS=y。如果前者显示# CONFIG_ARM_SPE_PMU is not set,说明内核未编译该支持,要么重新编译内核开启此选项,要么寻找官方提供的带Arm SPE支持的内核包。
3. 更新perf工具
你当前使用的4.18系列perf版本对Arm SPE的支持可能不完善,尝试更新:
dnf update perf
更新完成后再次执行perf list | grep -i arm_spe检查事件是否出现。若仍无效,可从Linux内核源码编译对应版本的perf工具(编译前需确保安装libelf-devel、dwz-devel等依赖包)。
4. 加载对应模块(若为模块编译)
如果内核配置显示CONFIG_ARM_SPE_PMU=m,手动加载模块:
modprobe arm_spe_pmu
加载完成后再次检查perf事件列表。
名称
perf-arm-spe - Arm统计采样扩展(SPE)支持工具
概述
perf arm-spe [选项]
描述
本工具用于配置和收集Arm SPE采样数据,这些数据可被perf工具链处理,用于分析系统或应用的性能瓶颈,比如指令执行延迟、内存访问延迟、缓存/TLB命中情况、分支预测错误等。
Arm SPE通过硬件采样实现低开销的性能数据采集,支持的采样事件包括但不限于:
- 指令执行完成
- 数据加载/存储完成
- 缓存命中/未命中
- TLB命中/未命中
- 分支预测错误
选项
记录选项
-o, --output=<file>:将采样数据写入指定文件,默认文件为perf.data-e, --event=<event>:指定要采样的Arm SPE事件,默认使用arm_spe//采集所有支持事件,可通过perf list arm_spe查看可用事件列表-c, --count=<n>:设置采样周期,即每发生n次指定事件时触发一次采样-p, --pid=<pid>:仅对指定PID的进程进行采样-t, --tid=<tid>:仅对指定TID的线程进行采样-a, --all-cpus:对所有CPU进行采样
报告选项
-i, --input=<file>:从指定文件读取采样数据,默认读取perf.data--call-graph=<type>:设置调用链展示方式,可选值包括fp(帧指针)、dwarf(基于DWARF调试信息)等-n, --show-nr-samples:在报告中显示每个符号对应的采样次数-s, --sort=<key>:按指定维度排序报告,可选维度有comm(进程名)、pid、symbol(符号名)等
示例
- 采集系统范围内10秒的Arm SPE数据:
perf record -e arm_spe// -a sleep 10 - 分析采集到的数据并展示调用链:
perf report --call-graph dwarf - 仅对指定进程采集Arm SPE数据:
perf record -e arm_spe// -p <目标进程PID>
注意事项
- Arm SPE依赖硬件支持,且内核必须启用对应的PMU配置
- 采集数据需要root权限(或配置了
CAP_PERFMON权限的普通用户) - 旧版本perf可能不支持Arm SPE,建议使用与当前内核版本匹配的最新perf工具
内容的提问来源于stack exchange,提问作者Jarvis

