TLB是在多个核心之间共享的吗?

时间:2015-12-23 14:03:31

标签: caching x86 tlb

我听说MMU是由MMU维护而不是CPU缓存 那么一个TLB是否存在于CPU上并且在所有处理器之间共享,或者每个处理器都有自己的TLB缓存?

有谁可以解释MMU和L1,L2缓存之间的关系?

1 个答案:

答案 0 :(得分:7)

TLB缓存页表中列出的翻译。每个CPU核心都可以在不同的上下文中运行,具有不同的页表。这就是你所谓的MMU,如果它是一个单独的“单元”,那么每个核心都有自己的MMU。任何共享缓存始终都是物理索引/物理标记的,因此它们会根据MMU后的物理地址进行缓存。

TLB是一个缓存,所以从技术上讲,它只是一个实现细节,可能因微体系结构而不同(在x86 架构的不同实现之间)。

在实践中,真正变化的只是尺寸。现在,2级TLB很常见,可以将TLB全部未命中保持在最低限度,但仍然足够快,每个时钟周期允许3次转换。 TLB的主要目标是快速,不一定大,因此核心之间的共享TLB将没有用。 ESP。考虑到确保使用它的所有核心都在运行共享相同页表的线程的开销。

即使所有内核都在同一进程中运行线程,某些线程也可能处于内核模式,处理中断或系统调用,从而使用内核的页表。这使得共享跨核TLB的价值非常低/难以实现。

有关如何在真实CPU中将各部分组合在一起的示例see David Kanter's writeup of Intel's Sandybridge design。请注意,这些图表适用于单个SnB核心。大多数CPU中唯一的共享核心内部缓存是最后一级缓存。英特尔的SnB系列设计都在环形总线上使用2MiB每核模块化L3缓存。因此,添加更多内核会为总池增加更多L3,以及添加新内核(每个内核都有自己的L2 / L1D / L1I / uop-cache和两级TLB。)