如何统计x86-64架构中引发内存访问的TLB缺失次数?
统计TLB缺失引发的DRAM访问次数方案
直接追踪页表遍历的内存访问事件
Intel Xeon W-2104基于Skylake-W架构,perf提供了直接统计页表遍历期间内存访问的专属事件:
walk_loads:页表遍历过程中产生的内存加载次数walk_stores:页表遍历过程中产生的内存存储次数(仅在页表更新场景中出现,多数情况以加载为主)- 采集命令示例:
perf stat -e dtlb_load_misses.miss_causes_a_walk,dtlb_store_misses.miss_causes_a_walk,walk_loads,walk_stores ./your_target_program
这些事件直接对应地址转换阶段的内存访问,无需额外筛选,是最精准的统计方式。
从LLC缺失中筛选地址转换相关部分
若需通过LLC缺失关联DRAM访问,Skylake架构支持perf事件修饰符来分离页表遍历引发的缓存操作:
LLC-load-misses:pp:仅统计页表遍历(page walk)导致的LLC加载缺失LLC-store-misses:pp:仅统计页表遍历导致的LLC存储缺失- 采集命令示例:
perf stat -e dtlb_load_misses.miss_causes_a_walk,LLC-load-misses:pp ./your_target_program
:pp修饰符是Intel架构特有的过滤规则,能精准区分普通数据访问和地址转换触发的LLC缺失,而LLC缺失通常对应DRAM访问,以此间接估算地址转换引发的内存访问量。
结果验证与校准
- 对比
walk_loads和LLC-load-misses:pp的数值:walk_loads包含页表遍历命中L1/L2缓存的访问,因此会大于等于LLC-load-misses:pp,后者才是真正触发DRAM访问的次数 - 若
dtlb_*_misses.miss_causes_a_walk数值超出预期,可结合walk_loads判断是否是页表遍历本身的访问量偏高(比如大内存、频繁地址空间切换等场景)
内容的提问来源于stack exchange,提问作者Arun Kp
相关产品推荐
相关产品推荐

