根据一个cache的内容是否存在于其它level(层次)的cache中,可以构成多种多层次的cache结构。如果上级cache的所有内容在下级cache里都有,那么则称下级cache包含上级cache(Inclusive策略)。如果下级cache只包含上级cache中不存在的内容,则称下级cache不包含上级cache(exclusive策略)。如果下级cache的内容既不严格包含也不排斥上级cache,则称Pseudo-exclusive策略。
1. Inclusive策略
在Inclusive策略中,也就是L2包含L1的所有内容。假设有一个处理器读取块 X 的请求。如果在 L1 缓存中找到该块,则从 L1 缓存中读取数据并返回给处理器。如果该块在 L1 缓存中未找到,但存在于 L2 缓存中,则从 L2 缓存中取出缓存块并将其放入 L1。如果这导致块从 L1 中逐出,则 L2 不参与。如果在 L1 或 L2 中均未找到该块,则将其从主存中取出并放入 L1 和 L2 中。现在,如果有从 L2 的逐出,L2 缓存向 L1 缓存发送回无效(back invalidation),这样就不会违反Inclusive策略。如下图所示是Inclusive策略下,cacheline在L1和L2之间搬移的1个例子。
这种方式的优缺点:
优点:1. 在多core系统中,如果cache状态是S态,core只需检查L2的内容就可以得到数据,不需要再去snoop其它core了。2. L1和L2的cache size可以不一样。
缺点:1. L2的way必须大于等于连在L2之上所有L1的way相加起来的总way。2. L2的set必须要大于等于L1的set。3. L2的eviction可能会导致L1的eviction,这样一定程度上降低L1 cache命中率。
2. Exclusive策略
在Exclusive策略中,也就是L2不包含L1的所有内容。假设有一个处理器读取块 X 的请求。如果在 L1 缓存中找到该块,则从 L1 缓存中读取数据并返回给处理器。如果该块在 L1 缓存中未找到,但存在于 L2 缓存中,则将缓存块从 L2 缓存移动到 L1 缓存,并在L2中移除。如果这导致一个块从 L1 中被逐出,则被逐出的块将被放入 L2。这是填充 L2 的唯一方法。在这里,L2 的行为就像一个备用缓存。如果在 L1 或 L2 中均未找到该块,则将其从主内存中取出并仅放置在 L1 而不是 L2中。如下图所示是Exclusive策略下,cacheline在L1和L2之间搬移的1个例子。
这种方式的优缺点:
优点:1. 可以存放更多的数据。2. 避免L2太过庞大。
缺点:1. 实现起来比较复杂。2. 如果在其它core里存在数据,当前core想要获得的话,必须要通过snoop方式获得。
3. Pseudo-exclusive
在Pseudo-exclusive策略中,L1和L2的内容没有严格的Inclusive或Exclusive的关系。
假设有一个处理器读取块 X 的请求。如果在 L1 缓存中找到该块,则从 L1 缓存中读取数据并返回给处理器。如果该块在 L1 缓存中未找到,但存在于 L2 缓存中,则从 L2 缓存中取出缓存块并将其放入 L1。如果这导致块从 L1 中被逐出,则 L2 不参与,这与包容性策略的情况相同。如果在 L1 和 L2 中都找不到该块,则将其从主存中取出并放入 L1 和 L2 中。现在,如果有从 L2 的逐出,与包容性策略不同,没有反向失效(back invalidation)。如下图所示是Pseudo-exclusive策略下,cacheline在L1和L2之间搬移的1个例子。
这种方式是以上两种策略的折中,在Arm CPU中,比较常用这种方式。
作者:谷公子
文章来源:https://blog.csdn.net/W1Z1Q/article/details/129961994?spm=1001.2014.3001.5502
推荐阅读
- PCIE,USB,SATA ,Ethernet 都在用的SerDes到底是个啥?
- 搞芯片,不懂逻辑综合是啥?
- IC各细分领域公司简介以及薪资调研(GPU篇)
- 会写VIP,会提取testplan,GPT进化的太快了!!!
- 搞芯片不懂cell别乱用!看看Vt cell都是啥?
更多IC设计技术干货请关注IC设计技术专栏。
迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。