所以就出现了缓存一致性协议。最出名的就是Intel 的MESI协议,MESI协议保证了每个缓存中使用的共享变量的副本是一致的。它核心的思想是:当CPU写数据时,如果发现操作的变量是共享变量,即在其他CPU中也存在该变量的副本,会发出信号通知其他CPU将该变量的缓存行置为无效状态,因此当其他CPU需要读取这个变量时,发现自己缓存中缓存该变量的缓存行是无效的,那么它就会从内存重新读取。

Cache一致性协议之MESI
处理器上有一套完整的协议,来保证Cache一致性。比较经典的Cache一致性协议当属MESI协议,奔腾处理器有使用它,很多其他的处理器都是使用它的变种。

单核Cache中每个Cache line有2个标志:dirty和valid标志,它们很好的描述了Cache和Memory(内存)之间的数据关系(数据是否有效,数据是否被修改),而在多核处理器中,多个核会共享一些数据,MESI协议就包含了描述共享的状态。

在MESI协议中,每个Cache line有4个状态,可用2个bit表示,它们分别是:

MESI状态

M(Modified)和E(Exclusive)状态的Cache line,数据是独有的,不同点在于M状态的数据是dirty的(和内存的不一致),E状态的数据是clean的(和内存的一致)。

S(Shared)状态的Cache line,数据和其他Core的Cache共享。只有clean的数据才能被多个Cache共享。

I(Invalid)表示这个Cache line无效。

E状态示例如下:

只有Core 0访问变量x,它的Cache line状态为E(Exclusive)。
S状态示例如下:

3个Core都访问变量x,它们对应的Cache line为S(Shared)状态。

M状态和I状态示例如下:

Core 0修改了x的值之后,这个Cache line变成了M(Modified)状态,其他Core对应的Cache line变成了I(Invalid)状态。

在MESI协议中,每个Cache的Cache控制器不仅知道自己的读写操作,而且也监听(snoop)其它Cache的读写操作。每个Cache line所处的状态根据本核和其它核的读写操作在4个状态间进行迁移。

MESI协议状态迁移图如下:

在上图中,Local Read表示本内核读本Cache中的值,Local Write表示本内核写本Cache中的值,Remote Read表示其它内核读其它Cache中的值,Remote Write表示其它内核写其它Cache中的值,箭头表示本Cache line状态的迁移,环形箭头表示状态不变。

当内核需要访问的数据不在本Cache中,而其它Cache有这份数据的备份时,本Cache既可以从内存中导入数据,也可以从其它Cache中导入数据,不同的处理器会有不同的选择。MESI协议为了使自己更加通用,没有定义这些细节,只定义了状态之间的迁移,下面的描述假设本Cache从内存中导入数据。

MESI状态之间的迁移过程如下:

AMD的Opteron处理器使用从MESI中演化出的MOESI协议,O(Owned)是MESI中S和M的一个合体,表示本Cache line被修改,和内存中的数据不一致,不过其它的核可以有这份数据的拷贝,状态为S。

Intel的core i7处理器使用从MESI中演化出的MESIF协议,F(Forward)从Share中演化而来,一个Cache line如果是Forward状态,它可以把数据直接传给其它内核的Cache,而Share则不能。

缓存一致性(MESI)相关推荐

  1. 2021-04-04 CPU缓存一致性 MESI协议

    一 CPU以及缓存和高速缓存结构 1.1 CPU结构 我们知道CPU主要功能,一是控制,一是运算.主要包括寄存器.控制单元.运算单元和中断系统,主要架构如下: 控制单元:主要负责分析和解释指令 算数逻 ...

  2. CPU 缓存一致性 MESI 协议

    为什么需要缓存一致 目前主流电脑的 CPU 都是多核心的,多核心的有点就是在不能提升 CPU 主频后,通过增加核心来提升 CPU 吞吐量.每个核心都有自己的 L1 Cache 和 L2 Cache,只 ...

  3. 缓存一致性MESI与内存屏障

    文章目录 1. 高速缓存 1.1. 什么是高速缓存Cache 1.2. 缓存行 2. 伪共享问题 2.1. 什么是伪共享 2.2. 解决伪共享 3. 总线锁 4. 缓存锁 5. 缓存一致性协议 5.1 ...

  4. 【并发编程】CPU多级缓存与缓存一致性

    CPU多级缓存与缓存一致性 定义 cpu缓存是位于CPU与内存之间的临时存储器,它的容量比内存小的多,但是交换速度却比内存要快得多 为什么需要CPU cache? cpu的频率太快了,快到主存跟不上, ...

  5. 两个例子详解并发编程的可见性问题和有序性问题,通过volatile保证可见性和有序性以及volatile的底层原理——缓存一致性协议MESI和内存屏障禁止指令重排

    1. 并发编程的可见性问题 2. 并发编程的有序性问题 3. 使用volatile关键字解决可见性问题 4. 可见性问题的本质--缓存不一致 因为cpu执行速度很快,但是内存执行速度相对于CPU很慢, ...

  6. 同时存多个变量缓存 微信小程序_CPU缓存一致性协议MESI,memory barrier和java volatile...

    MESI协议 MESI协议是一个被广泛使用的CPU缓存一致性协议.我们都知道在CPU中存在着多级缓存,缓存级别越低,容量就越小,速度也越快.有了缓存,CPU就不需要每次都向主存读写数据,这提高了CPU ...

  7. CPU缓存一致性协议MESI - 笔记

    CPU缓存一致性协议MESI CPU高速缓存(Cache Memory) CPU为何要有高速缓存 CPU在摩尔定律的指导下以每18个月翻一番的速度在发展,然而内存和硬盘的发展速度远远不及CPU.这就造 ...

  8. CPU缓存一致性协议MESI

    吹剑出自<庄子>:"夫吹管也,犹有也:吹剑首者,而已矣." 吹剑只能发出小声,以示自谦."并发吹剑录",表达的是笔者斗胆讲一些并发编程有关的知识,由 ...

  9. 多核CPU缓存一致性协议MESI

    在计算机系统中,CPU高速缓存(英语:CPU Cache)是用于减少处理器访问内存所需平均时间的部件.在金字塔式存储体系中它位于自顶向下的第二层,仅次于CPU寄存器.其容量远小于内存,但速度却可以接近 ...

最新文章

  1. 能解决80%故障的排查思路
  2. Python open 读和写
  3. oracle imp使用
  4. 电气期刊论文实现:二进制遗传算法求解考虑输电损耗的负荷最优分配【经济调度,有代码】
  5. 先判断对象是否为NULL再进行操作
  6. 编写一个汇编语言程序,将字符串Hello World中的全部小写字母转换为大写字母,并存放回原地址处。
  7. 三年JAVA开发经验如何做到年薪35万
  8. java如何进行传感器数据传输_使用Wio Terminal通过HTTP请求获取并展示传感器实时数据...
  9. linux文件夹的执行权限不够怎么解决
  10. 如何在没有手机号的情况下注册Yahoo邮箱
  11. CleanMyMac最新4.10.5版本 智能一键扫描清理工具
  12. 樊登读书会2016年推荐书目汇总
  13. SIM卡PIN码管理
  14. 厦门大学计算机调剂要求,厦门大学考研调剂复试有什么要求
  15. Geometry点线面的初始化
  16. Machine Learning 机器学习
  17. 人工智能的八大业界领先的机器学习使用场景
  18. APP 信息管理平台——需求概述
  19. Linux 批量杀掉进程 kill -9
  20. nginx 配置ip_hash不会自动剔除宕机的服务器

热门文章

  1. window环境apache服务器在本地添加域名
  2. 【转】常见浏览器兼容性问题与解决方案css篇
  3. CLLocationManager 位置定位
  4. 改变ie浏览器的收藏夹位置
  5. 守护进程和inetd(转)
  6. SVG脚本编程简介(转)
  7. STL体系结构与内核分析-2-STL体系结构基础介绍(侯捷)--笔记
  8. Java Spring Boot 2.0 实战之制作Docker镜像并推送到Docker Hub和阿里云仓库
  9. Laravel的请求声明周期
  10. 递归函数、生成器、装饰器