缓存一致性(MESI)
所以就出现了缓存一致性协议。最出名的就是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)相关推荐
- 2021-04-04 CPU缓存一致性 MESI协议
一 CPU以及缓存和高速缓存结构 1.1 CPU结构 我们知道CPU主要功能,一是控制,一是运算.主要包括寄存器.控制单元.运算单元和中断系统,主要架构如下: 控制单元:主要负责分析和解释指令 算数逻 ...
- CPU 缓存一致性 MESI 协议
为什么需要缓存一致 目前主流电脑的 CPU 都是多核心的,多核心的有点就是在不能提升 CPU 主频后,通过增加核心来提升 CPU 吞吐量.每个核心都有自己的 L1 Cache 和 L2 Cache,只 ...
- 缓存一致性MESI与内存屏障
文章目录 1. 高速缓存 1.1. 什么是高速缓存Cache 1.2. 缓存行 2. 伪共享问题 2.1. 什么是伪共享 2.2. 解决伪共享 3. 总线锁 4. 缓存锁 5. 缓存一致性协议 5.1 ...
- 【并发编程】CPU多级缓存与缓存一致性
CPU多级缓存与缓存一致性 定义 cpu缓存是位于CPU与内存之间的临时存储器,它的容量比内存小的多,但是交换速度却比内存要快得多 为什么需要CPU cache? cpu的频率太快了,快到主存跟不上, ...
- 两个例子详解并发编程的可见性问题和有序性问题,通过volatile保证可见性和有序性以及volatile的底层原理——缓存一致性协议MESI和内存屏障禁止指令重排
1. 并发编程的可见性问题 2. 并发编程的有序性问题 3. 使用volatile关键字解决可见性问题 4. 可见性问题的本质--缓存不一致 因为cpu执行速度很快,但是内存执行速度相对于CPU很慢, ...
- 同时存多个变量缓存 微信小程序_CPU缓存一致性协议MESI,memory barrier和java volatile...
MESI协议 MESI协议是一个被广泛使用的CPU缓存一致性协议.我们都知道在CPU中存在着多级缓存,缓存级别越低,容量就越小,速度也越快.有了缓存,CPU就不需要每次都向主存读写数据,这提高了CPU ...
- CPU缓存一致性协议MESI - 笔记
CPU缓存一致性协议MESI CPU高速缓存(Cache Memory) CPU为何要有高速缓存 CPU在摩尔定律的指导下以每18个月翻一番的速度在发展,然而内存和硬盘的发展速度远远不及CPU.这就造 ...
- CPU缓存一致性协议MESI
吹剑出自<庄子>:"夫吹管也,犹有也:吹剑首者,而已矣." 吹剑只能发出小声,以示自谦."并发吹剑录",表达的是笔者斗胆讲一些并发编程有关的知识,由 ...
- 多核CPU缓存一致性协议MESI
在计算机系统中,CPU高速缓存(英语:CPU Cache)是用于减少处理器访问内存所需平均时间的部件.在金字塔式存储体系中它位于自顶向下的第二层,仅次于CPU寄存器.其容量远小于内存,但速度却可以接近 ...
最新文章
- 能解决80%故障的排查思路
- Python open 读和写
- oracle imp使用
- 电气期刊论文实现:二进制遗传算法求解考虑输电损耗的负荷最优分配【经济调度,有代码】
- 先判断对象是否为NULL再进行操作
- 编写一个汇编语言程序,将字符串Hello World中的全部小写字母转换为大写字母,并存放回原地址处。
- 三年JAVA开发经验如何做到年薪35万
- java如何进行传感器数据传输_使用Wio Terminal通过HTTP请求获取并展示传感器实时数据...
- linux文件夹的执行权限不够怎么解决
- 如何在没有手机号的情况下注册Yahoo邮箱
- CleanMyMac最新4.10.5版本 智能一键扫描清理工具
- 樊登读书会2016年推荐书目汇总
- SIM卡PIN码管理
- 厦门大学计算机调剂要求,厦门大学考研调剂复试有什么要求
- Geometry点线面的初始化
- Machine Learning 机器学习
- 人工智能的八大业界领先的机器学习使用场景
- APP 信息管理平台——需求概述
- Linux 批量杀掉进程 kill -9
- nginx 配置ip_hash不会自动剔除宕机的服务器