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 CMP token
协议概述
- 该协议还建模了 2 级缓存层次结构。
- 它通过显式交换和计数 token 来维护一致性权限。
- 在开始时为每个缓存块分配固定数量的 token,token 数量保持不变。
- 要写入块,处理器必须拥有该块的所有 token。读取至少需要一个 token。
- 该协议还具有持久消息支持以避免饥饿。
相关文件
- src/mem/protocols
- MOESI_CMP_token-L1cache.sm: L1 缓存控制器规范
- MOESI_CMP_token-L2cache.sm: L2 缓存控制器规范
- MOESI_CMP_token-dir.sm: 目录控制器规范
- MOESI_CMP_token-dma.sm: DMA 控制器规范
- MOESI_CMP_token-msg.sm: 消息类型规范
- MOESI_CMP_token.slicc: 容器文件
控制器描述
L1 缓存
| 状态 | 不变式 |
|---|---|
| MM | 缓存块由该节点独占持有,并且可能已被修改(类似于传统的 “M” 状态)。 |
| MM_W | 缓存块由该节点独占持有,并且可能已被修改(类似于传统的 “M” 状态)。在此状态下不允许替换和 DMA 访问。块在超时后自动转换到 MM 状态。 |
| O | 缓存块由该节点拥有。它尚未被该节点修改。没有其他节点以独占模式持有此块,但可能存在共享者。 |
| M | 缓存块以独占模式持有,但尚未写入(类似于传统的 “E” 状态)。没有其他节点持有此块的副本。在此状态下不允许存储。 |
| M_W | 缓存块以独占模式持有,但尚未写入(类似于传统的 “E” 状态)。没有其他节点持有此块的副本。仅允许加载和存储。在存储时静默升级到 MM_W 状态。在此状态下不允许替换和 DMA 访问。块在超时后自动转换到 M 状态。 |
| S | 缓存块由 1 个或多个节点在共享状态下持有。在此状态下不允许存储。 |
| I | 缓存块无效。 |
L2 缓存
| 状态 | 不变式 |
|---|---|
| NP | 缓存块由该节点独占持有,并且可能已被本地修改(类似于传统的 “M” 状态)。 |
| O | 缓存块由该节点拥有。它尚未被该节点修改。没有其他节点以独占模式持有此块,但可能存在共享者。 |
| M | 缓存块以独占模式持有,但尚未写入(类似于传统的 “E” 状态)。没有其他节点持有此块的副本。在此状态下不允许存储。 |
| S | 缓存行保存数据的最新、正确副本。系统中的其他处理器也可能在共享状态下保存数据的副本。在此状态下可以读取缓存行,但不能写入。 |
| I | 缓存行无效,不保存数据的有效副本。 |
目录控制器
| 状态 | 不变式 |
|---|---|
| O | 所有者。 |
| NO | 非所有者。 |
| L | 已锁定。 |
