本文主要是介绍gem5学习(24):缓存一致性协议——Cache Coherence Protocols,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
一、Common Notations and Data Structures
1、Coherence Messages
2、Access Permissions
3、Data Structures
二、Coherence controller FSM Diagrams
官网教程:gem5: Cache Coherence Protocols
一、Common Notations and Data Structures
(常用符号和数据结构)
1、Coherence Messages
一致性消息:这些消息在每个协议的<protocol-name>-msg.sm文件中描述。
消息 | 描述 |
---|---|
ACK/NACK | 对等待解决方向后决定下一步动作的请求的肯定/否定确认。例如,写回请求、独占请求【如果接收方能够成功执行这个请求,它将发送 ACK 给发送方,表示已接收并成功执行了操作。如果接收方无法执行写回请求,它将发送 NACK 给发送方,表示无法执行该请求或需要进一步处理。】 |
GETS | 请求共享权限以满足CPU的加载或IFetch。 |
GETX | 请求独占访问。 |
INV | 用于将缓存块失效的请求。当一个缓存块失效时,表示该缓存块中保存的数据不再有效,需要从下一个缓存级别或目录中获取最新的数据副本。这可以由一致性协议本身触发,也可以由下一个缓存级别/目录触发,以强制包含或触发DMA访问的写回,以获取最新的数据副本。 |
PUTX | 请求写回缓存块。某些协议(例如MOESI_CMP_directory)仅在需要写回独占数据时使用此请求。 |
PUTS | 请求以共享状态写回缓存块。 |
PUTO | 请求以拥有状态写回缓存块。 |
PUTO_Sharers | 请求以拥有状态写回缓存块,但仍存在其他共享该块的缓存。 |
UNBLOCK | 解除阻塞的请求,用于解除下一级缓存级别或目录中的消息的阻塞状态。 |
2、Access Permissions
这些与每个缓存块相关联,确定对该块允许进行哪些操作。它与一致性协议状态密切相关。
权限 | 描述 |
---|---|
Invalid | 缓存块无效。表示该缓存块中保存的数据不再有效,需要从内存层次结构的其他位置获取最新的数据副本。对无效操作无动作(可能发送一个ACK)。对替换操作无动作。相关的一致性协议状态为I或NP,是每个协议中的稳定状态。 |
Busy | TODO(当前正在忙于处理任务,无法立即响应其他请求或执行其他操作)。 |
Read_Only | 只允许加载、写回和使失效操作。在转换到其他状态之前不能执行存储操作。 |
Read_Write | 允许加载、存储、写回和使失效操作。通常表示该块已被修改。 |
3、Data Structures
- 消息缓冲区(Message Buffers):TODO(尚未提供相关信息或待进一步补充)
- TBE表:TODO(尚未提供相关信息或待进一步补充)
- 计时器表(Timer Table):该表维护了一个基于地址的计时器映射。对于每个目标地址,可以关联并添加一个超时值(timeout value)到计时器表中。例如,MOESI_CMP_directory协议的L1缓存控制器实现使用这种数据结构来触发缓存块的单独超时。在内部,计时器表使用事件队列来安排超时。计时器表支持基于轮询的接口,可以使用isReady()方法检查是否发生了超时。可以使用set()方法设置地址的超时值,并使用unset()方法将超时值从计时器表移除。
- 相关文件:
- src/mem/ruby/system/TimerTable.hh:声明TimerTable类
- src/mem/ruby/system/TimerTable.cc:实现TimerTable类的方法,处理地址和超时的设置,使用事件队列调度事件。
二、Coherence controller FSM Diagrams
(一致性控制器有限状态机图表)
- 在有限状态机图表中,通常只显示稳定状态,即状态之间没有显示出具体的过渡。
- 使用"Event list"、"Event list : Action list"或"Event list : Action list : Event list"的注释来注释转换。【例如,"Store : GETX" 表示在 "Store" 事件上触发了状态的转换,并发送了一个 "GETX" 消息。而 "GETX : Mem Read" 表示在接收到 "GETX" 消息时触发了状态的转换,并发送了一个内存读取请求。】
-
"Event list":表示在某个事件列表上触发了状态的转换。
-
"Event list : Action list":表示在某个事件列表上触发了状态的转换,并执行了相应的动作列表。
-
"Event list : Action list : Event list":表示在某个事件列表上触发了状态的转换,执行了相应的动作列表,并在转换后进入了另一个事件列表。
-
- 只列出了主要的触发器和动作,而可选的动作(例如根据块是否脏来决定是否进行写回)用方括号 [ ] 括起来。
- 在图表中,转换标签通常与横穿转换标签或最近的弧相关联,以显示状态之间的关系和转换的触发条件。
这篇关于gem5学习(24):缓存一致性协议——Cache Coherence Protocols的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!