首页 > 其他分享 >CPU 缓存一致性:MESI

CPU 缓存一致性:MESI

时间:2023-06-13 15:33:06浏览次数:34  
标签:状态 缓存 val cacheline MESI 切换 执行 CPU

概述

MESI(也称伊利诺斯协议)是一种广泛使用的支持 write-back 策略的缓存一致性协议。

MESI 状态

我们假设 CPU 中共有 $k$ 个核; CPU 中每个 cacheline 使用 $4$ 种状态进行标记:

状态 介绍 所有核中该状态的个数
MODIFIED 实际上是 exclusive dirty,说明该核的缓存数据被修改了,且并未写入到更低一层存储中;当某个核的缓存处于该状态时,其余核的对应 cacheline 均为 INVALID 1
EXCLUSIVE 实际上是 exclusive clean,说明该核的缓存刚从更低一层存储中读取到了最新的数据;当某个核的缓存处于该状态时,其余核的对应 cacheline 均为 INVALID 1
SHARED 实际上是 shared clean,说明多个核的缓存从更低一层存储中读到的数据都是最新的,处于该状态的核的数量一定 $\geq 2$,其余核的对应 cacheline 均为 INVALID $\geq 2$
INVALID 说明该核的 cacheline 无效

状态切换

我们以四个核为例,用四元组如 $(M, I, I, I)$ 表示四个核的 cacheline 状态,假设只操作第一个核的 cacheline:

执行读操作

  • $(M,I,I,I)$ 执行读,状态仍为 $(M, I, I, I)$;
  • $(E,I,I,I)$ 执行读,状态仍为 $(E, I, I, I)$;
  • $(S,S,I,I)$ 执行读,状态仍为 $(S, S, I, I)$;
  • $(I,M,I,I)$ 执行读,将第二个核的 cacheline 的数值 $val$ 写入内存,然后更新第一个核的 cacheline 的值为 $val$,状态切换为 $(S,S,I,I)$;
  • $(I,E,I,I)$ 执行读,更新第一个核的 cacheline 为第二个核的数值 $val$,状态切换为 $(S,S,I,I)$;
  • $(I,S,S,I)$ 执行读,更新第一个核的 cacheline 为第二个或第三个核的数值 $val$,状态切换为 $(S,S,S,I)$;
  • $(I,I,I,I)$ 执行读,从内存中读取对应的地址的数值 $*addr$ 到 cacheline,状态切换为 $(E, I, I, I)$;

执行写操作

  • $(M,I,I,I)$ 执行写,状态仍为 $(M, I, I, I)$;
  • $(E,I,I,I)$ 执行写,状态变为 $(M, I, I, I)$;
  • $(S,S,I,I)$ 执行写,将其他所有状态为 $S$ 的 cacheline 的状态全都设置为 $I$,状态变为 $(M, I, I, I)$;
  • $(I,M,I,I)$ 执行写,将第二个核的 cacheline 的数值 $val$ 写入内存(为了防止 ABA 问题),状态变为 $I$,然后更新第一个核的 cacheline 的值为 $val$,再更新值为待写入的值 $write_value$,状态切换为 $(M,I,I,I)$;
  • $(I,E,I,I)$ 执行写,更新第一个核的 cacheline 为第二个核的数值 $val$,将第二个核的状态设为 $I$,状态切换为 $(M,I,I,I)$;
  • $(M,S,S,I)$ 执行写,更新第一个核的 cacheline 为状态是 $S$ 的 cacheline 的数值 $val$,并将这些状态为 $S$ 的 cacheline 的状态设为 $I$,状态切换为 $(M,I,I,I)$;
  • $(I,I,I,I)$ 执行写,将 $write_val$ 写到 cacheline 中,状态切换为 $(E, I, I, I)$;

执行 evict 操作

标签:状态,缓存,val,cacheline,MESI,切换,执行,CPU
From: https://www.cnblogs.com/zwyyy456/p/17477648.html

相关文章

  • uniapp开发公众号H5时用户缓存无法清除问题
     业务场景:  此项目是一个vx公众号h5项目,每次更新版的时候用户端由于有缓存,每次都是使用滞后的版本解决方案:一、index.html文件如何保证不缓存,每次都使用服务器上最新的代码?此时需要一下标签:<metahttp-equiv="Cache-Control"content="no-cache,no-store,must-revali......
  • CPU结构整理(附Xmind整理)
    一、图二、下载地址(xmind、PDF)2、百度网盘地址链接:https://pan.baidu.com/s/1JxeRAGvtgaj5yTt6RfVy3g提取码:4dtq......
  • 浏览器缓存内幕与getLastModified方法
    源:评:[问题描述:] 1)userlogout之后,按回退按钮又可进行提交; IE缓存的问题。 登出系统之后,输入刚才的URL,依然能访问原来的页面(但是有任何操作就会返回到登陆的页面),这是IE缓存的问题,只要清除调IE的缓存就好。   清除IE缓存的方法有两种,一是在浏览器端控制,二是在服务器端返回Re......
  • 微软或在开发自己的 CPU、TikTok 发布电视版本、索尼撤下《赛博朋克2077》并为玩家退
    DecodetheWeek≠音视频技术周刊 A funkynewfont DesignedbyAlexanderWright incollaborationwith RodrigoFuenzalida.NewsBriefing1. 苹果在最新的科技博客中谈到如何更有效地设计AppClipURL。该公司还宣布,AppClipCodes(编码一个URL并可以合并一个NFC标......
  • STM32F429 Discovery开发板应用:使用FreeRTOS队列+DMA双缓存实现串口数据接收
     参考帖子:https://blog.csdn.net/freedompoi/article/details/122350866目前想要实现STM32F4自带的DMA双缓冲区,尝试过一版,结果不能预期,就使用了RxHalfCplt和RxCplt去实现DMA双缓冲区的效果。现在有时间了,又重新实现STM32F4自带的DMA双缓冲区,作为参考。 MCU:STM32F429ZIT6......
  • 缓存雪崩、缓存击穿、缓存穿透原因及解决办法
    缓存雪崩是指在缓存中的大量数据在同一个时刻全部过期,导致原本这些可以由缓存中间件处理的高并发请求,一下子全部打到数据库,导致数据库服务器崩溃的一种现象。那么出现缓存雪崩的原因可以有①:缓存中间件宕机。②:缓存中大部分key都设置了相同的时间,导致这些key在同一时间内全部失效......
  • linux服务器CPU飙高排查
    文章目录前言一、第一步top二、根据pid查找具体线程2.根据pid找到16进制3.根据进程和线程查找原因总结前言系统cpu飙高,尤其对于后端人员来说,其实应该学会排查,这样也算是综合能力的体现;那么当出现了cpu严重飙高的时候怎么排查呢?一、第一步top直接在问题服务器输入命令:to......
  • 给CPU进行压力测试
    教你怎么在Linux下给CPU一点压力原创 入门小站 入门小站 2023-06-0322:13 发表于湖北收录于合集#Linux804个入门小站分享运维技巧及10k+Stars的开源项目265篇原创内容公众号“【Linux250个常用命令速查手册】关注【入门小站】,后台回复「1001」......
  • 【操作系统】【硬件结构】CPU 缓存一致性
    1  前言我们看了存储器的层次结构,知道CPU中有多级缓存,有共享的也有私有的,那么不可避免的一个问题就是缓存的一致性,这节我们来看看哈。2  CPUCache的数据写入随着时间的推移,CPU和内存的访问性能相差越来越大,于是就在CPU内部嵌入了CPUCache(高速缓存),CPUCache离CPU......
  • 基于Go的缓存实现
    概念缓存是计算机科学中的一个重要概念。设想某个组件需要访问外部资源,它向外部源请求资源,接收并使用资源,这些步骤都需要花费时间。当组件再次需要资源时,可以再次请求资源,但这种方式从时间上考虑是比较低效的。相反,组件可以将请求结果保存在本地某处,然后再次使用,使用本地数据总是比......