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

相关文章

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

Linux修改pip和conda缓存路径的几种方法

《Linux修改pip和conda缓存路径的几种方法》在Python生态中,pip和conda是两种常见的软件包管理工具,它们在安装、更新和卸载软件包时都会使用缓存来提高效率,适当地修改它们的缓存路径... 目录一、pip 和 conda 的缓存机制1. pip 的缓存机制默认缓存路径2. conda 的缓

Redis解决缓存击穿问题的两种方法

《Redis解决缓存击穿问题的两种方法》缓存击穿问题也叫热点Key问题,就是⼀个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击,本文给大家介绍了Re... 目录引言解决办法互斥锁(强一致,性能差)逻辑过期(高可用,性能优)设计逻辑过期时间引言缓存击穿:给

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

一文详解Nginx的强缓存和协商缓存

《一文详解Nginx的强缓存和协商缓存》这篇文章主要为大家详细介绍了Nginx中强缓存和协商缓存的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、强缓存(Strong Cache)1. 定义2. 响应头3. Nginx 配置示例4. 行为5. 适用场景二、协商缓存(协

Golang基于内存的键值存储缓存库go-cache

《Golang基于内存的键值存储缓存库go-cache》go-cache是一个内存中的key:valuestore/cache库,适用于单机应用程序,本文主要介绍了Golang基于内存的键值存储缓存库... 目录文档安装方法示例1示例2使用注意点优点缺点go-cache 和 Redis 缓存对比1)功能特性

MySQL8.0设置redo缓存大小的实现

《MySQL8.0设置redo缓存大小的实现》本文主要在MySQL8.0.30及之后版本中使用innodb_redo_log_capacity参数在线更改redo缓存文件大小,下面就来介绍一下,具有一... mysql 8.0.30及之后版本可以使用innodb_redo_log_capacity参数来更改