多级缓存的包含性
更新时间:2026-10-01。配合 缓存层次,这篇讲不同级别里“同一行能否重复存在”。
本文要回答的问题
- inclusive 为什么方便一致性却“吃掉”容量?
- NINE 为什么成为现代主流?
一、三种关系
- Inclusive:LLC 的行包含所有 L1/L2 的行。snoop 时只查 LLC 即可过滤,简单;但同一份数据占多级空间,有效总容量变小,LLC 驱逐要反向失效内层。
- Exclusive:各级缓存数据不重复,等效容量可叠加,适合小缓存层次;但 snoop 要查多级。
- NINE:不保证包含也不保证排他,由自然填充决定,灵活且容量利用率高,是许多现代多核的选择,但 snoop 一致性需目录/探针处理。
二、常见坑
- 以为容量是各级简单相加(inclusive 下不是)。
- 忽略 inclusive 的 back-invalidation 开销。
- exclusive 下仍只 snoop 外层。
小结
inclusive 换 snoop 简单、exclusive 换容量叠加、NINE 求灵活与利用率。下一篇 缓存缺失分类与 AMAT。
总结
多级缓存之间同一份数据能否重复存在,决定了有效容量和一致性代价:inclusive 让外层成为内层超集,snoop 只查 LLC 即可过滤、简单省事,但同一份数据占满多级空间、LLC 驱逐还要反向失效内层;exclusive 保证各级不重叠、等效容量可叠加,但探测必须逐级查;NINE 不做任何保证、按自然填充决定,容量利用率最高,代价是 snoop 需要目录/探针兜底。三种策略没有胜负,只是在 snoop 过滤、有效容量和驱逐传播三者间交换代价——NINE 靠灵活性成为现代多核主流。