gem5 documentation
Development
Building
Using KVM
Sphinx Documentation
Doxygen
gem5 APIs
Full System
Checkpoints
Directed Testers
Debugging
Architecture Support
Power and Thermal Model
Compiling Workloads
Stats Package
Stats API
Develop Branch
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 standard library
Standard Library Overview
Hello World Tutorial
X86 Full-System Tutorial
Developing Your Own Components Tutorial
How To Create Your Own Board Using The gem5 Standard Library
How to use local resources and data sources in gem5
gem5 Resources
Creating Disk Images
Devices
m5term
Building Linux ARM Kernel
Building Android Marshmallow
Guest binaries
Memory System
Memory System
gem5 Memory System
Replacement Policies
Indexing Policies
Classic memory system coherence
Classic caches
Ruby Memory System
Ruby
Cache Coherence Protocols
Garnet 2.0
HeteroGarnet
MOESI CMP directory
Garnet Synthetic Traffic
SLICC
MI example
Garnet standalone
Interconnection network
MOESI hammer
MOESI CMP token
MESI two level
CHI
Replacement Policies
CPU Models
GPU Models
M5ops
authors: Jason Lowe-Power
MOESI CMP Directory
协议概述
- TODO: 缓存层次结构
- 与 MESI 协议相比,MOESI 协议引入了额外的Owned状态。
- MOESI 协议还包括 MESI 协议中不可用的许多合并优化。
相关文件
- src/mem/protocols
- MOESI_CMP_directory-L1cache.sm: L1 缓存控制器规范
- MOESI_CMP_directory-L2cache.sm: L2 缓存控制器规范
- MOESI_CMP_directory-dir.sm: 目录控制器规范
- MOESI_CMP_directory-dma.sm: DMA 控制器规范
- MOESI_CMP_directory-msg.sm: 消息类型规范
- MOESI_CMP_directory.slicc: 容器文件
L1 缓存控制器
稳定状态和不变式
| 状态 | 不变式 |
|---|---|
| MM | 缓存块由该节点独占持有,并且可能已被修改(类似于传统的 “M” 状态)。 |
| MM_W | 缓存块由该节点独占持有,并且可能已被修改(类似于传统的 “M” 状态)。在此状态下不允许替换和 DMA 访问。块在超时后自动转换到 MM 状态。 |
| O | 缓存块由该节点拥有。它尚未被该节点修改。没有其他节点以独占模式持有此块,但可能存在共享者。 |
| M | 缓存块以独占模式持有,但尚未写入(类似于传统的 “E” 状态)。没有其他节点持有此块的副本。在此状态下不允许存储。 |
| M_W | 缓存块以独占模式持有,但尚未写入(类似于传统的 “E” 状态)。没有其他节点持有此块的副本。仅允许加载和存储。在存储时静默升级到 MM_W 状态。在此状态下不允许替换和 DMA 访问。块在超时后自动转换到 M 状态。 |
| S | 缓存块由 1 个或多个节点在共享状态下持有。在此状态下不允许存储。 |
| I | 缓存块无效。 |
FSM 抽象
控制器 FSM 图中使用的符号在此处描述。

优化
| 状态 | 描述 |
|---|---|
| SM | 已发出 GETX 以获取即将对缓存块进行存储的独占权限,但块的旧副本仍然存在。在此状态下不允许存储和替换。 |
| OM | 已发出 GETX 以获取即将对缓存块进行存储的独占权限,数据已收到,但所有预期的确认尚未到达。在此状态下不允许存储和替换。 |
The notation used in the controller FSM diagrams is described here.

L2 缓存控制器
稳定状态和不变式
| 片内包含 | 片间排他 | 状态 | 描述 |
|---|---|---|---|
| 不在此芯片的任何 L1 或 L2 中 | 可能存在于其他芯片 | NP/I | 此芯片上的缓存块无效。 |
| 不在 L2 中,但在此芯片的 1 个或多个 L1 中 | 可能存在于其他芯片 | ILS | 缓存块不在此芯片的 L2 中。它由此芯片中的 L1 节点本地共享。 |
| ILO | 缓存块不在此芯片的 L2 中。此芯片中的某个 L1 节点是此缓存块的所有者。 | ||
| ILOS | 缓存块不在此芯片的 L2 中。此芯片中的某个 L1 节点是此缓存块的所有者。此芯片中还有此缓存块的 L1 共享者。 | ||
| 不存在于任何其他芯片 | ILX | 缓存块不在此芯片的 L2 中。它由此芯片中的某个 L1 节点以独占模式持有。 | |
| ILOX | 缓存块不在此芯片的 L2 中。它由此芯片独占持有,此芯片中的某个 L1 节点是该块的所有者。 | ||
| ILOSX | 缓存块不在此芯片的 L2 中。它由此芯片独占持有。此芯片中的某个 L1 节点是该块的所有者。此芯片中还有此缓存块的 L1 共享者。 | ||
| 在 L2 中,但不在该芯片的任何 L1 中 | 可能存在于其他芯片 | S | 缓存块不在此芯片的 L1 中。它在此芯片的 L2 中以共享模式持有,也可能在芯片间共享。 |
| O | 缓存块不在此芯片的 L1 中。它在此芯片的 L2 中以拥有模式持有。它也可能在芯片间共享。 | ||
| 不存在于任何其他芯片 | M | 缓存块不在此芯片的 L1 中。它在此芯片的 L2 中存在,并且可能已被修改。 | |
| 同时在此芯片的 L2 和 1 个或多个 L1 中 | 可能存在于其他芯片 | SLS | 缓存块在此芯片的 L2 中以共享模式存在。此芯片上存在该块的本地 L1 共享者。它也可能在芯片间共享。 |
| OLS | 缓存块在此芯片的 L2 中以拥有模式存在。此芯片上存在该块的本地 L1 共享者。它也可能在芯片间共享。 | ||
| 不存在于任何其他芯片 | OLSX | 缓存块在此芯片的 L2 中以拥有模式存在。此芯片上存在该块的本地 L1 共享者。它由此芯片独占持有。 |
FSM 抽象
控制器分为 2 部分描述。第一张图显示所有”片内包含”类别之间以及类别 1、3、4 内的转换。类别 2(不在 L2 中,但在此芯片的 1 个或多个 L1 中)内的转换在第二张图中显示。
控制器 FSM 图中使用的符号在此处描述。涉及其他芯片的转换用棕色标注。

下面的第二张图扩展了上面图片的中心六边形部分,以显示类别 2(不在 L2 中,但在此芯片的 1 个或多个 L1 中)内的转换。
控制器 FSM 图中使用的符号在此处描述。涉及其他芯片的转换用棕色标注。

目录控制器
稳定状态和不变式
| 状态 | 不变式 |
|---|---|
| M | 缓存块仅由 1 个节点以独占状态持有(该节点也是所有者)。此块没有共享者。数据可能与内存中的数据不同。 |
| O | 缓存块恰好由 1 个节点拥有。此块可能有共享者。数据可能与内存中的数据不同。 |
| S | 缓存块由 1 个或多个节点在共享状态下持有。没有节点拥有该块的所有权。数据与内存中的数据一致(检查)。 |
| I | 缓存块无效。 |
FSM 抽象
控制器 FSM 图中使用的符号在此处描述。

