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


11

我在了解什么是虚拟缓存时遇到了麻烦。我了解虚拟内存。

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

现在,与此同时,CPU发送一个不同的地址(恰好是虚拟地址的末尾),该地址由一个设置号组成。标签和缓存的偏移量,然后将其确定是否位于缓存中。

虚拟缓存与此有何不同?

在此处输入图片说明


2
您是指虚拟寻址(虚拟索引/虚拟标记)的缓存吗?
保罗·克莱顿

基本上,我的意思是虚拟缓存地址和物理缓存地址有什么区别?(我的印象的物理高速缓冲存储器地址是在所述的形式(setno(索引),(线下无)标签,和偏移量)。。。
ONETWO

请参阅我在TLB上发表的2017年调查报告,其中讨论并比较四种类型的缓存寻址选项(PIPT,VIPT,VIVT,PIVT)和数字。这将回答您的问题。VIVT缓存通常称为虚拟缓存。
user984260

Answers:


20

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

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

尽管可以通过大于页面大小的方式基于物理地址进行索引(例如,通过预测更高有效位或使用已知物理地址位的索引延迟来提供那些位的快速转换机制,以隐藏转换等待时间),通常不做。

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

(Pentium 4数据高速缓存使用的提示通过使用虚拟地址位的子集提供了这种延迟优势,这些虚拟地址位可早用于推测性地选择方式。)

(在可选的外部MMU时代,虚拟地址标签在将转换几乎完全推到高速缓存设计之外时可能特别有吸引力。)

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

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

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

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

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

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

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

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

如果保证(至少在可写地址中)不会发生别名(例如在典型的单个地址空间操作系统中),则虚拟寻址缓存的唯一缺点是,由于此类系统中的虚拟地址是比物理地址大。为单个地址空间OS设计的硬件可以使用权限后备缓冲区而不是转换后备缓冲区,从而将转换延迟到最后一级缓存未命中。


1与相同大小方式的模索引不同,偏斜关联性基于更多的位来索引具有不同哈希值的高速缓存的不同方式。这对于减少冲突遗漏很有用。这可能会导致在相同大小和关联性的模索引缓存中不会出现的混叠问题。


“通常会增加L1关联性,以允许通过物理地址对更大的缓存进行索引。” 你的意思是虚拟的吗?与之类似,为了将设置选择位的数量保持在足够低的水平,以完全保留在页面内(因此不需要转换),因此可以为物理缓存中的虚拟标记保持高速缓存以降低延迟。还是您称页面偏移量以下的那些位为“物理地址”?
彼得·科德斯

1
@PeterCordes我在物理地址的页面部分中调用了偏移量(对于那些虚拟===物理位)。如果人们强调延迟,那么人们可能会倾向于称呼这种虚拟索引。如果人们强调缺乏混叠问题,那么人们可能会倾向于称这种物理索引。
保罗·克莱顿

谢谢。当我在stackoverflow.com/questions/33974193/…的另一个线程中标记您时,您是否收到通知?我希望就L2 / L3高速缓存是否通常在物理上建立索引来提供专家的答案,因此它们可以很大而又不需要大规模的关联性。(我想是的,因为直到L1未命中才对它们进行检查,这是在TLB之后发生的,所以phys地址可用)。讨论中还有其他令人困惑的事情。
彼得·科德斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.