为什么 Intel 使用 VIPT 缓存而不是 VIVT 或 PIPT?

Pig*_*ius 6 memory caching intel cpu-architecture cpu-cache

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

Lee*_*eor 6

确切的设计决策可能尚未公布,但总的来说,VIPT 的好处是:

  1. 虚拟索引意味着您可以在 TLB 中查找翻译之前(或同时)开始从缓存中读取该集合。这意味着常见情况的查找将比物理索引缓存快得多,在物理索引缓存中您只能在进行翻译后查找缓存。
  2. 物理标记允许您避免别名 - 无论是在单个虚拟地址映射到多个物理地址(例如,不同线程在虚拟地址范围中重叠),还是多个虚拟地址映射到同一物理线路(例如,线程间通信)的情况下。这两种情况都可能导致虚拟标记的缓存失去一致性,并且需要复杂的检测机制。

  • 还有其他方法,否则 VIVT 就不可能实现,但这涉及复杂的匹配。另一方面,VIPT 不一定会损失性能 - 假设 TLB 命中是常见情况,并且内部管道可以足够快地绕过翻译以进行标签匹配,您可以像 VIVT 一样快地完成缓存查找 (2认同)