查找L1 / L2 / L3缓存的延迟非常简单:
Approximate cost to access various caches and main memory?
但我感兴趣的是在以下情况下将虚拟地址转换为物理页面地址的成本(以CPU周期为单位):
我确实找到了这个:
- 数据TLB L1大小= 64项。 4-WAY。 小姐罚款= 7个周期。并行未命中:每次访问1个周期
- TLB L2尺寸= 512件。 4-WAY。 小姐罚分= 10个周期。并行未命中:每次访问21个周期
- 指令TLB L1大小=每个线程64个项目(每个核心128个)。 4-WAY
- PDE缓存= 32项?
http://www.7-cpu.com/cpu/SandyBridge.html
但它没有提到命中/访问相关TLB缓存的成本?
答案 0 :(得分:2)
通常,L1 TLB访问时间将小于缓存访问时间,以允许在集合关联的物理标记缓存中进行标记比较。直接映射的缓存可以通过假设命中来延迟标记检查。 (对于有序处理器,立即使用数据的未命中需要等待处理未命中,因此不存在性能损失。对于无序处理器,纠正这种错误的推测可能会有虽然无序过程不太可能使用直接映射高速缓存,但它可能使用行为预测,其行为类似。)虚拟标记高速缓存可以(理论上)延迟TLB访问,因为TLB是只需要验证不确定缓存命中的权限,并且处理权限违规通常有点昂贵且很少见。
这意味着L1 TLB访问时间通常不会公开,因为它不会影响软件性能调整。
L2命中时间相当于L1未命中罚分。这取决于具体实施方式,可能不是单一值。例如,如果TLB使用银行支持在一个周期内支持多次访问,则银行冲突可能会延迟访问,或者如果使用重新散列来支持多个页面大小,则备用大小的页面将需要更长时间才能找到(这两种情况都可以在高利用率下积累延迟)。
L2 TLB填充所需的时间可能差别很大。 ARM和x86使用多级页表使用硬件TLB填充。根据可以缓存页表数据的位置以及是否存在缓存命中,TLB填充的延迟可以在页表的每个级别的主存储器访问的延迟和页表的缓存的延迟之间。找到每个级别的数据(加上一些开销)。
进一步复杂化,更新的Intel x86具有分页结构缓存,允许跳过页面级别。例如,如果在此缓存中找到页面目录条目(指向页面表条目页面的第二级页面表中的条目),而不是从页面表的基础开始并仅执行四个相关查找需要单次查找。
(值得注意的是,使用页面级别覆盖的虚拟地址区域大小的页面(例如,2 MiB和x86-64的1 GiB),会减少页面表层次结构的深度使用这样大的页面不仅可以降低TLB压力,还可以减少TLB未命中的延迟。)
页表未命中由操作系统处理。这可能导致页面仍然在存储器中(例如,如果对交换的写入尚未完成),在这种情况下等待时间将相对较小。 (实际延迟将取决于操作系统如何实现此操作以及缓存命中行为,尽管缓存错过了代码和数据,因为分页是一种不常见的事件。)如果页面不再在内存中,则延迟从辅助存储器(例如,磁盘驱动器)读取的数据被添加到处理无效页表条目的软件延迟(即,页表未命中)。