首页 > 其他分享 >CS149笔记Cache一致性

CS149笔记Cache一致性

时间:2022-11-26 09:22:27浏览次数:47  
标签:CS149 Cache client 内存 Memory 一致性 processor

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

标签:CS149,Cache,client,内存,Memory,一致性,processor
From: https://www.cnblogs.com/kalicener/p/16926896.html

相关文章

  • Linux Page cache和Buffer cache
    free命令常用参数free命令用来查看内存使用状况,常用参数如下:-hhuman-readable格式打印-w把cache&buffer分开打印-tshowtotalforRAM+swapfree结果指......
  • Memcache安装 2
     服务器端下载地址:​​http://jehiah.cz/projects/memcached-win32/​​<wbr><br>客户端下载地址:<ahref="http://code.google.com/p/memc......
  • cs149笔记并行图计算
    ParallelProgrammingonGraphs这些课主要讲了关于图并行算法,包括pagerank等算法。PageRankPageRank算法可以见https://en.wikipedia.org/wiki/PageRank#math_2\[R[i......
  • Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析
    摘要:一、问题:      数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求。 二、解决方案:   1.通过高速服务器Cache......
  • 数据库和缓存的一致性如何保证
    最近帮组里做讲座预约系统,虽然使用人数不多,但终于还是遇到了一些系统经典问题,比如数据库与缓存的一致性问题,很有意思,好记性不如烂笔头,学习了一些思路以后决定记录下来与大......
  • 怎么保证缓存与数据库的双写一致性?
    分布式缓存是现在很多分布式应用中必不可少的组件,但是用到了分布式缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么如何解决一致性问......
  • redis和memcached的区别详解
    redis和memcached的区别详解Redis和Memcache都是基于内存的数据存储系统。Memcached是高性能分布式内存缓存服务;Redis是一个开源的key-value存储系统。与Memcached类似......
  • cache
    cachecache的基本工作原理cache作为主存的缓存,被划分为与主存相等的区域。主存中的区域称为块,也称为主存块,cache中用以存放主存块的区域称为行,或称为槽。cache的有效位......
  • Getting MAX_TEXTURE_SIZE from Caches::initConstraints()
    在重写android中View类的onDraw方法画图的时候,protectedvoidonDraw(Canvascanvas)报错如下:一开始还以为是模拟器的问题,结果发现://改变风格,绘制字体paint.setTex......
  • 重新认识下JVM级别的本地缓存框架Guava Cache(2)——深入解读其容量限制与数据淘汰策
    大家好,又见面了。本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。通......