cpu缓存一致性问题

一个服务器中有多个核,每个核中有多个cpu,每个cpu有多个线程。缓存最少分为3级,1级为线程缓存,2级为核缓存,3级为多个核共享缓存。

产生缓存一致性问题:cpu主缓存count=0,此时线程A需要对count+1,线程B需要count+1,但是线程A读取count=0,修改了count+1还没来得及提交,线程B读取的还是count=0,然后线程A,线程B都提交到cpu主缓存,此时count=1,产生错误,应该count=2

解决方式:
1.cpu主缓存加锁,产生问题效率变低,因为线程A使用count时,其他cpu线程都在等待
2.缓存一致性协议mesi:对单个缓存行进行加锁,不会影响cpu的其他线程

mesi协议

mesi协议:为了解决cpu缓存一致性问题

mesi协议的4种状态:m e s i
MESI是Midified(已修改),Exclusive(独占),Shared(共享),Invalidated(已失效)的缩写,对应Cache Line的四种状态。 多核CPU的cache和内存的构成可以简化为:每个CPU有自己的独有的cache,然后大家共享内存,当每个CPU从cache中读取数据时,如何保证所有cache和内存中数据的一致性,即使MESI协议要解决的问题。

mesi协议4种状态,及状态转换

状态解释:

【M已修改】: 即脏标记,表示当前cache line中的数据已经被修改,没有被写到内存中。
【i已失效】: 状态,表示这个cache line里的数据已经失效,是不可以读取的数据。
【E独占】和【S共享】:状态都表示这个cache line中的数据是干净的(即与内存中的数据是一致的,共享同时也表示与其他cpu cache中的数据是一致的)。

状态转换:

E独占:数据只在被一个cpu读取。
S共享:独占状态基础上,又有其他cpu读取这份数据到自己的缓存行。代表同一份数据在多个cpu的缓存行中
i已失效:当共享状态时,代表同一份数据在多个cpu的缓存行中,不能直接修改,而是要先向所有的其他 CPU 核心广播一个请求,要求先把其他核心的 Cache 中对应的 Cache Line 标记为【已失效】状态,然后再更新当前Cache 里面的数据(这时数据的状态就变为独占的)

模拟工具演示

https://www.scss.tcd.ie/Jeremy.Jones/VivioJS/caches/MESIHelp.htm

mesi--cpu内存一致性协议的更多相关文章

  1. C和C++中的volatile、内存屏障和CPU缓存一致性协议MESI

    目录 1. 前言2 2. 结论2 3. volatile应用场景3 4. 内存屏障(Memory Barrier)4 5. setjmp和longjmp4 1) 结果1(非优化编译:g++ -g -o ...

  2. 并发研究之CPU缓存一致性协议(MESI)

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

  3. 多线程之:MESI-CPU缓存一致性协议

    MESI(Modified Exclusive Shared Or Invalid)(也称为伊利诺斯协议,是因为该协议由伊利诺斯州立大学提出)是一种广泛使用的支持写回策略的缓存一致性协议,该协议被应用 ...

  4. CPU缓存一致性协议—MESI详解

    MESI(也称伊利诺斯协议)是一种广泛使用的支持写回策略的缓存一致性协议,该协议被应用在Intel奔腾系列的CPU中. MESI协议中的状态 CPU中每个缓存行使用的4种状态进行标记(使用额外的两位b ...

  5. MESI-CPU缓存一致性协议

    转http://blog.csdn.net/realxie/article/details/7317630 http://en.wikipedia.org/wiki/MESI_protocol MES ...

  6. 一篇文章让你明白CPU缓存一致性协议MESI

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

  7. CPU缓存一致性协议与java中的volatile关键字

    有关缓存一致性协议MESI自行百度. 提出问题:volatile在缓存一致性协议上又做了哪些事情?为啥它不保证原子性? 在缓存一致性协议下,CPU为了执行效率使用了写(存储)缓存和失效队列从而导致对用 ...

  8. 【并发编程】MESI--CPU缓存一致性协议

    原文:多线程之:MESI-CPU缓存一致性协议 概念 MESI(Modified Exclusive Shared Or Invalid)(也称为伊利诺斯协议,是因为该协议由伊利诺斯州立大学提出)是一 ...

  9. Java内存模型(二)volatile底层实现(CPU的缓存一致性协议MESI)

    CPU的缓存一致性协议MESI 在多核CPU中,内存中的数据会在多个核心中存在数据副本,某一个核心发生修改操作,就产生了数据不一致的问题,而一致性协议正是用于保证多个CPU cache之间缓存共享数据 ...

随机推荐

  1. Maven基础学习笔记

    Maven基础学习笔记 下载链接 官网:https://maven.apache.org/ 所有版本:https://archive.apache.org/dist/maven/maven-3/ 阿里 ...

  2. 华硕主板安装Ubuntu双系统无法启动解决办法

    问题描述: 在安装完Ubuntu后,开机后没有启动项可以选择,而是直接进入win10系统. 解决办法: 开机进入bios,选择 高级模式 (Advance model),进入 启动(boot)选项卡, ...

  3. Linux-交互式转化批处理工具expect

    expect 是由Don Libes基于 Tcl( Tool Command Language )语言开发的,主要应用于自动化交互式 操作的场景,借助 expect 处理交互的命令,可以将交互过程如: ...

  4. 重修 Slope Trick(看这篇绝对够!)

    Slope Trick 算法存在十余载了,但是我没有找到多少拍手叫好的讲解 blog,所以凭借本人粗拙的理解来写这篇文章. 本文除标明外所有图片均为本人手绘(若丑见谅),画图真的不容易啊 qwq(无耻 ...

  5. Windows IDEA Community 报错

    运行时报错 "CreateProcess error=206,文件名或扩展名太长" 解决方法:https://plugins.gradle.org/plugin/ua.eshepe ...

  6. vivo 万台规模 HDFS 集群升级 HDFS 3.x 实践

    vivo 互联网大数据团队-Lv Jia Hadoop 3.x的第一个稳定版本在2017年底就已经发布了,有很多重大的改进. 在HDFS方面,支持了Erasure Coding.More than 2 ...

  7. 11┃音视频直播系统之 WebRTC 进行文本聊天并实时传输文件

    一.RTCDataChannel WebRTC 不但可以让你进行音视频通话,而且还可以用它传输普通的二进制数据,比如说可以利用它实现文本聊天.文件的传输等 WebRTC 的数据通道(RTCDataCh ...

  8. unity---3D数学基础

    点乘 A·B 判断敌人在前方还是后方 调试画线 画线段 前两个参数 分别是 起点 终点 画射线 前两个参数 分别是 起点 方向 Debug.DrawLine(this.transform.positi ...

  9. 144_Power Pivot贷款之等额本息与等额本金

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 买房贷款的时候会遇到等额本息与等额本金的问题,今天做了一个两者对比,看看如何选择,来一张对比图. 等额本息的前期 ...

  10. 第6组 Alpha冲刺 (5/6)

    目录 1.1 基本情况 1.2 冲刺概况汇报 1.郝雷明 2. 方梓涵 3.董翔云 4.杜筱 5.詹鑫冰 6.黄少丹 7.曹兰英 8.鲍凌函 9.曾丽莉 10.吴沅静 1.3 冲刺成果展示 1.1 基 ...