You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

x86架构TLB缺失后流程及perf测量异常排查咨询

TLB/STLB缺失后页结构缓存机制的perf测量异常问题

我正在研究TLB/STLB缺失后页缺失处理程序(PMH)/页结构缓存的工作机制,使用perf工具计数器测量时得到了意外结果:对一个随机写入1GB数组的程序进行基准测试,分别采用2MB和4KB页配置,结果显示L1 TLB/DTLB命中率与运行时间正相关,这与我的预期完全相反。

L1 TLB/DTLB测试结果

我怀疑在页面遍历过程中,或是TLB/STLB缺失后搜索PDP/PDE/PML4缓存时,存在未被考虑的额外TLB/STLB访问。以下是我梳理的页表遍历流程:

页表遍历流程

补充信息:

  • 基准测试代码逻辑:随机生成数组索引,对1GB数组的对应位置执行写入操作,循环足够次数以保证统计有效性
  • 测试环境:Haswell Xeon E3处理器,TLB规格如下:
    Haswell Xeon E3 TLB规格
验证猜想的可行方案

1. 针对性perf事件计数

直接统计页表遍历过程中的TLB访问相关事件,Haswell架构支持以下关键perf事件:

  • dtlb_load_misses.walk_pending:DTLB缺失后触发页表遍历的次数
  • dtlb_load_misses.walk_completed:完成的页表遍历次数
  • page_walks.dtlb:DTLB缺失引发的页表遍历层级统计
  • page_walks.stlb:STLB缺失引发的页表遍历层级统计

执行命令示例:

perf stat -e dtlb_load_misses.walk_pending,dtlb_load_misses.walk_completed,page_walks.dtlb,page_walks.stlb ./your_program

对比2MB和4KB页配置下的这些事件数,验证是否与TLB命中率、运行时间的异常相关性匹配。

2. 页结构缓存命中/缺失统计

Haswell的页结构缓存(PML4/PDP/PDE缓存)有对应的perf事件:

  • l2_pend_miss.pf:L2缓存中页结构相关的缺失
  • page_walks.memory_reference:页表遍历过程中访问内存的次数

通过这些事件可判断页结构缓存的命中情况是否影响TLB访问次数,进而解释运行时间的异常。

3. 硬件性能计数器精确采样

使用perf record采样具体指令与事件的关联,定位页表遍历过程中的TLB访问:

perf record -g -e dtlb_load_misses.walk_pending ./your_program
perf report --stdio

查看采样到的调用栈,确认页表遍历过程中是否触发了额外TLB访问,尤其是内核态页缺失处理流程中的访问。

4. 控制变量法验证

  • 将数组访问模式改为顺序访问,对比随机访问下的TLB命中率与运行时间,观察相关性是否变化
  • 调整数组大小(如2GB、512MB),验证TLB命中率与运行时间的异常关系是否稳定,排除内存带宽等其他因素干扰
  • 关闭透明大页(THP)等系统特性,确保2MB页配置完全手动可控,避免系统自动调整页大小影响结果

5. 结合CPU架构文档分析

查阅Haswell架构官方手册(Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3),确认页表遍历过程中是否存在隐含TLB访问:比如页结构缓存的访问是否会触发STLB查询,或页缺失处理程序本身的指令是否产生额外TLB缺失。

内容的提问来源于stack exchange,提问作者Hod Badihi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 21:53:20