当前位置: 首页 > article >正文

ACE协议学习1

在多核系统或复杂SoC(System on Chip)中,不同处理器核心或IP(Intellectual Property)模块之间需要保持数据的一致性。常用的是ACE协议or CHI。  先对ACE协议进行学习

ACE协议(Advanced Microcontroller Bus Architecture Coherency Extension)是一种高级的缓存一致性协议,它允许系统中的主组件(如处理器或其他设备)判断缓存行是否是某个特定内存位置的唯一副本,或者是否可能存在其他副本。根据这些信息,主组件可以相应地采取不同的操作来维护数据的一致性。

①检查缓存行的唯一性:当主组件想要修改一个缓存行时,ACE协议首先通过监听机制来检查该缓存行是否是系统中的唯一副本。主组件的监听过滤器会与其他缓存进行通信,以确定缓存行是唯一的还是共享的。
②修改唯一缓存行:如果确定缓存行是唯一的(Unique状态,包括UniqueClean和UniqueDirty),主组件可以直接修改缓存行的值,而无需通知系统中的其他主组件。这是因为没有其他副本需要更新或失效。
③修改共享缓存行:如果缓存行可能也存在于另一个缓存中(Shared状态,包括SharedClean和SharedDirty),主组件必须启动一个适当的事务来通知其他缓存。这通常涉及到发送一个缓存一致性请求到其他缓存,要求它们更新或失效对应的缓存行,以确保系统中所有缓存的数据保持一致。
通过这种方式,ACE协议确保了在多个主组件访问共享数据时,数据的一致性和正确性得到维护。这对于多核处理器系统、SoC(System on Chip)或其他需要紧密协作的多主设备环境尤为重要。

1. cacheline状态

valid: 该cacheline在cache中存在

invalid:该cacheline在cache中不存在,对该cacheline的访问需要去主存中或者其他cache中

unique:该cacheline只在这一个cache中存在,因为core可以随意对它进行操作而无需担心一致性问题(因为在其他cache中就不存在)

shared:该cacheline存在于一个或多个cache中,当cacheline处于shared状态下时,core对它进行修改时需要确保其他cache中状态得到适当的更新,以维护数据的一致性。

clean:表示缓存中的数据与主内存中的数据是一致的。缓存不承担更新主内存的责任。在这种情况下,如果主组件读取缓存行,它可以直接使用缓存中的数据,而不需要从主内存中重新获取。(这个说法不太严谨,clean不一定代表缓存中的数据与主内存一致,比如shared clean,只是不需要承担更新主存的责任而已~)

dirty:表示缓存中的数据已经被修改,与主内存中的数据不一致。拥有脏缓存行的主组件必须确保最终将更新后的数据写回到主内存中,以保持数据的一致性。

当一个core想要写入一个cacheline时,它首先需要检查该cacheline的状态。如果是unique dirty的cachelie,那么可以直接进行写操作。但如果是shared dirty的cacheline,core则需要通过发送一致性请求来通知其他cache,确保它们能够更新或invalid对应的缓存行。这样的机制有助于避免数据冲突,并确保所有处理器都能访问到最新和一致的数据。

2. cacheline状态转换规则

①获取新副本时必须通知其他cache

当一个cache获取一个cacheline的新副本时,其他拥有该cacheline的cache必须被通知,即使这些cache当前可能将该cacheline作为唯一状态持有,它们也必须被通知将其更改为共享状态!!

②丢弃副本时无需通知其他cache

当一个cache准备丢弃一个cacheline时,不需要通知其他也拥有相同cacheline的cache,所以一个是shared状态的cacheline可能实际上只被一个cache所拥有!!

③相对于主内存更新

相对于主内存更新的cacheline必须处于dirty状态,需要最终将更改写回主内存

④多个缓存中的更新缓存行

如果一个相对于主内存已经被更新的缓存行存在于多个缓存中,那么它必须只在其中一个缓存中处于脏状态。这意味着虽然多个缓存可能拥有该缓存行的副本,但只有一个缓存负责维护最新的数据,并确保最终与主内存同步。

3. 通道信号增加:
ACE协议在现有的AXI4通道的基础上进行了扩展,并定义了专门的ACE通道以及确认信号,以支持复杂的缓存一致性操作。以下是ACE协议中定义的通道和信号的概述:

ACE协议在现有的AXI4通道上增加了一些新的信号,以支持缓存一致性操作。这些信号包括:

读取地址通道(Read Address Channel):

ARDOMAIN[1:0]:由主设备提供,用于指示读取事务的共享属性。
ARSNOOP[3:0]:由主设备提供,用于指定读取事务的监听类型。
ARBAR[1:0]:由主设备提供,用于指示读取事务是否需要遵守内存屏障(memory barrier)


写入地址通道(Write Address Channel):

AWDOMAIN[1:0]:由主设备提供,用于指示写入事务的共享属性。
AWSNOOP[2:0]:由主设备提供,用于指定写入事务的监听类型。
AWBAR[1:0]:由主设备提供,用于指示写入事务是否需要遵守内存屏障(memory barrier)。
AWUNIQUE:此信号仅由支持WriteEvict事务的组件所需。WriteEvict事务用于从缓存中逐出数据,而无需写回主内存。

4. ACE特定通道
ACE协议定义的这三个额外通道是为了增强缓存一致性管理和优化多处理器系统中的数据交互。下面是对这三个通道的详细解释:

监听地址通道(AC channel):它提供了snoop transactions的地址和相关的控制信息。
通过这个通道,缓存主设备可以接收来自系统总线或其他缓存的监听请求,并根据请求中的地址信息确定是否拥有对应的缓存行。

监听响应通道(CR channel):它提供了对snoop transaction的响应。

监听数据通道(CD channel):这是一个可选的输出通道,用于从主设备传递监听数据。
当发生读或清理监听事务时,如果被监听的主设备拥有请求的数据副本,那么这个通道就会被用来返回这些数据。

5.确认信号(Acknowledge signaling)
ACE协议使用确认信号来表示一个事务已经被成功接收和处理。这些信号包括:

读确认信号(Read Acknowledge Signal) - RACK:

当主设备完成一次读事务时,它会发出RACK信号。这个信号表明读操作已经成功完成,并且数据已经从缓存或其他存储介质中读取出来,准备供请求者使用。RACK信号通常在最后一个数据拍(beat)之后发出,以指示整个读操作的结束。


写确认信号(Write Acknowledge Signal) - WACK:

在完成写事务时,主设备会发出WACK信号。这个信号表明写入操作已经成功完成,并且数据已经被写入到指定的缓存行或存储位置中。与RACK类似,WACK信号也通常在最后一个数据拍之后发出,确认写操作的完成。


http://www.kler.cn/a/578864.html

相关文章:

  • 【python爬虫】酷狗音乐爬取
  • JavaWeb后端基础(7)AOP
  • 用K8S部署Milvus服务
  • 2025-3-9 leetcode刷题情况(贪心算法--序列问题)
  • 【QT5 Widgets示例】记事本:(一)项目创建
  • 基于PyTorch的深度学习3——非标量反向传播
  • Linux下的shell指令(二)
  • 计算机三级网络技术知识点汇总【7】
  • 打破界限!家电行业3D数字化营销,线上线下无缝对接
  • 【计算机网络】确认家庭网络是千兆/百兆带宽并排查问题
  • 深度解析:视频软编码与硬编码的优劣对比
  • 第十五届蓝桥杯省赛电子类单片机学习过程记录(客观题)
  • 旋转位置编码 (2)
  • 利用PHP爬虫根据关键词获取17网(17zwd)商品列表:实战指南
  • ABeam 德硕 | 中国汽车市场(1)——正在推进电动化的中国汽车市场
  • Android View设置圆角方式大全
  • LDR6500:革新手机OTG充电体验的关键芯片
  • MySQL快速使用Windows压缩包创建测试数据库
  • 基于javaweb的SpringBoot+MyBatis自习室座位管理系统设计和实现(源码+文档+部署讲解)
  • C#编译自动增加文件的版本号