CXL 预备知识:MESI 协议介绍

news2024/11/20 7:12:58


🔥点击查看精选 CXL 系列文章🔥
🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥


📢 声明

  • 🥭 作者主页:【MangoPapa的CSDN主页】。
  • ⚠️ 本文首发于CSDN,转载或引用请注明出处【https://mangopapa.blog.csdn.net/article/details/132179657】。
  • ⚠️ 本文目的为 个人学习记录知识分享。因个人能力受限,存在协议解读不正确的可能。若您参考本文进行产品设计或进行其他事项并造成了不良后果,本人不承担相关法律责任。
  • ⚠️ 若本文所采用图片或相关引用侵犯了您的合法权益,请联系我进行删除。
  • 😄 欢迎大家指出文章错误,欢迎同行与我交流 ~
  • 📧 邮箱:mangopapa@yeah.net
  • 💬 直达博主:loveic_lovelife 。(搜索或点击扫码)

文章目录

  • 1. MESI 简介
  • 2. MESI 状态介绍
  • 3. MESI 状态转移


1. MESI 简介

  目前 CPU 系统中多是基于 MESI 协议进行缓存一致性管理,CXL.cache 协议同样采用 MESI 协议来维护 Host 与 Device 的缓存一致性(Cache Coherence)。CXL 系统中,缓存一致性主要由 Host 来管理,从而减小 Device 端的设计复杂度。

  下表为 MESI 协议的简单展示。

在这里插入图片描述



2. MESI 状态介绍

  为了支持 MESI 协议,Cache 内每一条 Cacheline 内都有一个 2b Tag 来指示其 MESI 状态,该 Tag 位于 Cacheline 的地址或数据之后。MESI 各个子状态释义如下:

  • M (Modified),表示当前 Cacheline 的数据已被当前 CPU 修改。此时该 Cacheline 内数据为最新,但还没有同步到主存。处于 M 状态的 Cacheline 为当前 CPU 独享且数据为最新,当前 CPU 可以直接读,也可以直接写。其他 CPU Cache 中没有缓存该 Cacheline,若其他 CPU 要读写该 Cacheline,当前 CPU 需要将数据写回主存。
  • E (Exclusive),表示当前 Cacheline 的数据为当前 CPU 独享,数据尚未被修改。处于 E 状态时,该 CPU 可以直接操作 Cacheline,不用通知其他 CPU。
  • S (Shared),表示当前 Cacheline 的数据为共享状态且数据为最新,可能出现在多个 CPU 的 Cache 中。处于 S 状态的 Cacheline 数据为最新,若某 CPU 想要读该 Cacheline 数据,可以直接读;若要写该 Cacheline,需要先 Invalid 其他 CPU Cache 中的该 cacheline 数据。
  • I (Invalid),表示当前 Cacheline 无效,在当前 CPU Cache 中不存在。

  以下几篇博文讲 MESI 讲得蛮好:

  • 带你了解缓存一致性协议MESI - 知乎 (zhihu.com)
  • 并发吹剑录(一):CPU 缓存一致性协议 MESI - 知乎 (zhihu.com)


3. MESI 状态转移

  以 CPU 系统为例,当本地 CPU 或远端 CPU 对某地址的 Cacheline 进行读写操作时,该 Cacheline 状态会发生转移。MESI 状态转移图如下:
在这里插入图片描述

  上图中,

  • Local Read、Local Write,本地读写,是指本地 CPU 对本地 Cache 内相关地址 Cacheline 的读写;
  • Remote Read、Remote Write,远端读写,是指远端 CPU 发起读写操作,读写的地址在本地 Cache 内存在副本;
  • Silent Write 是指 Modified 状态下,当前 CPU 把其独享的 Cacheline 内的脏数据(修改后的数据)写入主存后退回到 Exclusive 状态。

  从读写操作角度来看

  • 本地读,本地 MES 保持不变,I->S/E;
  • 本地写,本地 M 不变,ESI->M;
  • 远端读,本地 ME 变为 S,SI 不变;
  • 远端写,本地 MES 会变为 I,I 不变。

  几个典型状态转移的解释

  • E->S,其他 CPU 要读该数据,读完后其他 CPU Cache 也有一份该 Cacheline 副本;
  • E->M,当前 CPU 写数据,修改了原来的数据;
  • S->M,当前 CPU 修改处于 S 状态的 Cacheline 数据,修改之前先将其他 CPU Cache 中该 cacheline 置为 I;当前 CPU 收到 Invalid Ack 后当前 Cacheline 才能转为 M;
  • S->I,收到了其他 CPU 发来的 Invalid 请求,其他 CPU 要写该 Cacheline;
  • M->S,其他 CPU 要读该数据。先同步到主存再转为 S;
  • M->I,其他 CPU 要写该 Cacheline,先同步到主存再转为 I;

  补充总结

  • Local Read/Write 对本地 M 状态的 Cacheline 状态没有影响;
  • Remote Read/Write 对本地 I 状态的 Cacheline 状态没有影响;
  • 对处于 I 状态的 Cacheline 发起写操作之前要先 Invalidate 其他 Cache 中的该地址数据,比如:Remote CPU 发起写操作时,无论本地相同地址的 Cacheline 处于哪种状态,都会回退到 I 状态。
  • I 状态时本地 CPU 发起 Read 操作,若外部 cache 内存在 S 状态的副本,则本地该 Cacheline 由 I 转为 S,若外部 Cache 不存在副本,则本地该 Cacheline 由 I 转为 E。

  以下几篇博文讲 MESI 状态转移讲得不错:

  • 并发基础理论:缓存可见性、MESI 协议、内存屏障、JMM - 知乎 (zhihu.com)
  • MESI(缓存一致性协议) - 猿起缘灭 - 博客园 (cnblogs.com)
  • 缓存一致性协议MESI 详解 - 掘金 (juejin.cn)
  • 并发研究之CPU 缓存一致性协议(MESI) - 枫飘雪落 - 博客园 (cnblogs.com)
  • 【cache 篇】MESI 协议 - 知乎 (zhihu.com)


— END —


🔥 精选往期 CXL 协议系列文章,请查看【 CXL 专栏】🔥

⬆️ 返回顶部 ⬆️

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/851621.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis—持久化

这里写目录标题 AOF三种写回策略写回策略的优缺点AOF 重写机制AOF后台重写AOF优缺点使用命令 RDBRDB 持久化的工作原理执行快照时,数据能被修改吗RDB 持久化的优点RDB 持久化的缺点 混合持久化大key对持久化的影响 AOF 保存写操作命令到日志的持久化方式&#xff0…

Codeforces-Round-891-Div-3

Codeforces Round 891 (Div. 3) A. Array Coloring 题目 给你一个由 n n n个整数组成的数组。您的任务是确定是否可以将其所有元素着色为两种颜色,使得两种颜色的元素之和具有相同的奇偶性,并且每种颜色至少有一个元素着色。 例如,如果数…

ArcGIS Pro应用—暨基础入门、制图、空间分析、影像分析、三维建模、空间统计分析与建模、python融合、案例应用全流程科研能力提升教程

详情点击链接:ArcGIS Pro应用—暨基础入门、制图、空间分析、影像分析、三维建模、空间统计分析与建模、python融合、案例应用全流程科研能力提升教程 第一:GIS及ArcGIS Pro 1.GIS基本原理及常用软件 2.ArcGIS Pro 安装与配置 3.ArcGIS Pro 3.0 的新…

Detecting Everything in the Open World: Towards Universal Object Detection

1. 论文简介 论文题目《Detecting Everything in the Open World: Towards Universal Object Detection》发表情况,CVPR2023[论文地址][https://arxiv.org/pdf/2303.11749.pdf][代码地址][https://github.com/zhenyuw16/UniDetector] 2.背景与摘要 本文旨在解决通…

面试热题(岛屿数量)

给你一个由 1(陆地)和 0(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边均…

关于三次握手和四次挥手,面试官到底想听到怎样的回答?

我一看到 TCP,啪就点进来了,很快啊。 TCP报文 一个完整的 TCP 报文头部共有 20 个字节,其中包括: 源端口号(16位)和目的端口号(16位):再加上 ip 首部的源 ip 地址和目…

canvas实现代码雨

学习抖音&#xff1a; 渡一前端必修课 效果图&#xff1a; 全部代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge">&…

实现 Notification 通知

如图这种效果 可以使用 Notification API来进行实现 代码如下 注意&#xff1a;一定要用服务端打开。不然不会弹出来。vscode可以安装 live Serve 插件服务端打开 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8">…

git-指令

1.名称和邮箱 git config --global user.name test git config --global user.email testatguigu.com 这里的--global表示全局配置&#xff0c;后续的所有文件操作都会使用该用户名称及邮箱。此时在操作系统的用户目录C:\Users\Administrator&#xff0c;会产生新的配置文件.gi…

【Python】基础:标准库常用模块

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍标准库常用模块。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&#…

什么是Milvus

原文出处&#xff1a;https://www.yii666.com/blog/393941.html 什么是Milvus Milvus 是一款云原生向量数据库&#xff0c;它具备高可用、高性能、易拓展的特点&#xff0c;用于海量向量数据的实时召回。 Milvus 基于 FAISS、Annoy、HNSW 等向量搜索库构建&#xff0c;核心是…

开发工具Eclipse的使用

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Eclipse使用的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.Eclipse是什么 二.使用Eclipse的…

OLED透明屏选购指南:性能、品牌与预算的平衡

引言&#xff1a;OLED透明屏作为一种创新的显示技术&#xff0c;正在迅速发展并广泛应用于各个领域。 然而&#xff0c;面对市场上琳琅满目的OLED透明屏产品&#xff0c;如何选择适合自己需求的高品质产品成为了采购者们的重要任务。 对此&#xff0c;尼伽将为您提供一份OLED…

webshell链接工具-Behinder(冰蝎)

“冰蝎”动态二进制加密网站管理客户端 项目地址&#xff1a; https://github.com/rebeyond/Behinder

大模型“瘦身”进手机 下一个iPhone时刻将至?

一股“端侧大模型”浪潮正在涌来。华为、高通等芯片巨头正探索将AI大模型植入端侧&#xff0c;让手机实现新一代物种进化。 相比ChatGPT、Midjourney等AI应用依赖云端服务器提供服务&#xff0c;端侧大模型主打在本地实现智能化。它的优势在于能够更好地保护隐私&#xff0c;同…

以太网UDP协议(十一)

目录 一、端口号 二、UDP 一、端口号 端口号&#xff0c;用来识别同一台计算机中进行通信的不同应用程序&#xff0c;也别成为程序地址。 备注&#xff1a;端口号由其使用的传输层协议决定。因此&#xff0c;不同的传输协议可以使用相同的端口号。即TCP和UDP可以同时使用相同…

php实现登录的例子

界面&#xff1a; 登录界面login.html代码&#xff1a; <!DOCUMENT html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"…

css的transform样式计算-第一节

本文作者为 360 奇舞团前端开发工程师 引言 在使用 css 样式进行样式的缩放、旋转等设置时&#xff0c;思考了一下它的较浅层的原理&#xff0c;恩&#xff0c;这个阶段都 是一些初高的数学计算&#xff0c;从新看这里的时候顺便捡了捡初高中的数学&#xff0c;比如三角函数之类…

重生之我要学C++第七天(匿名对象、内部类)

构造函数的隐式类型转化 1.单参数构造函数隐式类型转换 来看下面的代码 #include<iostream> using namespace std; class A { public:A(int x){_a x;} private:int _a; }; int main() {A a 3;return 0; } 此处这句代码 A a 3; 对于这里&#xff0c;编译完全正确&…

【Java从0到1学习】07 Java异常

尽管人人希望自己身体健康&#xff0c;处理的事情都能顺利进行&#xff0c;但在实际生活中总会遇到各种状况&#xff0c;比如感冒发烧&#xff0c;工作时电脑蓝屏、死机等。同样&#xff0c;在程序运行的过程中&#xff0c;也会发生各种非正常状况&#xff0c;比如程序运行时磁…