英特尔Nehalem微架构三级缓存原理学习

英特尔Nehalem微架构包含式(Inclusive)三级缓存体系架构:

注释:包含式(inclusive)缓存指的是该缓存中包含低级缓存中的内容。包含式三级缓存即在三级缓存中有着二级缓存数据的副本。与包含式相对立的是独立式(exclusive)

英特尔Nehalem微架构细节前瞻

Nehalem改进了缓存子系统

    Nehalem微架构的缓存子系统相比之前的Core 2架构有了极大的变化,最重要的变革来自全新的三级缓存和二级页表缓存。

英特尔Nehalem微架构细节前瞻

英特尔Nehalem微架构细节前瞻

Nehalem缓存结构示意图

    一级缓存方面,每个核心依然是32KB指令缓存和32KB数据缓存,数据缓存依然是8路联合设计。Nehalem二级缓存则大幅减小,而且不再是共享式。Nehalem每个核心拥有独立的256KB二级缓存(即双核处理器512KB、四核处理器1MB)。Nehalem的二级缓存拥有极低的潜伏期,不过暂时尚未有具体细节,据称不会超过12时钟周期。Nehalem的二级缓存并未像以前的处理器那样使用包含式(inclusive)设计,二级缓存不再完整存储一级缓存的内容(事实上之前的二级缓存设计亦并非强制要求绝对inclusive,尽管多数时候实际上是完整包含),不过由于它们的cache line仍然相同,所以可以在同一核心内进行数据交换(非全速)。

    注释:缓存中的数据会被分成小段进行存储,每一段就称为一个cache line。不同的处理器会有不同大小的cache line,例如Core 2处理器的cache line均为64Byte。只有cache line相同的缓存之间才能交换数据。

    Nehalem的三级缓存采用了完全包含式(Full Inclusive)设计。

    所谓完全包含式三级缓存指的是该缓存中完全存储了更低级别的缓存(一级和二级)中的所有内容。这样的设计缺点是三级缓存需要消耗1MB多(即一级缓存和二级缓存之和)空间用于存储一级和二级缓存中的数据。不过相比之下,低级缓存与独立式三级缓存进行数据交换的速度要比从包含式三级缓存中直接复制内容慢得多。

英特尔Nehalem微架构细节前瞻

独立式最终级缓存会造成较多的snoop traffic

    由于三级缓存是最终级缓存,因此它采用包含式或者独立式将会影响snoop traffic(侦查缓存数据所做的性能消耗)大小。若最终级缓存采用独立式设计,当其未命中时处理器还要逐个检查每个核心的独享缓存中是否有所需数据。在极端情况下,处理器可能在所有缓存中都未找到所需数据,此时开始从系统内存调用数据,这就造成了极大的效能损害。

英特尔Nehalem微架构细节前瞻

包含式最终级缓存将snoop traffic最小化

    Nehalem采用完全包含式三级缓存作为最终级缓存就可以最大限度减少snoop traffic。因为三级缓存中有着其他缓存的数据副本,当三级缓存中未找到数据,则所有的一级和二级缓存中必然也不会有。系统此时无需再逐个检索每个核心的独享缓存,而是直接从系统内存调用数据。

英特尔Nehalem微架构细节前瞻

Nehalem所采用的MESIF缓存一致性协议

    此外,Nehalem的三级缓存命中成功时,也可以扮演snoop filter的角色。尽管三级缓存中存储了一级和二级缓存的数据备份,但从共享的三级缓存中调用数据总会比从独享的一级和二级缓存中读取数据慢得多。因此若一级和二级缓存中存在所需数据,自然要优先从它们中读取。Nehalem支持MESIF缓存一致协议,在Nehalem三级缓存中的每一个cache line里,有4 bit空间(恰好针对4个核心)用来做核心确认,用于指示哪一个核心的独享缓存里可能具有该cache line的备份。如果某个核心的确认位为0,则那个核心就不大可能具有该cache line的数据备份。若有多个核心的确认位均为1,则不会对其进行任何操作。当4个核心确认位都是0时,就不需要对核心独享缓存做任何侦听,处理器将直接调用三级缓存的数据。在仅有1个核心确认位是有效时,处理器才会侦听那一个核心,从中读取数据。完全包含式缓存和核心确认位技术的联合使用,使得snoop traffic可以大大减少。


你可能感兴趣的:(英特尔,缓存架构,三级缓存,双核处理器,包含式缓存,Nehalem微架构)