Cache写机制

Posted huststephen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cache写机制相关的知识,希望对你有一定的参考价值。

Cache 写机制分为:Write-through和Write-back

 

Write-through(直写模式)

定义:在数据更新时,同时写入缓存Cache和后端存储(主存);

优点:操作简单;

缺点:因为数据修改需要同时写入存储,数据写入速度较慢。

 

对于写缺失使用no write allocate policy(见下文)的write through 处理流程

 

 

Write-back(回写模式)

定义:在数据更新时只写入缓存Cache,只在数据被替换出缓存时,被修改(用dirty标记)的缓存数据才会被写到后端存储(主存);

优点:数据写入速度快,因为不需要写到后端存储(主存);

缺点:一旦更新后的数据未被写入存储时出现系统掉电的情况,数据将无法找回。

 

对于写缺失使用write allocate policy(见下文)的write back 的处理流程:

注意:上述两种写模式都是针对当缓存cache中存在要写的数据的地址时的分配策略,然而,当要写的数据的地址不在缓存cache中,即发生Write miss。

 

Write-miss(写失效)

write-miss(即所要写的数据的地址不在cache中)的处理方式有两种:

no write allocate policy:将要写的内容直接写回main memory;

write allocate policy:将要写的地址所在的块先从main memory(主存)调入cache中,然后写cache;

 

注意:拿L1 Dcache为例,因为对一个cache line的写入一般不会刚好是一个cache line的长度(抓了trace看过,肉眼观察是8个字节的访问粒度居多),

一个cache line一般是64字节,你的一次register spilling只有几个字节,也就是说你的一次写入只更新了一个cache line的一小部分,其他部分的值必须保持和内存一致,

所以你不能在cache里随便找一个地方就写,而是要先把旧值取上来,再写入,这是write-allocate的做法。

 

以上是关于Cache写机制的主要内容,如果未能解决你的问题,请参考以下文章

SylixOS NandFlash读CACHE

docker build 的 cache 机制

CPU Cache 机制以及 Cache miss

#yyds干货盘点# mybatis源码解读:cache包(缓存机制功能)

Java实现cache的基本机制

缓存机制