超线程核心是否共享MMU和TLB



据我所知,在Intel x86_64中,MMU和TLB都不是在超线程内核中共享的。

然而,如果两个不共享地址空间的线程被调度到同一个物理核心,它们将如何运行?

我认为,在这种情况下,线程没有任何机会达到TLB,因为线程有自己的地址空间。

如果那样的话,在我看来,业绩会被降级。

TLB在英特尔处理器中的组织如下:

  • Intel NetBurst(第一个支持HT的(:ITLB被复制。DTLB是竞争性共享的
  • Intel Nehalem(第二个支持HT的(、Westmere、Sandy Bridge和Ivy Bridge:复制了巨大的ITLB页面。小页面ITLB是静态分区的。所有DTLB都是竞争性共享的
  • Intel Haswell、Broadwell和Skylake:小页面ITLB是动态分区的。复制了巨大的页面ITLB。优化手册(2019年9月(的表2-12表示,其他TLB的政策是"固定的"。我认为这意味着静态分区。但根据题为《Translation Leak-aside Buffer:用TLB攻击击败缓存侧通道保护》(第6节(的论文的实验结果,"固定"似乎意味着竞争性共享。这将与早期和后期的微体系结构相一致
  • 阳光湾:ITLB是静态分区的。所有DTLB和STLB都是竞争性共享的
  • AMD Zen、Zen+、Zen 2(家族17h(:所有TLB都是竞争性共享的

参考文献:

  • 对于NetBurst:https://software.intel.com/en-us/articles/introduction-to-hyper-threading-technology.
  • 对于其他英特尔微体系结构:有关信息,请参阅《优化参考手册》
  • 对于AMD微体系结构:有关信息,请参阅《软件优化指南》

我不清楚TLB在任何英特尔Atom微体系结构中是如何组织的。我认为L1 DTLB和STLB(在Goldmont Plus中(或L2 DTLB(在早期的微体系结构中(是共享的。根据Intel SDM V3(2019年10月(第8.7.13.2节:

在支持"英特尔超线程技术"的处理器中,数据缓存TLB是共享的。指令高速缓存TLB可以是重复的或共享的在每个逻辑处理器中,具体取决于不同的处理器系列。

尽管这并不准确,因为ITLB也可以分区。

我不知道英特尔原子中的ITLB。

(顺便说一句,在旧的AMD处理器中,所有TLB都是按内核复制的。请参阅:不同cpu AMD/Intel上的物理内核和逻辑内核。(

当TLB被共享时,每个TLB条目都用分配它的逻辑处理器ID(一个比特值,不同于进程上下文标识符,可以禁用也可以不支持(进行标记。如果另一个线程被调度在逻辑核心上运行,并且该线程访问的虚拟地址空间与前一个线程不同,OS必须将第一级页面结构的相应基本物理地址加载到CR3中。每当CR3被写入时,核心都会自动刷新所有共享TLB中标记有逻辑核心ID的所有条目。还有其他操作可能会触发此冲洗。

分区和复制的TLB不需要使用逻辑核心ID进行标记。

如果支持并启用进程上下文标识符(PCID(,则不会使用逻辑核心ID,因为PCID功能更强大。请注意,分区和复制的TLB使用PCID进行标记。

相关:具有多个页面大小特定TLB的地址转换。

(请注意,还有其他分页结构缓存,它们的组织方式类似。(

(请注意,通常TLB被认为是MMU的一部分。维基百科上关于MMU的文章显示了一个旧版本书籍中的数字,表明它们是分开的。然而,该书的最新版本删除了这个数字,并表示TLB是MMU。(

最新更新