我无法理解多级缓存中缓存包含属性的概念。根据我的理解,如果我们有2级缓存,L1和L2,那么L1的内容必须是L2的子集。这意味着L2必须至少与L1一样大。此外,当修改L1中的块时,我们必须在L2和Memory两个位置更新。这些概念是否正确?
答案 0 :(得分:3)
通常,我们可以说添加更多级别的缓存是在内存层次结构中添加更多级别的访问。它总是在访问时间和延迟之间进行权衡。缓存越大,我们可以存储更多,但需要更多时间进行搜索。如您所述,L2缓存必须大于L1缓存。否则它的基本目的就失败了。
现在判断L1是L2的一个子集。它并非总是必要的。有包含缓存层次结构和独占缓存层次结构。在包容性方面,如你所说,最后一级是所有其他缓存的超集。
您可以查看此演示文稿以获取更多详细信息 PPT
现在更新不同级别,是一个缓存一致性问题&等级越大,头痛越大。您可以在此处查看各种协议:cache coherence
答案 1 :(得分:2)
正确的二级缓存大于L1缓存是正确的。但是,您关于需要在L1中进行修改的包容性缓存的声明也要求修改L2和内存是不正确的。您描述的系统称为“直写”缓存,其中私有缓存中的所有写入也写入下一级缓存。包容性缓存heirarchies并不意味着直写缓存。
大多数具有包容性heirarchies的架构都使用“回写”缓存。 “回写”高速缓存与直写高速缓存的不同之处在于,它不需要将当前高速缓存级别的修改热切地传播到下一级高速缓存(例如,L1高速缓存中的写入不具有立即写下L2)。相反,回写高速缓存仅更新当前高速缓存级别并使数据“脏”(描述其最新值在当前级别且所有高级别具有陈旧值的高速缓存行)。回写将脏缓存行刷新到驱逐时的下一级缓存(当需要在当前缓存中创建空间以服务冲突未命中时)
这些概念在Baer和Wang的“关于多级缓存层次结构的包含属性”的开创性工作中进行了总结,ISCA 1988 paper_link。本文解释了你在最初令人困惑的声明中的困惑:
一个 多级 高速缓存 等级制度 具有 该 包容 财产(ML) 如果 该 内容 的 一个 高速缓存 在 水平 C_(I + 1), 是 一个 超 的 该 内容 的 所有 它的 孩子 高速缓存, C_I, 在 水平 一世。” 这个 定义 暗示 那 该 写通 政策 必须 是 用过的 对于 降低 水平 缓存。 如 我们 将 假设 回写 高速缓存 在 这个 纸, 该 ML1 是 其实 一个 “空间” 美林 即, 空间 是 提供 对于 包容 但 一个 回写 政策 是 实现。