首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏立权的博客

    MESI 与 StoreBuffer 相互独立的猜想

    CPU 3 在寄存器中修改 A 中内容,并且写入写缓存区StoreBuffer,假设修改是 ++A(就是A现在等于 A +1,图里放不下,简写成++A)

    66210发布于 2021-03-02
  • 来自专栏【云原生 • Prometheus】

    【Java并发编程】- 03 MESI、内存屏障

    MESI协议 为了提升CPU性能CPU厂商引入CPU Cache概念,但是会带来一个问题:缓存一致性。L1、L2都位于CPU核内部,CPU可能存在多个核,它们之间缓存可能就会存在一致性问题。 有几种解决方案,其中比较通用的各种厂商通常都会支持的一种方案就是MESI协议,该协议就是用来解决CPU Cache之间缓存共享数据的一致性。 MESI是由四个单词首字母简写来的,这四个单词是用来描述cache line在CPU Cache中的四种不同状态: 修改态(Modified):此cache line已被当前CPU修改过,内容和主存不一致 store-buffer 上面分析了如何通过MESI协议解决CPU Cache的一致性问题,但是却存在性能问题。 如何去解决MESI带来的CPU性能问题呢?这时候store-buffer就出场了。

    1.1K32编辑于 2023-03-22
  • 来自专栏小赵的Java学习

    缓存一致性协议——MESI

    缓存锁引入了缓存一致性协议来保证,有MSI,MESI.MOSI等等! CPU为何要有高速缓存 CPU中内置了少量的高速缓存以解决I\O速度和CPU运算速度之间的不匹配问题。 带有高速缓存的CPU执行计算的流程: 程序以及数据被加载到主内存 指令和数据被加载到CPU的高速缓存 CPU执行指令,把结果写到高速缓存 高速缓存中的数据写回主内存 CPU缓存一致性协议MESI MESI 每个Cache line有4个状态,它们分别是: 协议动态演示地址 超级好用 链接: MESI动态地址 具体的细节动态图里有详细体现,比我在这哔哔哔半天有用的多 总结Volatile作用 1

    57520编辑于 2022-12-02
  • MESI 缓存一致性协议

    解决办法:MESI 缓存一致性协议。核心思想:通过降低锁的粒度,减少使用总线锁的频率,从而达到性能优化。2. 原理MESI 协议维护一个有限状态机,对每个 CPU 拷贝的每个缓存行都赋予一个状态属性;当感知到对某个缓存行的读写事件发生时,根据该缓存行的状态,对其进行一致性处理。 缓存行状态MESI 协议对每个缓存行赋予一个状态属性,MESI 协议就是由这四种状态的首字母来命名的:M:Modified,修改E:Exclusive,独占S:Shared,共享I:Invalid,失效由于只有 “脏的” 与 “干净的” 只是为了便于理解而划分的状态,能与 MESI 四个状态相对应,不会消耗 bit 去记录。 性能优化MESI 协议的最大性能开销源于写入前的 RFO 操作,该操作负责获取独占式缓存(仅在命中 Shared 或 Invalid 时触发)。

    74810编辑于 2025-06-17
  • 来自专栏JVMGC

    CPU缓存一致性协议MESI

    CPU 缓存一致性协议 MESI ================ CPU 高速缓存(Cache Memory) ---------------------- CPU 为何要有高速缓存 CPU 在摩尔定律的指导下以每 多级缓存结构 [007S8ZIlgy1gj6nx5wl9rj30im0jgq4r.jpg] 多核 CPU 多级缓存一致性协议 MESI --------------------- 多核 CPU 的情况下有多个一级缓存 这里就引出了一个一致性的协议 MESIMESI 协议缓存状态 MESI 是指 4 中状态的首字母。 [007S8ZIlgy1gj6nxzimg6j30o80o2gow.jpg] MESI 优化和他们引入的问题 --------------- 缓存的一致性消息传递是要时间的,这就使其切换时会产生延迟。

    1.2K00发布于 2021-01-02
  • 来自专栏龙首琴剑庐

    MESI协议:Cache 一致性协议

    MESI 协议 基于写失效(Write Invalidate) 如果某个 CPU 核心 写入一个 Cache Line,则会广播一个失效请求告诉所有其他的 CPU 核心。 参考:https://zh.wikipedia.org/wiki/MESI协议 by 斯武丶风晴 https://my.oschina.net/langxSpirit

    1.6K40发布于 2019-12-16
  • 来自专栏对线JAVA面试

    面试系列之-MSI协议MESI协议(JAVA基础)

    MESI协议 缓存行的相容关系 目前主流的缓存一致性协议为MESI写入失效协议,而MESI是MSI协议的扩展。 在MESI协议中,每个缓存行(Cache Line)有4种状态,即M、E、S和I(全名是Modified、Exclusive、Shared和Invalid) 1.M:被修改(Modified) 该缓存行的数据只在本 MESI状态转换 (1)初始阶段:开始时,缓存行没有加载任何数据,所以它处于“I状态”。

    1.4K20编辑于 2023-09-11
  • 来自专栏johnhuster

    缓存一致性协议(MESI

    笔者在学习过程中发现了一个不错的网站,模拟了MESI协议流程,现分享下: https://www.scss.tcd.ie/Jeremy.Jones/vivio/caches/MESI.htm 运行效果图如下所示 被volatile修饰的变量在执行时会有lock指令,该指令借助MESI协议保证数据写回到主内存,同时使得其他CPU核缓存的工作缓存变量失效,这样其他线程(不同CPU核心)再次操作该数据时,从缓存中取数据时发现该副本失效而重新从主内存加载该变量到工作内存中

    61910编辑于 2022-03-29
  • 来自专栏陈琛的Redis文章

    MESI协议,JMM,线程常见方法等

    缓存一致性——MESI协议 CPU多级缓存官方概念 CPU在摩尔定律的指导下以每18个月翻一番的速度在发展,然而内存和硬盘的发展速度远远不及CPU,所以才引入了缓存的概念。 解决方式二——MESI协议(重点) 针对上面缓存数据不一致的情况,提出了MESI协议用以保证多个CPU缓存中共享数据的一致性,定义了缓存行Cache Line四个状态,分表是M(Modified),E( I(Invalid无效):这行数据无效 MESI状态之间的迁移: ? 这图一看是很懵逼的,咱慢慢来看哈,慢慢体会这些变化哈。 上面说的MESI协议是在总线那边实践的,线程A,B可以同时获取主内存a的值,a进行自增操作之后在进行操作6write写入的时候,会经过总线。 此篇是并发系列的基础,主要聊了硬件的MESI协议,原子的八种操作,线程和进程的关系,线程的一些基础操作,JMM的基础等。如果有什么错误,或者不对的地方,欢迎指正。

    82111发布于 2020-06-12
  • 来自专栏后台公论

    小议CPU缓存一致性协议MESI

    比如我在腾讯云买的最低配云主机…… MESI 并发场景下(比如多线程)如果操作相同变量,如何保证每个核中缓存的变量是正确的值,这涉及到一些”缓存一致性“的协议。 其中应用最广的就是MESI协议(当然这并不是唯一的缓存一致性协议)。 状态介绍 在缓存行的元信息中有一个Flag字段,它会表示4种状态,分为对应如下所说的M、E、S、I状态。 L3 Cache在MESI中的角色 L3 缓存是所有CPU共享的一个缓存。纵观刚才描述的MESI,好像涉及的都是CPU内的缓存更新,不涉及L3缓存,那么L3缓存在MESI中扮演什么角色呢? 其实在常见的MESI的状态流程描述中(我上文也是),所有提到”内存“的地方都是值得商榷的。比如我上一节举的例子中,CPU0中某缓存行是I,CPU1 中是M。 个人猜测是如果描述MESI状态流转的时候引入L3缓存,会造成描述会极其复杂。所以一般的描述都好似有意地忽略了L3缓存。

    70010编辑于 2021-12-08
  • 来自专栏技术随笔心得

    CPU缓存一致性协议MESI

    多级缓存结构 多核CPU多级缓存一致性协议MESI 多核CPU的情况下有多个一级缓存,如何保证缓存内部数据的一致,不让系统数据混乱。这里就引出了一个一致性的协议MESIMESI协议缓存状态 MESI 是指4中状态的首字母。每个Cache line有4个状态,可用2个bit表示,它们分别是: 缓存行(Cache line):缓存存储数据的单元。 MESI状态转换 理解该图的前置说明: 1.触发事件 触发事件 描述 本地读取(Local read) 本地cache读取本地cache数据 本地写入(Local write) 本地cache写入本地 MESI优化和他们引入的问题 缓存的一致性消息传递是要时间的,这就使其切换时会产生延迟。

    54230编辑于 2023-06-13
  • 来自专栏java相关资料

    JUC并发编程之MESI缓存一致协议详解

    那么该文章就来用为简洁的话语来解释MESI协议。 为了保持数据的一致性,MESI将缓存条目的状态划分为Modified.Exclusive,Shared,Invalid MESI协议中一个缓存条目的状态Flag值分为以下四种 1. 如下图,就是MESI的概要图。 ? 通过上面的理论,还不好解释MESI协议在CPU多核中到底是如何运用的,我会在下面通过几张图片的案例,来详细剖析它协议的转换过程。 以上是针对正常的情况,MESI协议能够正常的对缓存行进行状态标识转换,那么我们来聊一聊针对非正常情况,MESI协议是否还适用呢? 协议无法同时对线程内的两个缓存行进行lock加锁,这时MESI协议失效,缓存行锁失效,从而晋升到bus总线锁。

    97460发布于 2021-05-18
  • 来自专栏盛开在夏天的太阳

    3 CPU缓存一致性协议MESi

    现在使用最普遍的是mesi协议, 三. mesi协议的工作原理 四个字母分别代表在缓存里不同的四个状态: M:已修改 E:独占 S:共享 I:已失效 MESI 是4种状态的首字母。 --------------------------------------以下是课件内容---------------------------------------------- 1.1 MESI协议缓存状态 MESI 是4种状态的首字母。 1.2 MESI状态转换 ? TulingVolatileLong { public volatile long value = 0L; //public long p1, p2, p3, p4, p5, p6; } MESI

    1.1K20发布于 2020-09-27
  • 来自专栏技术趋势

    缓存一致性协议-MESI是什么?

    执行完指令,结果同步到高速缓存(L1、L2、L3) 4、最后将高速缓存中的数据同步到主内存中(Main Memory) 所以在多CPU的情况下加载回主内存或缓存需要保持缓存一致性要么加锁,要么用于本文的MESI 缓存一致性协议-MESI是什么? MESI是Modify(修改)、Exclusive(独享、互斥)、Shared(共享)、Invalid(无效)首字母组成的。 类型是8字节) class Test { volatile long a; long p1, p2, p3, p4, p5, p6, p7; volatile long b; } MESI 以上是触发的MESI状态图,分别为本地读取、本地写入、远端读取、远端写入,如下表描述。 参考资料: https://baike.baidu.com/item/MESI%E5%8D%8F%E8%AE%AE/22742331 https://note.youdao.com/ynoteshare

    2.2K20编辑于 2022-12-01
  • 来自专栏Java架构之路

    Java CAS MESI 缓存一致性协议【最权威】

    本节对应的中文视频教程请关注公众号 fencai-edu MESI是缓存一致性协议,分别代表四种不同的状态。 参考资料 https://en.wikipedia.org/wiki/MESI_protocol Biased Locking in HotSpot [并发大神的博客] https://blogs.oracle.com

    80930发布于 2019-11-12
  • 来自专栏高并发

    Memory Consistency and Cache Coherence—— cache一致性协议(MESI

    读写cache需要cache一致性协议保证数据正确,MESI协议规定了一块内存的五种状态:Modified(M,修改),Exclusive(E,独占),Share(S,共享),Invalid(I,无效) 在MESI协议下,读取内存块如果其它cpu都是I状态,则当前cpu该块会变成E状态,然后写入的时候直接写就可以,不需要发送使该块失效的信号。 MESI协议和MSI协议最大不同就是其他状态到S or E状态,还有E到M状态,其他和MSI协议没啥区别。 MESI转换图如下: 和MSI的主要不同就是E和其它状态的转换,其中E到M直接在cpu cache内部转换不需要通过总线通知其它cpu。 MESI协议在多核cpu下保证了cache数据的一致性,使每个cpu在读取数据时都是读到的最新的数据,也遵守了SWMR(单写多读)策略,写的时候只能有一个cpu被总线仲裁成功。

    1.3K10编辑于 2022-06-23
  • 来自专栏手写JVM专栏

    JMM与MESI到底有没有关系?

    这篇文章我会从这几个方面讲JMM,让大家获得对JMM正确的、深刻的认识: 1、市面上大家看到的资料是怎么介绍JMM的 2、我会结合一个Linux多线程程序给大家分析,JMM与MESI没有半毛钱关系 3、 MESI即CPU的缓存一致性协议。现在取而代之的是MOESI。不同架构的CPU还有可能用其他的协议。理解本篇文章,了解到这个程度就够了,不展开讲。感兴趣的小伙伴可以自行面向百度学习。 你现在百度搜JMM,展示的文章基本都是这个套路:CPU缓存架构、计算机的内存模型、MESI、volatile实时触发数据一致性……不知道这套思路的始祖是谁,把一个简单的JMM讲得复杂得不行,正常人根本就看不懂 我感觉那些把JMM与MESI扯在一起的所谓大神,对底层真的一无所知。你但凡写个操作系统级别的多线程程序一测,就知道MESI还需要通过应用程序来触发,那是多么滑稽的一件事情。 问个问题,看大家对本篇文章的内容理解得怎么样:那JMM与MESI可不可以有关系呢?大家留言回答吧。 题外话 子牙手写JVM小班四期招生即将结束。

    88150编辑于 2022-05-13
  • 来自专栏彭旭锐

    已经有 MESI 协议,为什么还需要 volatile 关键字?

    我们也讨论了 MESI 协议通过写传播和事务串行化实现缓存一致性。 MESI 协议的请求异步化,这其实是一种处理器级别的指令重排,会破坏了 CPU Cache 的一致性。 Cache 不一致问题 MESI 协议在线模拟 网站地址:https://www.scss.tcd.ie/Jeremy.Jones/VivioJS/caches/MESI.htm 现在,我们的问题是 :既然 CPU 已经实现了 MESI 协议,为什么 Java 语言层面还需要定义 volatile 关键字呢? 回答最初的问题 到这里,虽然我们的讨论还未结束,但已经足够回答标题的问题:“已经有 MESI 协议,为什么还需要 volatile 关键字?”

    1.7K73编辑于 2022-12-22
  • 来自专栏用户10025783的专栏

    吊打字节面试官,CPU缓存一致性协议MESI

    前言:今天,我们就深入聊聊关于CPU缓存一致性协议MESI的有关知识,希望能够为小伙伴们带来实质性的帮助。 多级缓存结构 多核CPU多级缓存一致性协议MESI 多核CPU的情况下有多个一级缓存,如何保证缓存内部数据的一致,不让系统数据混乱。这里就引出了一个一致性的协议MESIMESI协议缓存状态 MESI 是指4中状态的首字母。每个Cache line有4个状态,可用2个bit表示,它们分别是: 缓存行(Cache line):缓存存储数据的单元。 MESI状态转换 理解该图的前置说明: 1.触发事件 2.cache分类:前提:所有的cache共同缓存了主内存中的某一条数据。 本地cache:指当前cpu的cache。 MESI优化和他们引入的问题 缓存的一致性消息传递是要时间的,这就使其切换时会产生延迟。

    1.1K10编辑于 2022-09-24
  • 来自专栏一个会写诗的程序员的博客

    CAS指令与MESI缓存一致性协议、 “轻量级锁” 与原子操作CAS指令与MESI缓存一致性协议、 “轻量级锁” 与原子操作

    CAS指令与MESI缓存一致性协议、 “轻量级锁” 与原子操作 “最轻量级的锁”,通常也叫”原子操作”,之所以加引号是因为他们在汇编级别并不是原子操作,是用多条指令完成的,这些操作大多都是利用CPU 参考: Intel文档 http://faydoc.tripod.com/cpu/cmpxchg.htm MESI 缓存一致性协议 关于CAS指令最著名的传闻是CAS需要锁总线,因此CAS指令不但慢而且会严重影响系统并发度 目前的CPU一般都采用了很好的缓存一致性协议,在很多情况下能够防止锁总线的发生,这其中最著名的就是Intel CPU中使用的MESI缓存一致性协议。 先来说说缓存一致性问题。 但这 Stupid 的实现显然不会有好的性能,为解决这一问题,产生了很多维护缓存一致性的协议,MESI就是其中一种。 MESI协议的名称由来是指这一协议为缓存的每个数据单位(称为cache line,在Intel CPU上一般是64字节)维护两个状态位,使得每个数据单位可能处于M、E、S或I这四种状态之一。

    2.9K61发布于 2018-08-17
领券