CHI协议学习记录

RetToSrc

return to source的缩写,是Home Node在发送侦听请求时设置的一个属性,属于Snoop request的一个field。如果设置了RetToSrc, 就是告诉被侦听的节点:"如果你有数据,请不要把数据发给我,请直接把它发回给最初的请求者。"

ExpCompAck

它是一种由请求节点使用的机制,用于 明确地向系统确认,它已经安全地收到了一个完成响应,并且相关资源已经释放。

简单来说,它是在说:"我之前请求的那个事务,你(HN)已经告诉我完成了,我现在正式确认,我已经处理完毕,你可以彻底清理掉所有相关信息了。"


为什么需要 ExpCompAck?------ 解决一个关键问题

要理解 ExpCompAck,必须先理解它要解决的问题:HN 的资源管理困境。

在没有 ExpCompAck 的普通事务中:

  1. RN 发出请求,HN 为其分配资源(如缓冲区条目、跟踪记录)。

  2. HN 处理事务,并向 RN 发送 Comp 或 CompData。

  3. HN 在发送完 Comp 后,就立即释放其内部资源。

这看起来合理,但实际上存在一个风险:RN 可能由于各种原因(如缓冲区满、内部拥塞)未能成功处理这个 Comp 响应。如果 HN 已经释放了资源,当 RN 最终反应过来并试图重试或采取其他行动时,HN 可能已经"忘记"了这个事务,导致协议错误或死锁。

为了解决这个问题,CHI 引入了 持久性完成 的概念,而 ExpCompAck 就是其核心组成部分。


工作机制:持久性事务流程

ExpCompAck 通常与 Comp 响应中的 Persistent 属性配合工作。整个流程如下:

  1. 请求阶段:

    • RN 发起一个请求(例如 ReadNoSnp),并在请求包中设置 ExpCompAck 位。这等于告诉 HN:"这是一个需要显式确认的事务,在我明确确认之前,请你为我保留资源。"
  2. Home Node 处理:

    • HN 识别出 ExpCompAck 位。它为此事务分配资源,并 将其标记为"持久性"的,意味着该资源的释放将等待一个明确的信号。

    • HN 处理该请求,并准备发送完成响应。

  3. 完成响应阶段:

    • HN 向 RN 发送完成响应(Comp 或 CompData)。在这个响应包中,HN 会设置 Persistent 位 ,作为对 RN 初始 ExpCompAck 的回应,意思是:"好的,我知道你需要显式确认,这是我给你的完成信号,但我会把资源保持住,直到收到你的 ExpCompAck。"
  4. 请求者确认阶段:

    • RN 收到带 Persistent 位的完成响应。

    • RN 内部安全地处理了这个完成(例如,将数据交付给核心,释放内部的 TxnID 和 DBID)。

    • 一旦 RN 确定事务已完全处理完毕 ,它会向 HN 发送一个 ExpCompAck 事务 。这是一个独立的事务,其中包含原始事务的 TxnID 和 SrcID。

  5. Home Node 最终释放:

    • HN 收到 ExpCompAck。

    • HN 现在可以 安全地释放 所有为该事务分配的宝贵资源。

LikelyShared

请求节点在发起读请求时提供的一个属性。向接收者(通常是Home Node)表明,请求者预测所请求的数据很可能被系统中的多个代理所共享,即告诉HN:我需要读这个数据,但我猜测其他组件可能也会读它,所以在处理我的都请求时,可以做一些优化来方便后续的访问。HN可以不做任何处理,即忽略LikelyShared的提醒;如果不忽略,可以做一些优化处理

PrefetchTgtHint

请求节点发出transaction的一个field。允许一个请求节点向系统发出一个预期请求,并指定数据在返回后应该在哪个特定的缓存层次或位置。简单来讲,不仅仅是读取一个数据,而是:请把数据取回来,并直接放在我设置的这个位置。例如,CPU告诉HN将数据放在GPU中。

DEEP persistent

请求节点发出transaction的一个field。一个相对高级且专门针对 持久化内存(Persistent Memory, PM) 的特性。

DEEP persistent 的核心运作依赖于两个关键概念:

1. Persistent Point

这是一个由 请求者 发起的特殊事务。它不是一个数据事务,而是一个 屏障 或 标记。

  • 作用 :在事务流中创建一个"点"。请求者通过这个点要求:所有在此 Persistent Point 之前发出的、目标为 DEEP 持久化域的 写操作,都必须在该点被确认之前,完成持久化。

  • 类比:就像在快递分拣中心设置一个检查点,要求所有在这个检查点之前收到的包裹,必须全部装车发走后,才能确认这个检查点已完成。

2. Persistent Acknowledge

这是系统对 Persistent Point 的响应。

  • 作用 :当 Home Node 确保所有先前的写操作已经真正到达持久化介质(例如,已经刷新了内存控制器中的写持久队列并到达 PMEM)后,它会向请求者返回一个 CompAck 响应,作为对 Persist 事务的确认。

  • 意义 :一旦请求者收到这个 Persistent Acknowledge,软件就可以确信:所有在 Persist 点之前的写操作都已经安全了。如果此时发生断电,数据也不会丢失。

StashNID

Stash Node ID。Stash与 缓存预取 和 数据局部性 优化相关的独特且强大的功能。一个RN发出的读请求,可以设置StashNID和StashLPID(Stash Logical Processor Identifier)。HN除了将数据返回给RN外,还会发出一个SnpStash,将数据发送给StashNID+StashLPID

NS和NSE

Non-secure、Non-secure Extension,用来支持Trust-Zone

PBHA

Page-based Hardware Attribute,属于Data packet中一个field。它允许软件通过页表项中的特定比特位,向硬件传递微架构优化的提示 。简单来说,它让你可以在操作系统的内存管理层面,为不同的内存页"打上标签",然后硬件(如 CPU 缓存、互连网络)可以识别这些标签,并对这些页的访问采取不同的优化策略。

例如:PBHA = 2 :标记为 高优先级 数据。硬件可能会将其分配在靠近命中端的缓存位置,使其保留更长时间。

PBHA只是提示,而不强制实现。

FwdState

Forward State 是 Home Node 在其 目录 中为某个缓存行维护的一种特殊状态。当一条缓存线处于 Forward State 时,意味着 HN 知道系统中有一个或多个节点的缓存中持有该数据的有效副本,并且授权其中一个特定的节点作为"转发源",未来其他节点的读请求可以直接从这个"转发源"获取数据,而无需再访问主内存。

简单来说,HN 在此时扮演了一个"交通指挥员"的角色,它不再自己去内存取数据,而是告诉请求者:"数据不在我这儿,你去某某节点那里拿,它那儿有最新的副本。"

DBID

Data Buffer ID。CHI的数据和resp可能乱序返回,为了数据和resp的匹配,RN对发出的读请求分配一个RN内唯一的DBID,**后续返回给RN的数据,会贴上这个 DBID 标签(**包括数据和resp)。

RN 通过管理一个有限的 DBID 池,可以实施背压机制。如果 DBID 用尽,它将停止发出新的需要数据返回的请求,从而防止自身缓冲区溢出

PCrdReturn和PrefetchTgt不会返回retry的原因

PCrdReturn用来返回一个之前消耗的credit,不能retry,否则可能死锁;PrefecthTgt是提示性的,因此无需retry

RN-F & RN-I & RN-D

3类请求节点。区别在于是否参与数据的一致性维护;

RN-F完全参与数据一致性维护,比如CPU集群、GPU等;

RN-I是一个 I/O 一致性 的请求节点。它 不维护缓存一致性 ,但需要感知系统的一致性,依赖HN进行一致性管理;主要发起 ReadNoSnp 和 WriteNoSnp 等 不触发侦听 的请求。它不能发起 ReadUnique 这类会改变其他节点缓存状态的请求。RN-I不会接收或处理Snoop请求。比如网络控制器、存储控制器、USB/PCIe 控制器

RN-D 是一个 直接数据访问 的请求节点。这是三种类型中 最简单、能力最弱 的一种。RN-D 不能发起读操作 。它是一个纯粹的数据生产者。不处理任何Snoop请求。用于将数据直接写入内存或其他节点的缓存。例如DMA控制器、图像传感器接口等。

CompData

RN发出的读请求,如果HN本地cache有目标数据,则直接返回CompData(包含和response和read data)

RespSeqData & DataSeqResp

如果HN不能及时提供read data,可以先发送RespReqData,再发送DataSeqResp。RespReqData和DataSeqResp可由不同的组件发出,比如HN发出RespReqData,SN发出DataSeqResp。HN收到RespSeqData时,可提前发出CompAck,而不用等待DataSeqResp

相关推荐
想喝奶茶啾啾11 天前
AMBA CHI架构以及规范中使用的术语 翻译笔记(1)
笔记·arm·chi
cy4130266 个月前
CHI协议包类型
chi
比姚明高一截7 个月前
ARM CHI 全品类事务 终极汇总总表
chi
比姚明高一截7 个月前
CHI Read 事务全流程解析
chi
比姚明高一截7 个月前
CHI Write 事务全流程解析
chi
比姚明高一截7 个月前
第一部分:CHI协议基础与架构概览
chi
比姚明高一截7 个月前
第二部分:CHI协议核心机制详解
chi
元直数字电路验证10 个月前
CHI 协议导论与宏观架构
chi·ace·abma
比姚明高一截1 年前
ARM CMN-700 架构设计与实现指南
chi·arm cmn-700