树莓派5(Cortex-A76)单线程场景下,如何通过缓存缺失衡量DRAM流量?
树莓派5(Cortex-A76)缓存层级与perf测量问题解答
背景
在树莓派5(4核Cortex-A76)上运行单线程卷积基准测试,计划用perf stat的缓存缺失次数作为DRAM内存流量的代理指标,先明确缓存层级:
- L1缓存:每个核心私有,包含64KB指令缓存(I-cache)+64KB数据缓存(D-cache)
- L2缓存:每个核心私有,512KB统一缓存
- L3缓存(SLC系统级缓存):4核共享,2MB统一缓存,是DRAM前的最后一级缓存(LLC)
问题解答
1. perf stat -e cache-misses对应L2还是L3缺失?
cache-misses是perf的通用事件,在Cortex-A76架构的树莓派5上,这个事件默认对应L2缓存缺失。ARM架构的perf通用事件映射规则中,cache-misses通常绑定到单核心私有最后一级缓存(即L2)的缺失事件,而非共享的L3/SLC。
2. 作为DRAM访问的代理指标,应测量L2还是L3/SLC缺失?
必须选择L3/SLC缺失。原因很简单:L2缺失后,请求会进入共享的L3/SLC,如果L3命中,就不会触发DRAM访问;只有当L3/SLC也缺失时,才会发起DRAM读写请求。因此,只有L3/SLC缺失次数才能准确代表实际的DRAM流量,是可靠的代理指标。
3. 树莓派5上能否通过perf观测SLC?
可以,但需要使用ARM架构的特定PMU事件,而非通用事件:
- 先查看预定义事件:进入
/sys/bus/event_source/devices/armv8_pmuv3/events/目录,查找包含slc或llc关键字的事件文件,比如slc_access、slc_miss(不同系统命名可能略有差异) - 如果没有预定义事件,可直接使用原始PMU事件编码。Cortex-A76的SLC缺失对应事件编码通常为
0x16(对应L3_CACHE_REFILL事件,即SLC缺失需要从DRAM填充时触发) - 使用示例:
注意:SLC是共享缓存,但单线程绑定核心后,计数器只会统计该核心触发的SLC请求缺失,不会包含其他核心的流量,完全适配你的单线程测试场景。perf stat -e r016 ./your_convolution_benchmark
内容的提问来源于stack exchange,提问作者Thuy Pham
相关产品推荐
相关产品推荐

