为什么英特尔使用VIPT缓存而不是VIVT或PIPT?

6

我不确定,但如果我没记错的话,Intel使用VIPT(虚拟索引物理标记)缓存,我想知道这个选择的原因,为什么它比VIVT或PIPT更好,它带来了什么优势和可能有什么缺点。谢谢。


通常情况下,如果问题与代码无关,则提供代码片段会更容易引起别人的注意。 - Tony Cronin
@TonyCronin 一开始读起来似乎有点讽刺 :) - matpop
2个回答

6
确切的设计决策可能没有公开,但通常 VIPT 的好处是:
  1. 虚拟索引意味着您可以在查找 TLB 翻译之前(或与之并行)从缓存中开始读取集合。这意味着常见情况下的查找比物理索引缓存快得多,在物理索引缓存中,您只能在获得翻译后才能查找缓存。
  2. 物理标记使您可以避免别名 - 在单个虚拟地址映射到多个物理地址的情况下(例如不同线程在虚拟地址范围内重叠),或多个虚拟地址映射到相同的物理行(例如跨线程通信)。这两种情况可能会导致虚拟标记缓存的一致性丢失,并需要复杂的检测机制。

1
谢谢你的回答,那么相比于vivt而言,vipt所失去的性能是因为英特尔愿意付出的代价,以应对一个虚拟地址引用多个物理地址和多个虚拟地址引用一个物理地址的问题?难道没有其他方法可以使用vivt来解决这些问题吗? - PiggyGenius
2
有其他方法,否则VIVT就不可能存在,但那需要复杂的匹配。另一方面,假设TLB命中是常见情况,且内部管道可以足够快地绕过翻译以进行标记匹配,VIPT不一定会失去性能——您可以像VIVT一样快地完成缓存查找。 - Leeor
非常感谢您抽出时间完美地回答了我的问题。 - PiggyGenius
请问您能否解释一下使用虚拟索引和物理标记如何解决别名问题?一个物理地址是否可能有两个对应的虚拟地址,其中索引位相同? - Myath
@Myath:关键在于缓存要足够小和联想,以便索引位全部来自页面偏移量,从而免费翻译,使缓存有效地成为PIPT。为什么英特尔使用虚拟索引物理标记高速缓存而不是VIVT或PIPT? / 为什么大多数处理器的L1缓存大小比L2缓存小?。或者当情况不完全一样时,操作系统可以进行页面着色:虚拟索引物理标记高速缓存同义词 - Peter Cordes
糟糕,我上一条评论中的一个链接是这个问题。我可能本意是要链接最小关联性以使PIPT L1缓存也成为VIPT,并在不将索引转换为物理地址的情况下访问集合 - Peter Cordes

-2
"

“vivt pipt”是计算机高速缓存中常用的映射方案。它代表着“虚拟索引,虚拟标记,物理索引,物理标记”。在这种映射方案中,缓存块由虚拟地址进行索引,并使用虚拟地址进行标记,但实际的索引和标记是基于物理地址进行的。

"

我的第一条注释 - yugang wu
定义VIVT和PIPT这些术语并不能回答为什么英特尔CPU选择了VIPT的问题。此外,您没有正确定义任何内容:“VIVT PIPT”不是单一的映射方案。索引不涉及标记,而是在使用索引位选择集合中的路径时使用。 - Peter Cordes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接