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

CPU 缓存一致性:MESI

时间:2023-06-14 10:35:54浏览次数:45  
标签:状态 缓存 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/17479461.html

相关文章

  • virtualBox 报VT-x is disabled in the BIOS for both all CPU modes (VERR_VMX_MSR_A
    背景:主机是ASUS主板操作系统是deepin20.0系统,需要安装win10,下载virtualbox和win10镜像iso,virtualbox设置完后,启动win10,virtualbox报错VT-xisdisabledintheBIOSforbothallCPUmodes(VERR_VMX_MSR_ALL_VMX_DI的错误.原因:主机没有开启cpu虚拟化技术支持解决:   ......
  • 在上一操作期间遇到问题:Debug|AnyCPU 配置中 TargetFrameworkMoniker和NugetTargetMon
    在上一操作期间遇到问题:Debug|AnyCPU配置中TargetFrameworkMoniker和NugetTargetMoniker属性的值均为空场景使用VS打开之前的项目,报错:在上一操作期间遇到问题:Debug|AnyCPU配置中TargetFrameworkMoniker和NugetTargetMoniker属性的值均为空新建项目后,选择该项目未项......
  • CPU 缓存一致性:MESI
    概述MESI(也称伊利诺斯协议)是一种广泛使用的支持write-back策略的缓存一致性协议。MESI状态我们假设CPU中共有$k$个核;CPU中每个cacheline使用$4$种状态进行标记:状态介绍所有核中该状态的个数MODIFIED实际上是exclusivedirty,说明该核的缓存数据被修改......
  • 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......