gem5 文档
开发
构建
使用 KVM
Sphinx 文档
Doxygen 文档
gem5 API
全系统模拟 (Full System)
内存系统
Ruby 内存系统
检查点 (Checkpoints)
定向测试器 (Directed Testers)
调试 (Debugging)
架构支持
功耗与热模型
编译工作负载
统计包 (Stats)
统计 API
Develop 分支
v19.0.0.0
v20.0.0.0
v20.0.0.2
v20.0.0.3
v20.1.0.0
v20.1.0.1
v20.1.0.5
v21.0.0.0
v21.0.1.0
v21.1.0.0
v21.1.0.1
v21.1.0.2
v21.2.0.0
v21.2.1.0
v21.2.1.1
v22.0.0.0
v22.0.0.1
v22.1.0.0
v23.0.0.0
v23.0.0.1
v24.1.0.1
gem5 标准库 (Stdlib)
gem5 资源 (Resources)
Ruby 概述
缓存一致性协议
Garnet 2.0
HeteroGarnet
MOESI CMP 目录
Garnet 合成流量
SLICC 语言
MI 示例
Garnet 独立运行
互连网络
MOESI Hammer
MOESI CMP Token
MESI 两级缓存
CHI 协议
替换策略
CPU 模型
GPU 模型
M5ops 指令
authors: Jason Lowe-Power
last edited: 2026-01-30 06:21:33 +0000
last edited: 2026-01-30 06:21:33 +0000
缓存一致性协议
通用符号和数据结构
一致性消息 (Coherence Messages)
这些在每个协议的 <protocol-name>-msg.sm 文件中描述。
| 消息 (Message) | 描述 (Description) |
|---|---|
| ACK/NACK | 对等待解决方向的请求的肯定/否定确认,然后再决定下一个动作。例如写回请求,独占请求。 |
| GETS | 请求共享权限以满足 CPU 的加载或取指 (IFetch)。 |
| GETX | 请求独占访问。 |
| INV | 无效请求。这可以由一致性协议本身触发,也可以由下一级缓存/目录触发以强制包含或触发 DMA 访问的写回,以便获得最新副本。 |
| PUTX | 请求写回缓存块。某些协议(例如 MOESI_CMP_directory)可能仅将其用于独占数据的写回请求。 |
| PUTS | 请求写回处于共享状态的缓存块。 |
| PUTO | 请求写回处于拥有 (owned) 状态的缓存块。 |
| PUTO_Sharers | 请求写回处于拥有 (owned) 状态的缓存块,但该块存在其他共享者。 |
| UNBLOCK | 解除下一级缓存/目录阻塞的消息,用于阻塞协议。 |
访问权限 (AccessPermissions)
这些与每个缓存块相关联,并确定该块上允许哪些操作。它与一致性协议状态密切相关。
| 权限 (Permissions) | 描述 (Description) |
|---|---|
| Invalid | 缓存块无效。在执行加载/存储之前,必须先(从内存层次结构的其他位置)获取该块。对无效操作不执行任何操作(除了可能发送 ACK)。对替换不执行任何操作。相关的一致性协议状态是 I 或 NP,并且在每个协议中都是稳定状态。 |
| Busy | 忙碌状态,通常表示正在进行某种状态转换或处理。 |
| Read_Only | 仅允许加载、写回、无效操作。在转换到其他状态之前无法执行存储。 |
| Read_Write | 允许加载、存储、写回、无效。通常表示该块是脏的。 |
数据结构
- Message Buffers: 用于存储和传输一致性消息的缓冲区。
- TBE Table: 事务缓冲区条目 (Transaction Buffer Entry) 表,用于跟踪未完成的事务。
-
Timer Table: 这维护了一个基于地址的计时器映射。对于每个目标地址,可以关联一个超时值并将其添加到 Timer 表中。例如,此数据结构由 MOESI_CMP_directory 协议的 L1 缓存控制器实现使用,以触发缓存块的单独超时。在内部,Timer Table 使用事件队列来调度超时。TimerTable 支持基于轮询的接口 isReady() 来检查是否发生了超时。可以使用 set() 方法设置地址上的超时,并使用 unset() 方法删除超时。
- 相关文件:
- src/mem/ruby/system/TimerTable.hh: 声明 TimerTable 类
- src/mem/ruby/system/TimerTable.cc: 实现 TimerTable 类的方法,处理设置地址和超时,使用事件队列调度事件。
一致性控制器 FSM 图
- 有限状态机 (FSM) 仅显示稳定状态
- 转换使用符号 “Event list” 或 “Event list : Action list” 或 “Event list : Action list : Event list” 进行注释。例如,Store : GETX 表示在 Store 事件上,发送了 GETX 消息,而 GETX : Mem Read 表示在收到 GETX 消息时,发送了内存读取请求。仅列出主要触发器和动作。
- 可选动作(例如,取决于块是否为脏的写回)括在 [ ] 中
- 在图中,转换标签与切过转换标签或最近弧的弧相关联。
