【Cache缓存】分配策略

Cache分配策略(Cache allocation policy)

cache的分配策略是指什么情况下为数据分配cache line(是否需要将数据从主存中分配到cache中)。cache分配策略分为读和写两种情况。

读分配(read allocation)

当CPU读数据时,发生cache miss,这种情况下都会分配一个cache line,缓存从主存读取的数据。默认情况下,cache都支持读分配。

写分配(write allocation)

当CPU写数据发生cache miss时,才会考虑写分配策略。

1、当不支持写分配(No-write allocate)的情况下,写指令只会更新主存数据,然后就结束了。

2、当支持写分配(Write allocate)的时候,我们首先从主存中加载数据到cache line中(相当于先做个读分配动作),然后更新cache line中的数据。

Cache更新策略(Cache update policy)

cache更新策略是指当发生cache hit时,写操作如何更新数据(如是否先写到cache中,等到实在有必要时再写入到主存中)。cache更新策略分成两种:写直通和回写。

写直通(write through)

当CPU执行store指令并在cache hit时,我们更新cache中的数据并且更新主存中的数据。cache和主存的数据始终保持一致。

写回(write back)

当CPU执行store指令并在cache hit时,我们只更新cache中的数据。并且每个cache line中会有一个bit位记录数据是否被修改过,称之为dirty bit(翻翻前面的图片,cache line旁边有一个D就是dirty bit)。我们会将dirty bit置位。主存中的数据只会在cache line被替换或者显示的clean操作时更新。因此,主存中的数据可能是未修改的数据,而修改的数据躺在cache中。cache和主存的数据可能不一致。

同时思考个问题,为什么cache line大小是cache控制器和主存之间数据传输的最小单位呢?这也是因为每个cache line只有一个dirty bit。这一个dirty bit代表着整个cache line是否被修改的状态。

Post write

CPU更新cache数据时,把更新的数据写入到一个更新缓冲器,在合适的时候才对memory(后端存储)进行更新。这样可以提高cache访问速度,但是,在数据连续被更新两次以上的时候,缓冲区将不够使用,被迫同时更新memory(后端存储)。

实例

假设有一个64 Bytes大小直接映射缓存,cache line大小是8 Bytes,采用写分配和写回机制。当CPU从地址0x2a读取一个字节,cache中的数据将会如何变化呢?假设当前cache状态如下图所示(tag旁边valid一栏的数字1代表合法。0代表非法。后面Dirty的1代表dirty,0代表没有写过数据,即非dirty)。

如上图,根据index找到对应的cache line,对应的tag部分valid bit是合法的,但是tag的值不相等,发生缺失。此时需要从地址0x28地址加载8字节数据到该cache line中。但是,我们发现当前cache line的dirty bit置位。因此,cache line里面的数据不能被简单的丢弃,由于采用写回机制,所以我们需要将cache中的数据0x11223344写到地址0x0128地址(这个地址根据tag中的值及所处的cache line行计算得到)。这个过程如下图所示。

当写回操作完成,我们将主存中0x28地址开始的8个字节加载到该cache line中,并清除dirty bit。然后根据offset找到0x52返回给CPU。

相关推荐
啦啦啦_999914 分钟前
Redis-2-queryFormat()方法
数据库·redis·缓存
forestsea2 小时前
深入理解Redisson RLocalCachedMap:本地缓存过期策略全解析
redis·缓存·redisson
啦啦啦_99994 小时前
Redis-0-业务逻辑
数据库·redis·缓存
自不量力的A同学5 小时前
Redisson 4.2.0 发布,官方推荐的 Redis 客户端
数据库·redis·缓存
fengxin_rou5 小时前
[Redis从零到精通|第四篇]:缓存穿透、雪崩、击穿
java·redis·缓存·mybatis·idea·多线程
fengxin_rou6 小时前
黑马点评实战篇|第二篇:商户查询缓存
缓存
笨蛋不要掉眼泪6 小时前
Redis哨兵机制全解析:原理、配置与实战故障转移演示
java·数据库·redis·缓存·bootstrap
ALex_zry18 小时前
Redis Cluster 分布式缓存架构设计与实践
redis·分布式·缓存
shuair1 天前
redis缓存预热、缓存击穿、缓存穿透、缓存雪崩
redis·spring·缓存
上架ipa1 天前
redis图形化客户端功能对比
redis·缓存