【CHI】CHI协议,transaction事务汇总

news2024/12/24 20:20:40

前言

        CHI协议最难的是什么,就是那一堆各种各样的事务,你不知道什么场景应该使用什么合适的事务,收到X事务又该回复什么事务。相当于CHI给你制定了很多种(尽可能覆盖完全)场景及事务,你需要去了解,去认可,然后遵循,这就是协议。

        所以,我们在这里对事务做个汇总,便于查看。

注:

  1. 部分事务分为ptl/full ,这里不做区分。
  2. 事务名基本可以“望文生义”,也就是我们代码所推荐的“命名即注释”。
  3. 部分事务的行为并不完全确定,个人推测。
  4. 针对request type,response type的待补充。
  5. 若有遗漏/错误,欢迎补充/指正。
  6. 更多内容,参见《AMBA®5 CHI Architecture Specification》。

一、概述

CHI协议中将请求事务分了几种大类,如下所示:

CHI事务

Read

allocate

读回来的数据可以被分配到cacheline中

non-allocate

Dataless

-

无数据传输的事务

Write

Immediate

Non-CopyBack Write

将数据从RN传输到HN,而无需最初获得数据的一致性所有权。也用于将数据从HN传输到SN

copyback

将一致性数据从cache移动到下一级cache或memory

Combined Write

-

写事务与cache维护的结合

atomic

-

原子:不可分割,一气呵成的完成;

原子事务将原子操作以及执行原子操作所需的数据值从系统中的一个代理传递到另一个代理

Others

DVM

虚拟内存系统的维护

prefetch

预取:推测性地从主存中获取数据

Snoop

-

对RN-F上缓存的数据进行操作

后文将具体描述各个事务。

二、事务详细描述

2.1 Read transaction

Read事务具有以下共同特征:

  1. 数据必须包含在对请求者的完成响应中,但MakeReadUnique除外,数据响应是可选的,可以在HNF处根据SF判断自己的cacheline是否还在,如果还在的话就不需要返回一个copy。
  2. 返回的数据响应中的数据可以来自HNF、RNF、SNF。
  3. 在Allocating Read事务中,接收到的数据,如果进行缓存,则必须满足系统一致性。
  4. 在Non-allocating Read事务中,即ReadNoSnp和ReadOnce*中,接收到的数据一般不会被缓存。如果被缓存,数据也不会加入到系统一致性。
  5. 读请求可能会导致请求者处的cacheline状态更改。具体状态变化后面再讨论。
  6. 读请求可能导致系统中其他RNF的cacheline状态更改。

2.1.1 non-allocate read transaction

ReadNoSnp

        RN对Non-snoopable地址区域的读请求。或者,从HN到任何地址区域,以获得一个被寻址数据的副本。

ReadNoSnpSep

        HN到SN的读请求,只返回数据响应。

ReadOnce

        对snoopable地址区域的读请求,以获得一致性数据的snapshot。

        CPU只是读取一次数据临时用一下,无需保存到本地的cache中。

ReadOnceCleanInvalid

        ReadOnce + CleanInvalid

        CleanInvalid:将所有的cacheline无效掉,状态变为invalid,如果cacheline是dirty,则需要将dirty数据写回内存。

ReadOnceMakeInvalid

        ReadOnce + MakeInvalid

        MakeInvalid:将所有的cacheline无效掉,状态变为invalid,如果cacheline是dirty,直接丢弃。

2.1.2 allocate read transaction

ReadClean

        到snoopable地址区域的读请求,以获得cacheline的干净副本。如果请求者正在将该行分配给不支持dirty cacheline的缓存,例如指令缓存,则可以使用此方法。数据必须仅在UC或SC中提供给请求者。

ReadNotSharedDirty

        到snoopable地址区域的读请求,执行从cacheline的load操作。数据只能以UC、UD或SC状态返回给请求者。不允许使用SD。

ReadShared

        相比于ReadNotSharedDirty,支持SD。

ReadUnique

        到snoopable地址区域的读请求,执行从cacheline的load操作。数据必须仅在UC或UD状态下提供给请求者。

        获取数据以及unique权限。

ReadPreferUnique

        访问snoopable地址,获取唯一副本:最好是unique,但是shared也行。

MakeReadUnique

        访问snoopable地址,获取唯一副本。典型的用法是,请求者拥有cacheline,并希望获得写cache line的权限。

        注:因为MRU可以保证返回一份数据,所以即使请求者在收到使cacheline无效掉的 Invalidating snoop,也不需要再次发起一个读请求以获取数据。

2.2 Dataless transaction

Dataless事务具有以下共同特征:

  1. 数据不能包含在完成响应中。
  2. 该请求可能导致系统中其他代理之间的数据移动。
  3. 该请求可能导致请求者的缓存状态更改。
  4. 该请求可能导致系统中其他请求节点的缓存状态更改。

CleanUnique

        到snoopable地址区域的请求,以将请求者处的cache line状态更改为“唯一”,以便对该cache line执行写操作。

        典型的用法是,请求者拥有cache line的共享副本,并希望获得cache line的写权限。

        dirty cacheline必须写回内存。

MakeUnique

        同CU,但是dirty cacheline直接无效掉。

Evict

        用于指示该RNF不再缓存这个干净的缓存行。

        CPU通知HNF,某条cacheline已经被“逐出”了,本地没有了。

cache stash :一种投机行为,通过在其未来的使用点附近分配一个cacheline来提高系统性能,因为可以减少使用数据时的内存访问延迟。

StashOnceUnique,StashOnceSepUnique

        到snoopable地址区域的请求,以尝试将被寻址的cacheline移动到目标缓存,以使目标能够存储该行。

        换句话说,如果你知道CPU将要修改某条cacheline数据,在unique的数据准备好后,你(RN)就可以用此请求通知该CPU去取数,并且获取unique权限。

StashOnceShared,StashOnceSepShared

        同上,只是不需要unique权限。

CleanShared,CleanSharedPersist,CleanSharedPersistSep

        cache维护,将所有的dirty数据写回主存或PoP,保证所有的cacheline都是non-dirty的。

        PoP:Point of Persistence,系统中用于持久性存储的特定位置或机制。它表示数据在系统中的存储状态,以确保数据在断电或重启后仍然可用。通常是将易失性存储(如cache)复制到非易失性存储(如硬盘)。

CleanInvalid

        将所有cache line都无效掉,dirty数据写回主存。

CleanInvalidPoPA 

        CleanInvalidPoPA确保所有在PoPA之前的cacheline都被无效掉了。这使得对一个物理地址空间(PAS)中的位置的写入对其他物理地址空间可见。

        PoPA :Point of Persistence of allocation

MakeInvalid

        将所有cache line都无效掉,dirty数据丢弃。

2.3 Write transaction

        写入事务将数据从请求者移动到完成者,这可能是下一级缓存、内存或外围设备。根据事务类型,正在传输的数据可以是一致性的或非一致性的。

2.3.1 Immediate transactions

WriteNoSnp

         RNF写non-snoopable地址空间,或者HNF(system level cache)写数据到SN(主存)。

WriteUnique

        RNF写snoopable地址空间,当RN处的cacheline是I态,将full cache line数据写入下一级缓存或内存。

WriteZero

        WriteNoSnpZero,WriteUniqueZero,因为是写0,那么就不需要再次发起数据传输,完成者处直接将数据更新为0即可。

WriteUnique(Full/Ptl)Stash

        当请求者处的缓存行无效时,将完整的缓存行数据写入下一级缓存或内存。还包括对stash目标节点的请求,以获取被寻址的缓存行。

2.3.2 CopyBack transactions

WriteBack(Full/Ptl)

        将dirty数据的完整缓存行写回下一级缓存或内存。

WriteCleanFull

        将dirty数据的完整缓存行写回下一级缓存或内存。并把本地cacheline状态改为Clean。

WriteEvictFull

        将UC状态的完整缓存行写回下一级缓存或内存。并把本地cacheline状态改为Invalid。

WriteEvictOrEvict

        把UC/SC的cacheline刷到下一级cache中。

        这个请求类型是将WriteEvictFull和Evict合并到一个请求中。这允许HN确定它是否发送数据。

2.4 Combined Write requests

        当两者位于相同的地址时,此规范支持将写事务与缓存维护事务相结合。当CMO或PCMO事务到达系统中必须完成写操作才能启动CMO或PCMO事务的点时,将两个请求组合到相同地址的能力非常有用。使用单一的组合写事务避免了序列化写和CMO或PCMO事务的需要。这两个请求组合的点可以是RN或HN。

        下表列出了允许的write和CMO组合的事务:

更多内容,参见协议,这里不再展开。

2.5 Atomic transactions

        原子事务允许请求者向互联器(ICN)发出带有内存地址和要在内存地址上执行的操作的事务。这种事务类型使操作更接近数据所在位置,有助于以原子方式执行操作和更新内存位置,性能更加高效。

        如果没有原子事务,原子操作必须通过一系列内存访问来执行。这些访问访问依赖于exclusive独占的读和写。

通过使用原子事务:

  1. 可以为原子操作估算出更确定的延迟。
  2. 访问被修改的内存位置的阻塞期减少了,从而减少了其他代理对内存访问进程的影响。
  3. 在访问内存位置的不同请求者之间提供公平性变得更简单,因为原子操作对内存位置的访问是在序列化点(PoS)或一致性点(PoC)进行仲裁的。

AtomicStore  

        发送包含要执行的地址和原子操作的单个数据值。

        目标节点,即HNSN,对由原子事务中提供的数据指定的地址位置执行所需的操作。

        目标返回一个没有数据的完成响应。

        所支持的操作数为8个,具体操作见协议。

AtomicLoad

        同AtomicStore,但是完成响应会返回数据,该数据是这个地址上的原始数据。

AtomicSwap

        发送单个数据值,即交换值,以及要进行操作的位置的地址。

        目标HNSN将地址位置的值与事务中提供的数据值交换。

        目标将返回带有数据的完成响应。数据值是在被寻址位置上的原始值。

        所支持的操作数为1。

AtomicCompare

        发送两个数据值,即比较值和交换值,以及要进行操作的位置的地址。

        目标HN或SN将寻址位置的值与比较值进行比较:

                ——如果值匹配,目标会将交换值写入寻址位置。

                ——如果值不匹配,则目标不会将交换值写入寻址位置。

2.6 Others

2.6.1 DVM

        DVM事务用于虚拟内存系统的维护。

DVMOp 

        DVM操作。操作包括在分布式虚拟内存系统中的组件之间传递消息。

2.6.2 PreFetch

        预取目标事务用于推测地从主存中获取数据。

PreFetchTgt

        对snoopable地址的请求,从RN直接发送到SN,没有响应。

2.7 Snoop

        互连ICN生成一个Snoop请求,以响应来自请求节点的请求,或由于一个内部触发器,如cache或SF维护操作。除SnpDVMOp外,Snoop事务在RN-F上对已缓存的数据进行操作。SnpDVMOp事务在目标节点上执行DVM维护操作。

Home发送的snoop基于几个条件进行选择:

  1. 在请求者和监听节点上所要求的预期或允许的最终缓存状态。
  2. 避免丢失被监听缓存中的任何dirty tag。
  3. 如果存在*FWD,则用等效的Forwarding snoop替换 Non-forwarding。
  4. 一个Forwarding snoop只允许发送到一个RN-F。
  5. 一个stash snoop只允许发送到一个RN-F。
  6. 对于Non-snoopable地址区域,snoop是允许的,但不是必须的。

SnpOnceFwd, SnpOnce

        Snoop请求获取缓存行的最新副本,最好不更改在Snoopee上的缓存行状态。

        snoopee:接收snoop的RN-F。

SnpStashUnique

        Snoop请求,建议Snoopee获得处于唯一状态的缓存行的副本。

SnpStashShared

        Snoop请求,建议Snoopee获得处于共享状态的缓存行的副本。

SnpCleanFwd, SnpClean

        Snoop请求获取处于clean状态的缓存行的副本,同时将任何缓存副本保持在shared状态。不能使cacheline保持在unique状态。

SnpNotSharedDirtyFwd, SnpNotSharedDirty

        Snoop请求获取处于SC状态的缓存行的副本,同时将任何缓存副本保持在shared状态。不能使cacheline保持在unique状态。

SnpSharedFwd, SnpShared 

        Snoop请求获取处于S状态的缓存行的副本,同时将任何缓存副本保持在S状态。不能使cacheline保持在unique状态。

SnpUniqueFwd, SnpUnique 

        Snoop请求获取处于U状态的缓存行的副本,同时使任何缓存的副本无效。必须将cacheline更改为无效I状态。

SnpPreferUniqueFwd, SnpPreferUnique 

Snoop请求获取处于U状态的缓存行的副本,同时使任何缓存副本无效:

  1. HNF用于ReadPreferUnique的响应。
  2. snoopee的行为取决于它是否执行一个独占序列。

SnpUniqueStash

Snoop请求使Snoopee上的缓存副本无效,并建议Snoopee以唯一状态获得缓存行的副本:

  1. 允许Snoop响应包含DataPull。
  2. Snoop响应中的DataPull请求被视为ReadUnique。

SnpCleanShared 

        Snoop请求移除Snoopee上cacheline的任何脏副本。不能使cacheline保持为dirty状态。

SnpCleanInvalid

        Snoop请求无效Snoopee上的缓存行并获得任何脏副本。即使没有相应的请求,也可以由互连ICN生成。必须将cacheline更改为无效状态。

SnpMakeInvalid 

Snoop请求无效化Snoopee上的缓存行并丢弃任何脏副本:

  1. 不使用Snoop响应返回数据,脏数据将被丢弃。
  2. 必须将cacheline更改为无效状态。

SnpMakeInvalidStash

Snoop请求使缓存行的副本无效,并建议Snoopee获得处于唯一状态的缓存行的副本:

  1. Snoopee不能返回具有Snoop响应的数据,必须丢弃脏数据。
  2. 允许Snoop响应包含一个DataPull
  3. Snoop响应中的DataPull请求被视为ReadUnique

SnpQuery 

SnpQuery探测在请求节点处的缓存行的状态:

  1. HNF可以发送SnpQuery snoop,无需收到来自请求者任何相应的请求。
  2. snoop响应必须包含目标snoopee的缓存行的精确状态。
  3. Snoopee不能返回带有数据的Snoop响应。
  4. SnpQuery snoop不能更改Snoopee处的缓存行的状态。

SnpDVMOp

在互连ICN处生成,由DVMOp请求发起:

  1. 单个DVMOp请求生成两个snoop请求。
  2. 两个Snoop请求返回一个Snoop响应。

三、汇总

亿图地址:(主页资源,免费获取)

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

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

相关文章

英语——分享篇——每日200词——2401-2600

2401——moisture——[mɔɪstʃə(r)]——n.潮气,湿气,水分——moisture——moist潮湿的(熟词)ur你的(编码your)e鹅(编码)——潮湿的地方你的鹅一身潮气——Moisture in the atmosphere condensed into dew during the night.——大气中的水分在夜间凝结…

二阶系统时域响应

二阶系统微分方程 二阶系统传递函数 二阶系统单位阶跃响应 过阻尼系统 临界阻尼系统 欠阻尼系统 无阻尼系统 二阶系统阶跃响应仿真 在Matlab中进行仿真,设置不同阻尼比2、1、0.5和0,可以得到结论: 阻尼比越小,系统响应速度越快&…

YOLOV8改进:RefConv(即插即用!重参数化重聚焦卷积替代常规卷积,无额外推理成本下涨点明显!)

1.该文章属于YOLOV5/YOLOV7/YOLOV8改进专栏,包含大量的改进方式,主要以2023年的最新文章和2022年的文章提出改进方式。 2.提供更加详细的改进方法,如将注意力机制添加到网络的不同位置,便于做实验,也可以当做论文的创新点。 3.涨点效果:RefConv,实现有效涨点! 论文地址…

【项目设计】网络对战五子棋(上)

想回家过年… 文章目录 一、项目前置知识1. websocketpp库1.1 http1.0/1.1和websocket协议1.2 websocketpp库接口的前置认识1.3 搭建一个http/websocket服务器 2. jsoncpp库3. mysqlclient库 二、 项目设计1. 项目模块划分2. 实用工具类模块2.1 日志宏封装2.2 mysql_util2.3 j…

蓝桥杯每日一题2023.10.21

后缀表达式 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 30分解法&#xff1a;要求出最大的结果就需要加的数越大&#xff0c;减的数越小&#xff0c;以此为思路简单列举即可 #include<bits/stdc.h> using namespace std; typedef long long ll; const int N 2e5 10…

物联网知识复习

物联网的内涵和体系结构 物联网的基本内涵 物联网的基本内涵在于物联&#xff0c;物物相连或者物和人相连的互联网。 也就是说&#xff0c;它是要由物主动发起的&#xff0c;物物互联的互联网。 它的第一层意思是说物和物相连&#xff1b;第二层意思是说物和人相连。 物联网的…

Gradient conjugate priors and multi-layer neural networks

动机 先验参数 m , α , β , v m,\alpha,\beta,v m,α,β,v和随机变量 τ \tau τ KL散度的形式是&#xff1a; Dynamics of m , α , β , v m,\alpha,\beta,v m,α,β,v Dynamics of m , β , v m,\beta,v m,β,v for a fixed α \alpha α 绿色轨迹连接初始点和目标点…

【linux】Linux 查看内存使用情况的几种方法汇总

文章目录 GUI 查看命令获取命令 free命令 vmstat命令 top命令 htop Linux 查看内存使用情况的几种方法包括使用 free 命令、top 命令、htop 命令、vmstat 命令和/proc/meminfo 文件。这些方法可以帮助用户了解系统内存的使用情况&#xff0c;包括总内存、已用内存、空闲内存、缓…

MapperStruct实现类为空

​ 问题描述&#xff1a; MapperStruct生成的实现了为空 按照在MapperStruct官网Installation – MapStruct中的方法配置后&#xff0c;生成的实现了是空的&#xff0c;如下&#xff1a; Overridepublic DeployHistory toEntity(DeployHistoryDto arg0) {if ( arg0 null ) …

经典题型---旋转数组

经典题型—旋转数组 文章目录 经典题型---旋转数组一、题目二、代码实现 一、题目 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步…

EPLAN_010#STEP格式_箱柜模型的定义、拼柜

一、导入 首先创建一个宏项目——在布局空间中导航器新建一个布局空间 菜单栏——布局空间——导入(3D图形&#xff09;——导入下载下来的STEP 如果导入进来的箱柜是这种模样的&#xff0c;表示可以使用。如果左侧只显示一个逻辑组件&#xff0c;则无法使用。&#xff08;如果…

webgl计算包围盒大小

使用three.js&#xff1b; 代码&#xff1b; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>第一个three.js 示例</title><style>body {margin: 0;overflow: hidden;}</style><…

canvas绘制动态视频并且在视频上加上自定义logo

实现的效果&#xff1a;可以在画布上播放动态视频&#xff0c;并且加上自定义的图片logo放在视频的右下角 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthd…

Linux---(三)基本指令大全

前提引入&#xff1a;历史上先出现的键盘还是鼠标&#xff1f; 答案&#xff1a;键盘 ✨所以刚开始的时候绝对没有图形化界面&#xff0c;因此操作系统刚开始兴起的时候绝对没有图形化界面&#xff0c;因为当时没有鼠标。 ✨因为没有图形化界面&#xff0c;只有键盘&#xff0c…

【912.排序数组】

目录 一、题目描述二、算法原理2.1快速排序2.2归并排序 三、代码实现3.1快排代码实现3.2归并代码实现 一、题目描述 二、算法原理 2.1快速排序 2.2归并排序 三、代码实现 3.1快排代码实现 class Solution { public:int getRandom(int left,int right,vector<int>&…

CoDeSys系列-2、CoDeSys安装及Windows下创建项目测试

CoDeSys系列-2、CoDeSys安装及Windows下创建项目测试 文章目录 CoDeSys系列-2、CoDeSys安装及Windows下创建项目测试一、前言二、下载及安装三、Windows下软PLC项目创建及运行测试1、创建HMI工程1.1、新建标准工程&#xff1a;1.2、添加可视化对象&#xff1a;1.3、拖动添加拨码…

31二叉树-递归遍历二叉树

目录 LeetCode之路——145. 二叉树的后序遍历 分析 LeetCode之路——94. 二叉树的中序遍历 分析 LeetCode之路——145. 二叉树的后序遍历 给你一棵二叉树的根节点 root &#xff0c;返回其节点值的 后序遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出…

【Java 进阶篇】深入理解 Bootstrap 导航条与分页条

Bootstrap 是一个强大的前端框架&#xff0c;为网页和应用程序开发提供了丰富的组件和工具。其中&#xff0c;导航条和分页条是两个常用的组件&#xff0c;用于创建网站的导航和分页功能。本篇博客将深入探讨 Bootstrap 导航条和分页条的使用&#xff0c;适用于那些希望提升网页…

Mathematics-Vocabulary·数学专业英语词汇

点击查看: Mathematics-Vocabulary数学专业英语词汇点击查看: Mathematics-Vocabulary-Offline数学专业英语词汇离线版本 Chinese-English translation英译汉The study of mathematics in English requires understanding the subject-specific vocabulary and terminology. Ma…

Golang数组:全面指南与实际示例

揭示Golang数组的威力&#xff1a;从基础到高级技巧 Golang数组是数据存储的基本构建块&#xff0c;为开发人员提供了多种可能性。在这篇正式的博客文章中&#xff0c;我们将探讨Golang数组&#xff0c;从基础知识到高级技巧。通过实际示例和正式的语气&#xff0c;我们将揭示…