缓存包含属性 - 多级缓存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了缓存包含属性 - 多级缓存相关的知识,希望对你有一定的参考价值。

我无法理解多级缓存中缓存包含属性的概念。根据我的理解,如果我们有2级缓存,L1和L2,那么L1的内容必须是L2的子集。这意味着L2必须至少与L1一样大。此外,当修改L1中的块时,我们必须在L2和Memory两个位置更新。这些概念是否正确?

答案

通常,我们可以说添加更多级别的缓存是在内存层次结构中添加更多级别的访问。它总是在访问时间和延迟之间进行权衡。缓存越大,我们可以存储更多,但需要更多时间进行搜索。如您所述,L2缓存必须大于L1缓存。否则它的基本目的就失败了。

现在来看L1是否是L2的一个子集。它并非总是必要的。有包含缓存层次结构和独占缓存层次结构。在包容性中,正如您所说,最后一级是所有其他缓存的超集。

您可以查看此演示文稿以获取更多详细信息PPT

现在更新不同级别,是缓存一致性问题和级别数量越大,头痛越大。您可以在这里查看各种协议:cache coherence

另一答案

包含二级缓存大于L1缓存是正确的。但是,您关于需要在L1中进行修改的包容性缓存的声明也要求修改L2和内存是不正确的。您描述的系统称为“直写”缓存,其中私有缓存中的所有写入也写入下一级缓存。包容性缓存heirarchies并不意味着直写缓存。

大多数具有包容性heirarchies的架构都使用“回写”缓存。 “回写”高速缓存与直写高速缓存的不同之处在于,它不需要将当前高速缓存级别的修改热切地传播到下一级高速缓存(例如,L1高速缓存中的写入不具有立即写下L2)。相反,回写高速缓存仅更新当前高速缓存级别并使数据“脏”(描述其最新值在当前级别且所有高级别具有过时值的高速缓存行)。回写将脏缓存行刷新到驱逐上的下一级缓存(当需要在当前缓存中创建空间以服务冲突未命中时)

这些概念在Baer和Wang的开创性工作中进行了总结,“关于多级缓存层次结构的包含性”,ISCA 1988 paper_link。该文件解释了您在最初令人困惑的声明中的困惑:

如果C_(i + 1)级别的缓存内容是其所有子缓存C_i的内容的超集,则MultiLevel缓存层次结构具有包含属性(ML1)。“此定义暗示直写策略必须用于较低级别的缓存。正如我们在本文中假设回写高速缓存一样,ML1实际上是一个“空间”MLI,即提供空间以包含但是实现了回写策略。

以上是关于缓存包含属性 - 多级缓存的主要内容,如果未能解决你的问题,请参考以下文章

架构实战营模块五 1.多级缓存架构

多级缓存系统设计

微服务框架 SpringCloud微服务架构 多级缓存 48 多级缓存 48.7 Redis 缓存预热

内存键值缓存是不是包含引用值?

千万级并发!如何设计一个多级缓存系统?

vue keep-alive 不生效和多级(三级以上)缓存失败