L2 TLB是否处于VIPT型L1数据缓存访问的关键路径?
VIPT L1d-Cache 与 TLB 缺失的访问逻辑
针对你提出的问题,具体逻辑如下:
L1d-TLB缺失时,无需等待L2-TLB结果再访问L1d-cache
现代CPU会采用并行优化:一边发起L2-TLB的查询请求(甚至提前启动页表遍历的前置操作),一边利用虚拟地址的索引部分直接访问L1d-cache的对应缓存组,将该组内的所有缓存行暂存起来。等TLB返回物理地址后,再用物理地址的标记段和暂存的缓存行标记做对比,最终判定是否命中。这种并行操作能重叠TLB查询与缓存组访问的时间,有效降低整体延迟。页表遍历场景下的等待是必要的,且CPU会通过优化降低影响
这种等待并非不合理,原因和优化手段包括:- 页表本身会被缓存到L1d/L2-cache中,绝大多数页表遍历操作其实是缓存命中,速度并不会太慢;
- CPU会通过页表预取、TLB预填充等机制,提前将常用页表项加载到TLB,从根源减少TLB缺失的概率;
- 主流CPU都支持硬件页表遍历,无需操作系统介入处理,相比软件遍历速度提升明显;
- 从正确性角度,必须拿到物理地址才能完成VIPT缓存的命中判定——VIPT缓存的标记段依赖物理地址,跳过地址翻译直接用虚拟地址判断会引发地址别名问题(如不同虚拟地址映射同一物理地址、同一虚拟地址映射不同物理地址),导致缓存数据出错,因此这一步无法省略。
内容的提问来源于stack exchange,提问作者Frontier_Setter
相关产品推荐
相关产品推荐

