📚 ARM CHI 全品类事务 终极汇总总表
整合 Read / Write / Combined-Write / Dataless CMO / Atomic&System / Snoop / Spec 通配符集合 七大模块,一张表全覆盖:用途、核心特征、是否监听 / 是否带数据 / 关键能力、典型场景,适合知识复习、方案设计、验证用例梳理。
一、Read 读类事务
表格
| 事务名称 | 是否 Snoop | 是否分配缓存 | 核心特征 | 典型应用场景 |
|---|---|---|---|---|
| ReadNoSnp/ReadNoSnpSep | ❌ 无监听 | ❌ 不分配 | 直通非一致空间,无一致性维护 | 设备寄存器、非一致内存、一次性 IO 读 |
| ReadOnce | ⚠️轻量 Snoop | ❌ 不分配 | 查脏回写、读完丢弃、防缓存污染 | 临时变量、日志调试读 |
| ReadOnceCleanInvalid | ⚠️轻量 Snoop | ❌ 不分配 | 读 + 脏回写 + 全局失效 | DMA 前置准备、安全数据清理 |
| ReadOnceMakeInvalid | ⚠️轻量 Snoop | ❌ 不分配 | 读 + 强制失效、不回写脏 | 事务回滚、无用脏数据丢弃 |
| ReadClean | ✅完整 Snoop | ✅分配 | 获取干净共享副本 | 代码段、常量只读数据 |
| ReadShared | ✅完整 Snoop | ✅分配 | 多核共享可读副本 | 全局配置、多核读多写少 |
| ReadPreferUnique | ✅完整 Snoop | ✅分配 | 优先独占、失败降级共享 | 大概率改写、小概率只读 |
| ReadUnique | ✅完整 Snoop | ✅分配 | 全局失效、独占可写 | 写前预读、临界区数据 |
| ReadNotSharedDirty | ✅完整 Snoop | ✅分配 | 独占脏副本、无共享 | 无锁结构、专属改写预读 |
| MakeReadUnique | ✅完整 Snoop | 已分配 | 纯权限升级、无数据传输 | 已持 Shared,准备改写 |
二、基础 Write 写类事务(含 Ptl/Full/Zero/Stash)
表格
| 事务名称 | 是否 Snoop | 数据粒度 | 核心特征 | 典型应用场景 |
|---|---|---|---|---|
| WriteNoSnp{Ptl/Full/Zero} | ❌无监听 | Ptl/Full/Zero | 非一致直通写、不维护一致性 | 外设寄存器、内存清零、小域改写 |
| WriteUnique{Ptl/Full/Zero} | ✅完整 Snoop | Ptl/Full/Zero | 抢占独占、失效其他副本 | 锁变量、临界区、共享变量原子写 |
| WriteUnique{*}Stash | ✅完整 Snoop | Ptl/Full | 独占写 + 主动推送目标缓存 | 线程迁移、异构计算结果投递 |
| WriteBack{Ptl/Full} | ✅完整 Snoop | Ptl/Full | 本地脏行回写、不改内容 | LRU 驱逐脏回写、后台刷盘 |
| WriteCleanFull | ✅完整 Snoop | Full | 写后立即脏回、释放独占 | 配置更新、写完共享读 |
| WriteEvict{Full/OrEvict} | ✅完整 Snoop | Full | 写完回写 + 本地驱逐 | 一次性写、防缓存污染 |
三、Combined Write 组合写(写 + CMO + 持久化)
表格
| 事务名称 | 基础写类型 | CMO 动作 | 是否持久化 | 典型场景 |
|---|---|---|---|---|
| WriteNoSnp{*}CleanInv | NoSnp | 脏回写 + 全局失效 | ❌ | 外设写后清缓存、DMA 就绪 |
| WriteNoSnp{*}CleanSh | NoSnp | 脏回写 + 置共享 | ❌ | 非一致内存写完多核共享读 |
| WriteNoSnp{*}CleanShPerSep | NoSnp | 脏回写 + 共享 | ✅分离持久 | 持久内存外设高可靠写 |
| WriteUnique{*}CleanSh | Unique | 写完回写 + 共享 | ❌ | 临界区写完放开多读 |
| WriteUnique{*}CleanShPerSep | Unique | 写完回写 + 共享 | ✅分离持久 | 数据库事务提交、金融高可用 |
| WriteBackFullCleanInv | Back | 脏回写 + 全局失效 | ❌ | 脏行回收 + 释放全部缓存资源 |
| WriteBackFullCleanSh | Back | 脏回写 + 置共享 | ❌ | 脏行落地后多核共享访问 |
| WriteCleanFullCleanSh | Clean | 写 clean + 再共享 | ❌ | 高一致配置分发 |
| WriteCleanFullCleanShPerSep | Clean | 写 clean + 共享 + 落盘 | ✅分离持久 | 核心交易极致可靠链路 |
四、Dataless 无数据 CMO 事务
表格
| 事务名称 | 是否回写脏数据 | 核心状态变换 | 典型场景 |
|---|---|---|---|
| CleanUnique | ✅ | Dirty→Clean Unique | 脏行落地 + 保留独占改写权 |
| MakeUnique | ❌ | Shared→Unique | 仅权限升级、已持共享准备改写 |
| Evict | ✅若脏 | 任意→Invalid 本地移除 | LRU 缓存替换、VM 进程销毁清理 |
| StashOnce{Unique/Shared}{Sep} | ✅按需 | 目标分配 Unique/Shared | 数据预热、核间线程迁移 |
| CleanShared | ✅ | Dirty→Clean Shared | 写完释放独占、开放全局读 |
| CleanSharedPersist{Sep} | ✅ | Dirty→Clean Shared + 落盘 | 持久内存掉电保数据 |
| CleanInvalid | ✅ | 全副本失效 | DMA 读准备、敏感数据销毁 |
| MakeInvalid | ❌丢弃脏 | 全副本强制失效 | 事务回滚、无效脏数据丢弃 |
五、Atomic 原子 & 系统辅助事务
表格
| 事务名称 | 是否改数据 | 是否返回值 | 核心用途 |
|---|---|---|---|
| AtomicStore | ✅写新值 | ❌无返回 | 原子赋值、引用计数、外设原子写 |
| AtomicLoad | ❌只读 | ✅返原值 | 无锁结构读取、状态采样 |
| AtomicSwap | ✅交换读写 | ✅返旧值 | 无锁链表、自旋锁底层实现 |
| AtomicCompare(CAS) | ✅条件写 | ✅原值 + 成败 | 无锁哈希、乐观并发控制 |
| DVMOp | ❌仅管理 | ❌ | TLB 失效、页表同步、多核虚拟内存一致 |
| PrefetchTgt | ❌预加载 | ❌ | 软件预取、迁移数据预热降延迟 |
| PCrdReturn | ❌流控 | ❌ | NoC 信用回流、防拥塞流量控制 |
六、Snoop 监听响应类事务
表格
| 事务组 | 核心行为 | 是否回写脏 | 典型场景 |
|---|---|---|---|
| SnpOnce/SnpOnceFwd | 一次性轻监听、读后失效 | ✅若脏 | 一次性访问防污染 |
| SnpClean/SnpCleanFwd | 触发远端脏回写清干净 | ✅ | 内存一致性落地、后台刷盘 |
| SnpNotSharedDirty{*} | 回写 + 独占脏、无共享副本 | ✅ | 远端取回独占改写资源 |
| SnpShared{*} | 协调转为共享可读 | ✅按需 | 多核只读共享数据同步 |
| SnpUnique{*} | 全局失效、抢占独占 | ✅按需 | 远端配合写独占操作 |
| SnpPreferUnique{*} | 优先独占、降级共享 | ✅按需 | 混合读写自适应场景 |
| SnpCleanShared | 脏回写 + 转共享 | ✅ | 写完放开全局读 |
| SnpCleanInvalid | 脏回写 + 全失效 | ✅ | DMA、安全擦除 |
| SnpMakeInvalid{*Stash} | 强制失效不回写、可选推送 | ❌ | 脏丢弃、安全置换数据 |
| SnpStash{Unique/Shared} | Snoop 驱动远端数据推送 | ✅按需 | 一致性 Stash 核间迁移 |
| SnpQuery | 仅查状态不修改 | ❌ | 调试、定位一致性问题 |
| SnpDVMOp | 多核 TLB / 页表广播失效 | ❌ | 操作系统虚拟内存管理 |
七、CHI Spec 通配符集合事务(精简汇总)
表格
| 规范通配符 | 覆盖子事务 | 统一核心特征 |
|---|---|---|
| ReadOnce* | ReadOnce / CleanInvalid / MakeInvalid | 非分配、一次性轻量读 |
| WriteNoSnp | Ptl/Full 无监听写 | 非一致外设直通写 |
| WriteUnique | Ptl/Full/ 带 Stash | 一致性独占改写族 |
| WriteBack | Ptl/Full 脏行回写 | 本地脏数据落地归一 |
| StashOnce/StashOnceSep/* | Shared/Unique 普通 / 分离确认 | 主动缓存推送预热 |
| StashOnce*Shared / *Unique | 对应共享 / 独占 Stash 全集 | 按目标缓存状态分类推送 |
| CleanSharedPersist* | 基础 / Sep 分离持久 | 缓存干净 + 共享 + 掉电持久 |
| SnpStash* | StashUnique/StashShared | 一致性侧监听数据推送 |
| DBIDResp* | 标准 / Ord 有序响应 | 数据 buffer 流控 ID 管理 |
💡 全局极简背诵分层
- 读分三类:NoSnp 外设、Once 一次性、Shared/Unique 一致性分配读
- 写分基础 + 组合:NoSnp 非一致、Unique 独占、Back 回写;叠加 CleanInv/CleanSh/Persist 做系统管理
- Dataless 无数据:只管状态 / 驱逐 / 持久 / Stash,省带宽
- Atomic:多核锁 & 无锁算法底层原子原语
- Snoop:Home 调度远端副本,是一致性核心联动
- 通配符:协议文档精简描述,归类同类行为事务