VIPT 缓存中别名的性能影响

问题描述 投票:0回答:1

VIPT 缓存中虚拟地址同义词(别名)对性能有何影响?我对最近的 x86_64 架构特别感兴趣,但了解更多关于其他架构也没什么坏处。

具体来说,如果我

mmap
同一个文件两次,是否会导致更多的 L1 缺失,或者 Intel / AMD 是否使用着色或其他方法来防止这种情况?有没有办法可以
mmap
固定地址来提供帮助?

caching x86-64 cpu-architecture cpu-cache virtual-address-space
1个回答
0
投票

英特尔使他们的 L1 缓存足够小且足够关联,同音异义和同义词别名是不可能的:VIPT 的工作方式与 PIPT 相同,但速度更快。 (所有索引位都来自地址的页内偏移低 12 位,因此完全不受任何问题的影响。页号位仅进入 L1i/L1d 中的标记。)

至少对于 P6 系列和 Sandybridge 系列来说是这样。 Alder Lake 中的 Gracemont 核心具有 64K 8 路 L1i 缓存。 (https://chipsandcheese.com/2021/12/21/gracemont-revenge-of-the-atom-cores/)。 L1d 缓存是 32K 8 路,与旧的 P6 系列相同,因此与 x86 的 4K 页面大小不存在同音或同义词问题。 I-cache 是只读的,因此将相同的物理地址缓存在两个不同的集合中可能不是正确性问题。

AMD 在某些设计中采用了不同的做法,采用了大型 64K 低关联性缓存。它们避免了硬件中的正确性问题,不需要操作系统进行页面着色(虚拟索引物理标记缓存同义词)以确保正确性。

但是,多个进程将同一共享库映射到不同进程中的不同随机地址时,存在 L1i 性能问题。 https://www.phoronix.com/review/amd_bulldozer_aliasing 简要描述了 Linux 如何通过清除 ELF 基虚拟地址的位 [14:12] 来解决该问题。 (不一定对应于物理地址,因此这与页面着色不同,但类似。)

Zen 1也使用了更大的L1i(64K 4路),但使用了32K 8路L1d。另请参阅AMD 的微标记 L1 数据缓存是如何访问的?

显然有多种技术可以构建更大或更少关联的 L1d 缓存,但这些技术不是免费的 VIPT = PIPT,比如我认为可以提供帮助的微标签。

© www.soinside.com 2019 - 2024. All rights reserved.