Odroid XU4上Perf工具cache-references/cache-misses不支持问题求助
Odroid XU4上perf无法统计cache事件的原因及解决办法
为啥会出现这个问题?
- 硬件本身的限制:Odroid XU4用的是Exynos 5422处理器,属于Cortex-A15+A7的big.LITTLE架构,它的PMU(性能监控单元)对cache-references、cache-misses这类事件的支持不完善。perf list能显示这些事件名只是工具层面的兼容,但硬件底层根本没有对应的计数寄存器,自然拿不到数据。
- 内核配置没跟上:如果你的Ubuntu内核没开启
CONFIG_ARM_PMU或者CONFIG_PERF_EVENTS这类关键配置,也会导致perf没法调用硬件PMU来统计事件。另外旧版本内核对Exynos 5422的PMU支持也可能不到位。 - perf和内核版本不匹配:要是perf工具的版本和当前内核版本差太多,也会出现“列表能看到但用不了”的情况。
能怎么解决?
- 用ARM原生的原始事件替代:ARM架构有自己的原始PMU事件代码,可以绕开通用的cache事件名。比如:
- 指令cache缺失用
r01 - 数据cache缺失用
r03
先跑perf list raw看所有可用的原始事件,然后用perf stat -e r01,r03 ./hello_test来统计,效果和cache-misses类似。
- 指令cache缺失用
- 升级内核和perf:把系统和工具都更到最新版本,新版本内核对Exynos 5422的PMU支持可能更好。执行下面的命令:
sudo apt update && sudo apt upgrade linux-image-$(uname -r) linux-tools-$(uname -r) - 检查内核配置:先确认内核有没有开PMU相关配置,跑
zcat /proc/config.gz | grep CONFIG_ARM_PMU,如果输出是CONFIG_ARM_PMU=y就没问题;如果没开启,得重新编译内核并打开这个选项(编译内核有难度,新手慎试)。 - 换其他工具试试:要是perf的cache事件确实用不了,还可以用
oprofile做硬件采样分析,或者用valgrind --tool=cachegrind模拟cache行为(注意cachegrind是模拟,速度慢,适合小体量程序)。
内容的提问来源于stack exchange,提问作者Somdip Dey
相关产品推荐
相关产品推荐

