首页 > 其他分享 >【CHI协议-1】CacheLine状态

【CHI协议-1】CacheLine状态

时间:2024-04-02 23:00:02浏览次数:12  
标签:协议 cache CHI 主存 更新 CacheLine dirty unique 数据

从这一章开始就和大家一起分享一下CHI协议中具体的一些事务以及场景。今天主要梳理一下Read事务,但是要讲清楚这些乱七八糟的事务,还需要了解其他很多知识点,不然就是云里雾里的,比如cacheline的状态啊,什么是snoop啊,以及一致性节点啊等等。但是这些太多了,如果先要把这些都讲清楚再讲协议,那估计得讲个好几章。所以我就不单独用章节来分享这些了,穿插着和大家分享一下,遇到了这些概念我们就大概描述一下,好伐啦!

  1. Cacheline States
    不过cacheline状态还是比较重要,贯穿了整个协议的所有事务,单独把这块来说说还是很有必要的。

其实也很简单啦,我们需要认识几个中学的英语单词,unique,shared,dirty,clean,这几个顾名思义,独有的,共享的,脏的,干净的,简单吧。OK,这几个就是cache的状态了。但是独有和共享好理解,那什么叫脏的和干净的数据呢。注意了,干净的就是指cache和memory的数据一致,不需要去更新主存,这时候我们就说cache里面的数据是干净的。那脏和干净是一对反义词,自然脏数据就是指cache和memory数据不一致,需要我们去更新主存,不过这里千万要注意,**dirty严格的定义是具有更新主存的责任。**仅仅数据不一致的话,不能说他是脏数据。什么意思呢,就是假如cache1和cache2数据都和主存数据不一致,这时候cache1给2说你去更新主存吧,我今天特别累不想去,那么更新的责任就给了2 ,所以cache2的数据就是dirty,而cache1不是。所以dirty一定是和主存数据不一致,但和主存数据不一致,不一定是dirty哦。(表达能力有限,不知道说清楚没~~)

不会以为到这里就结束了吧!想啥呢,CHI作为如此复杂的协议,这么几个cache状态完全不够用。因此接下来把这几个排列组合,就有了UC,SC,UD,SD,UCE,UDP,这才是CHI中事务流用到的几种cacheline状态。我们挨个来看:

UC和UD就是unique clean和unqiue dirty,这两个首先都是独占的状态,都有unique嘛,UC就是独占且和主存数据一致,所以如果cache拿到这个数据状态可以进行修改,记住只有unique态才可以修改数据,因为你修改了数据必然就和主存数据不一致了嘛,所以你得去更新主存,同时把其他的cahce中同地址的数据都无效掉,这时修改数据的cache也就变为UD态了。把UDP顺便也说了吧,这里的p指的是patial,也就是独占且部分数据为脏,部分数据需要去更新主存。注意这里的部分是相对一个完整的cahcheline来说的,因为我们更新主存必须是一个完整的缓存行去更新的(这个原因这里不多说了,和cache的底层结构有关,有空了聊聊这个,先记着就行了,总之这样设计是为了提高效率),因此部分脏数据更新主存时需要merge下级缓存的数据一起更新。

SC和SD就是shared clean和shared dirty,这个大家应该也能猜出来什么含义了吧,共享干净和共享的脏。这里的共享就是意思其他的cache里面也有这份数据,但注意哦,SC态可不一定就是共享且和主存的数据一致,他可能数据也被修改了,只是不需要他去更新主存而已(注意上文中说的clean和dirty的定义)。SD就不多说了,共享且脏,有更新主存的责任。

那还有一个状态UCE,这玩意儿是啥呢,unique clean empty,翻译完是不是也没懂,,,其实也好理解啦,首先unique就是独占呗,然后clean就是不需要更新主存,那empty呢,空的?没有数据?没错就是这个意思。拿到一个uc态的没有数据的cahceline,猜猜要干嘛,是的就是往里写数据,还记得我前面说写数据必须得是u态吧。那UC态不也可以吗,为啥UCE呢,设计这个状态的意义呢?效率呗,那些架构师搞cache不也是为了效率嘛。想象一下,假设我现在就是要往a地址写数据,只是想写,不关心他以前的数据,那我就申请我要一个UCE态的cacheline,这样我就不需要读旧的数据了,是不是节省了带宽也提高了效率啊。

本来说把cache状态说完再说read事务呢,结果没收住说了这么多,时间太晚了,我得去睡觉了哈哈。下次再说read事务吧。(顺便把标题read事务改了吧,)

标签:协议,cache,CHI,主存,更新,CacheLine,dirty,unique,数据
From: https://blog.csdn.net/weixin_53617570/article/details/137292772

相关文章

  • IP(Internet Protocol)是一种网络协议,用于在网络中发送和接收数据包
    IP(InternetProtocol)是一种网络协议,用于在网络中发送和接收数据包。它是一个无连接的、不可靠的数据报协议,负责将数据从源主机传输到目标主机。IP协议的主要功能包括寻址、路由和分段。寻址:IP协议为每个连接到网络的设备分配一个唯一的IP地址,这个地址用于在网络中识别设备......
  • 如何获取onvif协议的端口号?
    ONVIF协议本身并没有规定一个固定的端口号。这是因为不同的设备和应用场景可能会有不同的网络配置和需求。因此,ONVIF协议允许设备厂商根据实际情况自行设定端口号。这意味着,在使用ONVIF协议时,我们需要查看设备的文档或配置界面,以确定具体的端口号。一、常见ONVIF端口号虽然ONVI......
  • C#对接部标JT808协议实现北斗定位设备数据接收服务端
    一、前言介绍开发一套能够支撑几万台北斗定位设备数据接收的服务端,用于接收北斗定位器定位数据的平台。项目基于windows平台,C#语言开发框架NetFramework4.8,TCP主要基于SuperSocket用来构建一个服务器端Socket程序,JT808.ProtocolJT/T808协议快速开发包,开发工具采用了微软的Vis......
  • HTTP协议格式详解之首行信息解析
    HTTP(HypertextTransferProtocol)是一种用于传输超文本文档的应用层协议,通常用于在客户端和服务器之间传输网页、图片、视频等资源。它是建立在TCP/IP协议栈之上的应用层协议,使用标准的TCP连接来传输数据。HTTP的主要特点包括简单、灵活、可扩展性强等。在OSI(OpenSystemsInt......
  • Redis开源协议调整,我们怎么办?
    本文分享自华为云社区《Redis开源协议调整,我们怎么办?》,作者:华为云PaaS服务小智。2024年3月20日,Redis官方宣布,从Redis7.4版本开始,Redis将获得源可用许可证( RSALv2 )和服务器端公共许可证( SSPLv1 )的双重许可,时间点恰逢刚刚完成最新一轮融资,宣布的时机耐人寻味。 ......
  • 【LEACH协议】具有动态头、功率控制、数据聚合的LEACH协议用于高效的WSN传感器网络附m
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • 【LEACH协议】具有动态头、功率控制、数据聚合的LEACH协议用于高效的WSN传感器网络附m
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • NAT(网络地址转换协议)
    NAT工作原理和功能原理:通过地址转换实现私有网络和公有网络之间的相互访问。其工作过程如下图所示,当数据包从内网发往外网时,NAT会将数据包的源IP由私网地址转换成公网地址;当响应的数据包要从公网返回到内网时,NAT会将数据包的目的IP由公网地址转换成私网地址。功能:1.宽带分......
  • nodejs做中间层_Nodejs 之 RPC 协议简介
    背景随着Nodejs的兴起,越来越多的Web服务中间层被搭建起来。如Node服务端渲染,BFF(BackendForFrontend))层,而RPC是远端过程调用,经常用于BFF层。最近,我打算写一个中间层,用Nodejs调用Go服务,除了可以简单用http调用之外,发现还有基于RPC的调用就研究了一下。RPC简......
  • 报错:react.development.js:1130 Uncaught Error: Objects are not valid as a React
      原因:是因为getControl我用了异步async的方法。而调用的时候,没有加上await导致的。 解决办法:加上await就可以了 ......