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
MOESI Hammer
这是 AMD 的 Hammer 协议的实现,用于 AMD 的 Hammer 芯片(也称为 Opteron 或 Athlon 64)。该协议实现了原始的 HyperTransport 协议以及更新的 ProbeFilter 协议。该协议还包括全位目录模式。
相关文件
- src/mem/protocols
- MOESI_hammer-cache.sm: 缓存控制器规范
- MOESI_hammer-dir.sm: 目录控制器规范
- MOESI_hammer-dma.sm: DMA 控制器规范
- MOESI_hammer-msg.sm: 消息类型规范
- MOESI_hammer.slicc: 容器文件
缓存层次结构
该协议实现了 2 级私有缓存层次结构。它为每个核心分配独立的指令和数据 L1 缓存,以及统一的 L2 缓存。这些缓存对每个核心都是私有的,并由一个共享缓存控制器控制。该协议强制 L1 和 L2 缓存之间的排他性。
稳定状态和不变式
| 状态 | 不变式 |
|---|---|
| MM | 缓存块由该节点独占持有,并且可能已被本地修改(类似于传统的 “M” 状态)。 |
| O | 缓存块由该节点拥有。它尚未被该节点修改。没有其他节点以独占模式持有此块,但可能存在共享者。 |
| M | 缓存块以独占模式持有,但尚未写入(类似于传统的 “E” 状态)。没有其他节点持有此块的副本。在此状态下不允许存储。 |
| S | 缓存行保存数据的最新、正确副本。系统中的其他处理器也可能在共享状态下保存数据的副本。在此状态下可以读取缓存行,但不能写入。 |
| I | 缓存行无效,不保存数据的有效副本。 |
缓存控制器
控制器 FSM 图中使用的符号在此处描述。
MOESI_hammer 支持缓存刷新。要刷新缓存行,缓存控制器首先向目录发出 GETF 请求以阻塞该行,直到刷新完成。然后它发出 PUTF 并写回缓存行。

目录控制器
MOESI_hammer 内存模块与典型的目录协议不同,不包含任何目录状态,而是向系统中的所有处理器广播请求。同时,它从 DRAM 获取数据并将响应转发给请求者。
probe filter: TODO
稳定状态和不变式
| 状态 | 不变式 |
|---|---|
| NX | 非所有者,probe filter 条目存在,块在所有者处为 O。 |
| NO | 非所有者,probe filter 条目存在,块在所有者处为 E/M。 |
| S | 数据干净,probe filter 条目存在,指向当前所有者。 |
| O | 数据干净,probe filter 条目存在。 |
| E | 独占所有者,无 probe filter 条目。 |
控制器
控制器 FSM 图中使用的符号在此处描述。

