如何使用物理地址窥探虚拟寻址的缓存

时间:2016-01-22 21:10:22

标签: caching x86 intel computer-architecture virtual-memory

有哪些选项可以使用给定的物理地址窥探虚拟寻址的L1?

1 个答案:

答案 0 :(得分:1)

至少有三种方法可以使用物理地址窥探虚拟地址L1缓存。

最明显的可能是使用由物理地址寻址的包容性L2缓存,并包括有关块占用的集合和方式的信息(如果它在L1中)。包含属性只需要应用于标记,例如,在标记中提供两倍于内存中数据块的关联方式。当L2关联性不足以处理映射到给定索引的L1中的所有块时,这可能导致L2中的未命中,从而需要驱逐L1高速缓存行。鉴于典型的L2容量和相关性,这种驱逐通常是罕见的。

(给定4 KiB页面,在32 KiB L1中,一个特定的物理地址可以使用简单的模索引映射到8个不同的地方 - 偏斜的关联性使问题变得复杂 - 所以一个包容的4路关联物理寻址L2不能保证这样虽然8路L2可以,但不会发生反向失效。由于空间局部性很常见且L2高速缓存相对较大,因此冲突问题并不像人们对随机访问模式所期望的那样普遍。瞄准页面大小的倍数会最大化这种冲突。)

第二种方法与第一种方法密切相关,第一种方法是在物理寻址结构中复制标签。 (如果此结构与L2相关联,则可能会将其视为包含标记的L2的版本。)这允许处理器使用虚拟地址访问缓存,而snoops使用物理地址。物理寻址的标签存储可能需要具有相对较高的关联性,但由于窥探不像处理器缓存访问那么常见,因此可以更慢地完成探测以节省功耗(和区域)。

(理论上,这个辅助标签存储可以是过滤器,例如,使用部分标签,这通常表示监听未命中并且通常将可能性限制为一个。在L1中只有一个虚拟标签偶尔检查,性能损失从窥探中访问虚拟索引的L1标签并使用TLB进行转换是可以接受的。虽然窥探原则上可以检索与物理地址匹配的所有可能的虚拟标签并翻译和检查它们,但这通常是不可接受的开销。直接映射的L1不大于页面大小,这可能是可以接受的,因此这可能算作另一种方法。此外,可能会提出其他过滤机制。页面着色可以将要转换的地址数量减少到相关性L1)

第三种方法是提供反向TLB,将物理地址转换为虚拟地址。 (我似乎记得读过HP-RISC处理器使用了这种方法。)反向TLB未命中表示被探测的物理地址不在L1中。当新翻译必须删除仍在L1中具有块的翻译时,这可能会引入反向失效。

虚拟索引和物理标记的 L1可以简单地探测窥探的其他可能方式。这可能会干扰处理器对L1的访问,但是在标量处理器中,如果只有一个或两个虚拟地址索引位与物理地址位不匹配,则可能有足够的数据缓存标记带宽通常支持访问和监听探测,需要四个探针。 (为窥探提供的额外标记带宽也可用于软件预取,并允许标记数据顺序访问,以便在准备好探测缓存的数量超过数据路径支持的访问权限时节省功耗。)