CS149笔记Cache一致性

Cache一致性

关于Cache,我感觉通过这门课程学习到的内容可能还不够。我现在思考Cache读Memory有点像思考Memory读SSD。

  • Cache每次都需要从Memory读64B,而内存读SSD每次都会读4KB
  • 内存有带宽bandwidth,而SSD也有限制不过叫IOPS。

而且现在主要还都是再讲shared Memory的Cache一致性,我其实更想关注uniform Memory的Cache一致性。

image-20221126081436275

单核cpu的读写Cache

image-20221126081621618
  • Cache也有分为write though和write back,一般提到的都是write back

shared memory multo-processor

  • 任何processor从address X处读取的value值应该是最近一次任意processor写的值

单核CPU系统的Cache一致性

image-20221126082643684

即使是single cpu system也有可能出现Cache的不一致性。有可能DMA和network card向内存中写了数据,而CPU没有及时flush Cache就会出现不一致性。

解决办法

  • OS直接将这个shared buffers的page标记为不可Cache
  • 显式地flush Cache,当IO完成时

一致性定义

这里的一致性和我当时学操作系统这门课程接触到的一致性很像啊。

所以这里重温一下当时学的线性一致性:

image-20221126084442097

client 发起请求也就是inv,client收到server的回复resp

背景知识介绍完了,怎样才能达到线性一致?这就要求 Server 在执行 Operations 时需要满足以下三点:

  1. 瞬间完成(或者原子性)
  2. 发生在 Inv 和 Resp 两个事件之间
  3. 反映出“最新”的值

这里的最新很有意思,因为操作时原子性的,那么client A读取x可能发生在client B写A之前也可能发生在之后。但是一致性语义的核心就是,一旦client A读取到了最新的write,那么发生在client A这次读操作的任意client读操作(也就是其他client发出inv在client A这次收到resp之后),一定可以会看到最新的值。

回到内存的一致性语义:

image-20221126083638959
  • 所有processor对于内存的并行操作,可以被序列化为一个processor的操作
  • 单个processor的对内存的任何操作都是顺序的
  • 读取操作返回的是该内存地址最近一次write的结果。

实现Cache一致性,这里教授主要讲了一种基于snoop的硬件实现算法:

image-20221126090659580 image-20221126090731206

可以用状态机描述Cache状态的变化

image-20221126090751410
posted @ 2022-11-26 09:10  kalice  阅读(101)  评论(0编辑  收藏  举报