AMBA CHI Architecture Spec 解读 — B1 Introduction
AMBA CHI Architecture Spec 解读 — B1 Introduction
AMBA CHI(Coherent Hub Interface)是 ARM 推出的高性能片上互联协议,从 AMBA ACE 演进而来,面向 16+ 核的缓存一致性多核 SoC 设计。本文基于 IHI 0050 H(2025年9月发布的最新版),解读第一章 B1 Introduction。
一、CHI 是什么?
CHI 的全称是 Coherent Hub Interface。它定义了 SoC 中各个组件(CPU、GPU、DMA、内存控制器)之间如何通过互联网络进行通信,核心能力是:
- 硬件缓存一致性 — 多核共享内存时,硬件自动保证各核看到的数据一致
- 高带宽低延迟 — 基于 Flit(flow control unit)的包交换,而非 ACE 的通道握手
- 灵活的拓扑 — 支持 Mesh、Ring、Crossbar 等多种互联拓扑
- 事务化接口 — 所有通信以”事务”为单位,包括读写、原子操作、缓存注入等
对比 ACE/AXI 的主要改进:
| 维度 | ACE/AXI | CHI |
|---|---|---|
| 传输粒度 | 基于通道握手信号 | 基于 Flit 包 |
| 一致性模型 | MESI(侦听总线) | MOESI(目录式,Home 节点管理) |
| 拓扑扩展性 | ~4-8 核 | 16+ 核至上百核 |
| 数据通路 | 读地址/读数据/写地址/写数据 | REQ/RSP/SNP/DAT 四条独立通道 |
| 延迟隐藏 | 有限 | DMT/DCT/DWT 直接数据转发 |
二、CHI 的组件模型
CHI 协议中定义了四类节点:
2.1 Request Node (RN)
请求节点——发起总线事务的组件。
- RN-F:带缓存的一致请求节点(如 CPU 核心)。维护缓存状态,参与 snoop 协议。
- RN-D:支持 DVM 操作的请求节点(如 GPU)。
- RN-I:无缓存的请求节点(如 DMA)。只发非 snoopable 事务。
2.2 Home Node (HN)
归属节点——管理一致性域的节点。每个内存地址都有对应的 Home,负责:
- 维护一致性目录
- 协调 snoop 请求
- 解决 race/hazard 条件
- 决定响应状态
在实践中 HN 通常集成在互联网络(ICN)内部。
2.3 Subordinate Node (SN)
从属节点——响应请求的节点(通常是内存控制器)。
- SN-F:支持全功能的内存节点
- SN-I:仅支持非一致性访问的从属节点
2.4 Interconnect (ICN)
互联网络——连接所有节点的通信基础设施。实现 SAM(系统地址映射)、路由、credit 控制等。
三、CHI 的架构层次
CHI 协议分为四个逻辑层:
1 | ┌──────────────────────────────────────────────┐ |
四、事务分类
CHI 定义了一套丰富的事务类型:
| 大类 | 事务类型 | 说明 |
|---|---|---|
| Read | ReadNoSnp, ReadOnce, ReadClean, ReadShared, ReadUnique, ReadPreferUnique, ReadNotSharedDirty | 各种读语义 |
| Write | WriteNoSnp, WriteUnique, WriteBack, WriteClean, WriteEvict | 写回/写直达/逐出 |
| Atomic | AtomicStore, AtomicLoad, AtomicSwap, AtomicCompare | 64种原子操作 |
| Dataless | CleanInvalid, CleanShared, CleanUnique, MakeInvalid, MakeUnique, Evict | 缓存维护 |
| Stash | StashOnceShared, StashOnceUnique, WriteUniqueStash | 缓存注入 |
| Prefetch | PrefetchTgt | 预取 |
| DVM | DVMOp | TLB/BP/Cache 无效化 |
每种事务在 C4 Transaction Summaries 中有完整的字段映射表。
五、缓存状态模型
CHI 的缓存状态与经典的 MESI 不同,更加精细:
| 状态 | 全称 | 含义 |
|---|---|---|
| UC | Unique Clean | 唯一副本,干净(与内存一致) |
| UD | Unique Dirty | 唯一副本,脏(与内存不一致) |
| SC | Shared Clean | 共享副本,干净 |
| SD | Shared Dirty | 共享副本,脏(”与内存不一致”) |
| I | Invalid | 无效 |
特别注意:CHI 没有 MESI 中的 E(Exclusive)状态,也没有 O(Owned)状态。SD 承担了类似 O 的角色但语义不同。CHI 的 Unique 意味着”系统中只有这一个副本”,区别于 MESI 的 Exclusive(意味着没被共享但可以自由写入)。
关键规则:
- UC/UD 的拥有者可以不经 snoop 直接写入
- SC/SD 的拥有者在写入前必须通过事务获取 Unique 权限
- SD 是一个转瞬即逝的状态——脏共享数据通常很快会被写回或变为 Unique
六、与 ARMv9 体系结构的关系
CHI 不是孤立存在的。CHI H 版深度集成了 ARMv9.x/RME 的特性:
| ARM 特性 | CHI 支持 | 所在章节 |
|---|---|---|
| RME (Realm Management Extension) | PAS 扩展、MECID、设备分配 | B10 |
| MTE (Memory Tagging) | TagOp、Tag 一致性、Tag 错误响应 | B12 |
| MPAM | QoS 优先级、资源分区 | B11.4 |
| SME/SVE | 通过 DVM 和原子操作间接支持 | B8/B2 |
| SPE (Statistical Profiling) | DataSource 字段提供采样信息 | B11.2 |
| 颗粒数据隔离 (GDI) | MECID 不匹配解析 | B10.8 |
七、理解 CHI 的 6 个核心概念
要深入理解 CHI,抓住这 6 个概念:
- 事务(Transaction) — CHI 的一切以事务为单位。一个事务由 REQ→(SNP)→RSP→DAT 的报文序列组成。
- 归属节点(Home) — 每个地址的”主人”,管理一致性。它决定了读返回什么数据、写何时完成。
- 直接数据转发(DMT/DCT/DWT) — 减少延迟的关键优化:数据直接从缓存到缓存,不经过 Home。
- Snoop — Home 在服务一个事务时,向其他 RN-F 发出 snoop 查询/修改它们的缓存副本。
- Credit — 流控制机制。每个节点有发送 credit,用完必须等待对方返送 credit。
- 缓存状态转换 — 理解了 UC/UD/SC/SD 四种状态在请求和 snoop 下的转换,就理解了 90% 的一致性协议。
八、下一步阅读建议
CHI spec 有 716 页(B 部分占 557 页)。建议按以下顺序阅读:
1 | 阶段一:基础 |
附:当前工作目录
1 | ~/claude/chi_spec/ |