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
缓存一致性协议
通用符号和数据结构
一致性消息 (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 消息时,发送了内存读取请求。仅列出主要触发器和动作。
- 可选动作(例如,取决于块是否为脏的写回)括在 [ ] 中
- 在图中,转换标签与切过转换标签或最近弧的弧相关联。
