2.6.1 多级缓存的数据包含策略

在多级缓存存储体系中,一份数据会同时出现在L1、L2和L3缓存中吗?这涉及包含性(Inclusive)缓存和独占性(Exclusive)缓存两种策略。

● 包含性缓存:所有存在于低级缓存(例如L1缓存)的数据都必须存在于高级缓存(例如L2或L3缓存)中。这种策略简化了缓存的协同操作和失效处理。

● 独占性缓存:数据只存在于某一层次的缓存中,但不会在多个层次中同时存在。这种策略有助于增大有效的缓存容量,因为不同层次的缓存不会存储相同的数据。

在有限的容量和更高的速度需求下,这两种策略的特性互为彼此的优缺点,如表2-1所示。

表2-1 两种缓存策略

Intel从Skylake架构开始,引入了一些与Haswell架构不同的缓存设计选择。在Haswell架构中,L3缓存是包含性缓存,L3缓存中包含了L1和L2缓存中的所有数据。当L1或L2缓存中的某个数据项被替换时,它仍然会保留在L3缓存中,这有助于降低缓存未命中率。在Skylake架构中,Intel使L3缓存变为非严格的包含性缓存,这与完全的包含性缓存或完全的独占性缓存都有所不同。这种设计的优点是,它允许更大的L3缓存容量,因为L3缓存不需要存储L1和L2缓存中的所有数据。

在实际的系统设计中,完全的包含性缓存和独占性缓存可能都不是绝对的。设计者可能会选择中间的策略,以适应特定的性能和功耗需求。Skylake的这种策略更接近于中间策略,结合了包含性缓存和独占性缓存的优点。类似的处理还有DynamIQ架构,它是ARM为其处理器设计的一种新架构,是ARMv8-A架构的一部分,DynamIQ架构提出了几种缓存数据包含方案:Strictly Inclusive(严格包含)、Weakly Inclusive(弱包含)和Fully Exclusive(完全独占)。

● Strictly Inclusive:在这种策略下,L1缓存中的所有数据都必须同时存在于L2缓存中。一个数据块无论什么时候被加载到L1缓存,该数据块都会在L2缓存中有一份拷贝。优点是可以更快地判断一个数据是否存在于某一级缓存,从而帮助简化缓存一致性的维护。缺点是L2缓存可能会被L1缓存中的数据块填满,即使这些数据块并不经常被访问。

● Weakly Inclusive:当一个数据块因为未命中而被加载时,它会同时被存放在L1和L2缓存中。但与Strictly Inclusive不同,随着时间的推移,这个数据块可能会从L2缓存中被替换出去,即使它仍然存在于L1缓存中。这种策略是一种折中方法,允许L2缓存有一定的自由度去管理其内容,以适应动态变化的访问模式。

● Fully Exclusive:在这种策略下,数据块只会被加载到 L1 缓存,而不会被加载到 L2缓存,L1缓存和L2缓存之间不存在重复的数据。这种策略的优点是最大化了多级缓存系统的总容量,因为两级缓存中没有重复数据。例如,如果L1缓存是64KB,L2缓存是256KB,那么整体可用的缓存容量是320KB。缺点是如果数据在L1缓存未命中时,必须直接从更低层的存储(例如主内存或者更低级的缓存)中获取数据,而不是从L2缓存获取。