gem5学习(24):缓存一致性协议——Cache Coherence Protocols

2024-02-24 22:36

本文主要是介绍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,是每个协议中的稳定状态。
BusyTODO(当前正在忙于处理任务,无法立即响应其他请求或执行其他操作)。
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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/743587

相关文章

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

Java 缓存框架 Caffeine 应用场景解析

《Java缓存框架Caffeine应用场景解析》文章介绍Caffeine作为高性能Java本地缓存框架,基于W-TinyLFU算法,支持异步加载、灵活过期策略、内存安全机制及统计监控,重点解析其... 目录一、Caffeine 简介1. 框架概述1.1 Caffeine的核心优势二、Caffeine 基础2

Redis高性能Key-Value存储与缓存利器常见解决方案

《Redis高性能Key-Value存储与缓存利器常见解决方案》Redis是高性能内存Key-Value存储系统,支持丰富数据类型与持久化方案(RDB/AOF),本文给大家介绍Redis高性能Key-... 目录Redis:高性能Key-Value存储与缓存利器什么是Redis?为什么选择Redis?Red

React 记忆缓存的三种方法实现

《React记忆缓存的三种方法实现》本文主要介绍了React记忆缓存的三种方法实现,包含React.memo、useMemo、useCallback,用于避免不必要的组件重渲染和计算,感兴趣的可以... 目录1. React.memo2. useMemo3. useCallback使用场景与注意事项在 Re

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Java实现本地缓存的四种方法实现与对比

《Java实现本地缓存的四种方法实现与对比》本地缓存的优点就是速度非常快,没有网络消耗,本地缓存比如caffine,guavacache这些都是比较常用的,下面我们来看看这四种缓存的具体实现吧... 目录1、HashMap2、Guava Cache3、Caffeine4、Encache本地缓存比如 caff