参考资料
有图,好像写的很好,但是收费:AMBA-CHI协议详解(一)-CSDN博客
知乎这个好像会好一些:https://zhuanlan.zhihu.com/p/675313798
B站的这个视频好像也不错:【AMBA系列】AMBA CHI协议通信_哔哩哔哩_bilibili
香山也使用了CHI总线:总线接口 - 香山开源处理器用户手册
gem5的CHI实现在,对应描述在《cache memory》的75页:https://github.com/gem5/gem5/tree/d22064c1c05f5857431219da888de7e29a268c16/src/mem/ruby/protocol/chi
CHI总线
CHI(Coherent Hub Interface),
ACE(AXI Coherency Extensions)是ARM公司为AXI(Advanced eXtensible Interface)总线协议设计的一致性扩展协议,主要用于支持多核处理器系统中的缓存一致性。它是基于监听(snooping)的一致性协议,允许多个处理器核心或代理(agents)共享内存数据时保持缓存一致性。
MOESI
MOESI 的五个状态分别是:
状态 | 名称 | 描述 |
---|---|---|
M | Modified (修改) | 缓存行已被当前核心修改(Dirty),且 唯一持有,主存数据已过时。必须负责在逐出时写回主存。 |
O | Owned (拥有) | 缓存行是 Dirty 的,但可能被多个核心 Shared。当前缓存负责维护数据一致性(如写回主存或传递给其他缓存)。 |
E | Exclusive (独占) | 缓存行 未被修改(Clean),且 仅当前缓存持有。可随时写入,无需通知其他缓存。 |
S | Shared (共享) | 缓存行 可能被多个缓存共享,数据 可能是 Clean 或 Dirty(但当前缓存不负责写回)。 |
I | Invalid (无效) | 缓存行 不在当前缓存中,或数据已失效。 |
2. MOESI 与 MESI 的区别
MOESI 在 MESI 的基础上增加了 Owned (O) 状态,主要优化 共享脏数据 的处理:
- MESI 的问题:
当多个核心共享一个 Modified (M) 行时,必须降级为 Shared (S),并立即写回主存,导致 不必要的带宽消耗。 - MOESI 的改进:
引入 Owned (O) 状态,允许脏数据在多个缓存间共享,但 仅一个缓存(O 状态)负责最终写回主存,减少主存访问。
CHI总线节点
主要有三种类型的节点:请求节点(RN)、home节点(HN)和从节点(SN)。此外还有杂项节点(MN)。
中文名称 | 英文全称 | 英文缩写 | 关键功能 |
---|---|---|---|
请求节点 | Request Node | RN | 发起读写请求(分RN-F/RN-I/RN-D子类) |
Home节点 | Home Node | HN | 事务排序、监听管理、地址归属权 |
从节点 | Subordinate Node | SN | 存储实际数据(如内存、外设) |
杂项节点 | Miscellaneous Node | MN | 调试、性能监测等辅助功能 |