物理缓存和虚拟缓存有什么区别?

One*_*Two 11 memory cache computer-architecture

我无法理解虚拟缓存实际上是什么。我了解虚拟内存。

如果 CPU 想要访问内存,据我所知,它会向 MMU 发送一个虚拟地址,MMU 使用页表计算出物理内存地址。

现在除了这个 CPU 发送一个不同的地址(只是虚拟地址的末尾),它由一个集合号组成。一个标签和一个偏移量,到缓存然后计算它是否驻留在缓存中。

虚拟缓存与此有何不同?

在此处输入图片说明

Pau*_*ton 20

根据虚拟地址位还是物理地址位用于索引和/或标记,有四种寻址高速缓存的方法。

因为索引缓存是最关键的时间(因为可以并行读取集合中的所有路径,并且可以根据标记比较选择适当的路径),所以缓存通常使用虚拟地址进行索引,允许索引在地址之前开始翻译完成。然而,如果仅将页偏移量内的位用于索引(例如,每条路不大于页大小和用于索引1的路大小的简单模),则该索引实际上是使用物理地址。增加 L1 关联性的情况并不少见,主要是为了允许更大的缓存被物理地址索引。

虽然基于物理地址的索引可以使用大于页面大小的方式(例如,通过预测更重要的位或快速转换机制提供这些位,使用已知物理地址位的索引延迟来隐藏转换延迟),它不常见。

使用虚拟地址进行标记允许在转换完成之前确定缓存命中。在提交访问之前仍然需要检查权限,但是对于加载,可以将数据转发到执行单元并使用开始的数据进行计算,对于存储,可以将数据发送到缓冲区以允许延迟提交状态。权限异常会刷新管道,因此这不会增加设计复杂性。

(奔腾 4 数据缓存使用的 vhint 通过使用早期可用的虚拟地址位子集来推测性地选择方式,从而提供了这种延迟优势。)

(在可选的外部 MMU 时代,虚拟地址标签在推动几乎完全超出缓存设计的转换方面可能特别有吸引力。)

尽管虚拟索引和标记缓存具有显着的延迟优势,但它们也引入了别名的可能性,其中相同的虚拟地址映射到不同的物理地址(同义词)或相同的物理地址映射到不同的虚拟地址(同义词)。使用物理地址进行索引和标记可避免别名。

使用地址空间标识符 (ASID) 可以相对容易地解决同音异义问题。(在更改地址空间时刷新缓存也将保证没有同音异义词,但这样相对昂贵。当一个 ASID 被重用于不同的地址空间时,至少需要部分刷新,但 8 位 ASID 可以避免在大多数地址上刷新空间更改。)通常 ASID 将由操作系统管理,但某些系统提供硬件检查,以根据页表基地址对 ASID 重用进行检查。

同义词问题更难解决。在高速缓存未命中时,必须检查任何可能别名的物理地址,以确定高速缓存中是否存在别名。如果在索引中避免了别名——通过使用物理地址进行索引或通过操作系统保证别名在索引中具有相同的位(页面着色)——那么只需要探测一组。通过将任何检测到的同义词重新定位到由最近使用的虚拟地址指示的集合,将来避免使用别名(直到发生相同物理地址的不同映射)。

在没有索引别名的直接映射虚拟标记缓存中,进一步的简化是可能的。由于潜在的同义词将与请求冲突并被逐出,因此可以在处理缓存未命中之前完成对脏行的任何必要写回(因此同义词将在内存中或物理寻址的更高级别缓存中)或物理寻址可以在安装从内存(或更高级别的缓存)获取的缓存行之前探测回写缓冲区。不需要检查未修改的别名,因为内存内容将与缓存中的内容相同,只是进行了不必要的未命中处理。这避免了整个缓存需要额外的物理标签,并允许转换相对较慢。

如果不能保证避免索引中的别名,那么即使是物理标记的缓存也需要检查可能包含别名的其他集合。(对于索引的一个非物理位,可以接受对单个替代集中的缓存的第二次探测。这类似于伪关联。)

对于虚拟标记的缓存,可以提供一组额外的物理地址标记。这些标签只能在未命中时访问,并可用于 I/O 和多处理器缓存一致性。(由于未命中和一致性请求都相对较少,因此这种共享通常没有问题。)

AMD 的 Athlon 使用物理标记和虚拟索引,为一致性探测和别名检测提供了一组单独的标记。由于三个仅虚拟地址位用于索引,因此必须在未命中时探测七个替代集以查找可能的别名。由于这可以在等待 L2 缓存的响应时完成,因此不会增加延迟,并且额外的标签集也可以用于一致性请求,鉴于 L2 缓存的排他性,这些请求更为频繁。

对于大型虚拟索引 L1 缓存,探测许多附加集的替代方法是提供物理到虚拟转换缓存。在未命中(或一致性探测)时,物理地址将被转换为可能在高速缓存中使用的虚拟地址。由于为每个高速缓存行提供转换高速缓存条目是不切实际的,因此需要一种在转换被逐出时使高速缓存行无效的方法。

如果保证不会出现别名(至少是可写地址),例如,在典型的单地址空间操作系统中,那么虚拟寻址缓存的唯一缺点是额外的标签开销,因为这些系统中的虚拟地址是大于物理地址。为单地址空间操作系统设计的硬件可以使用许可后备缓冲区而不是转换后备缓冲区,将转换延迟到最后一级缓存未命中。


1倾斜关联性基于比相同大小方式的模索引所需的更多位,用不同的散列索引缓存的不同方式。这对于减少冲突未命中很有用。这可能会引入在具有相同大小和关联性的模索引缓存中不会出现的混叠问题。