gem5学习(22):经典内存系统的一致性——Classic Memory System coherence

本文主要是介绍gem5学习(22):经典内存系统的一致性——Classic Memory System coherence,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

官网教程:gem5: Classic memory system coherence

M5 2.0b4引入了一个经过大量重写和简化的缓存模型,包括一个新的一致性协议。一致性协议是用于确保多个缓存之间的数据一致性的规则和机制。这意味着在多个缓存中存储的数据将保持一致,以避免数据不一致的问题。

(在此之前的 M5 2.0 版本之前,缓存模型已经进行了修补,以适应引入的新内存系统。然而,旧的缓存模型并没有重新编写以充分利用新内存系统所提供的功能。因此,在 2.0beta 版本中,对缓存模型进行了彻底的重写,以使其能够更好地利用新内存系统的功能。)

新一致性协议的关键特性是它可以与多样化的缓存层次结构(多个层次上的多个缓存)配合工作。在计算系统中,通常会使用多个层次的缓存来加速数据访问。每个层次的缓存可以存储不同级别的数据,例如 L1 缓存、L2 缓存等。旧协议将缓存之间的数据共享限制在一个总线上,这就意味着只有通过总线才能进行数据的交互和传输。

在现实世界中,系统架构对协议可以适应的缓存数量或配置有限制。由于系统的多样性和复杂性,设计一个在任意配置下都既适用又高效的协议是不切实际的。因此,在设计一致性协议时,我们需要在现实性和可配置性方面做出一些妥协。

这意味着我们可能无法找到一种通用的协议,适用于所有可能的系统配置。相反,我们采取了一种折衷的方法,以满足在(几乎)任意配置上工作的需求。这意味着协议在大多数常见的系统配置下都能有效运行,但在某些特殊或定制的配置下可能会存在限制或不够高效。

尽管如此,我们的目标是确保协议对于研究系统行为的其他方面是足够的。这意味着协议能够满足一致性方面的基本需求,并在常见的系统配置下表现出良好的性能和可靠性。然而,对于专门研究一致性的研究人员来说,他们可能更倾向于使用特定的协议来替换默认的一致性机制,以满足其研究的特定需求。

该协议是一个MOESI(Modified, Owned, Exclusive, Shared, Invalid)嗅探协议,不强制实施包含性(Inclusion)。MOESI是一种常见的缓存一致性协议,用于管理多级缓存系统中的数据一致性。它定义了不同状态来表示缓存中数据的状态,包括被修改(Modified)、被拥有(Owned)、独占(Exclusive)、共享(Shared)和无效(Invalid)。

在一个CMP(Chip-level Multiprocessing)配置中,如果有多个L1缓存,它们的总容量是共享的L2缓存容量的显著一部分。在这种情况下,强制实施包含性可能非常低效。包含性是指较低级别缓存中的数据拷贝也存在于较高级别缓存中,以确保数据的一致性。

来自较高级别缓存(靠近CPU的缓存)的请求按预期的方式向内存传播:当L1缓存发生缺失时,它会在本地L1/L2总线上广播该缺失请求,并被其他L1缓存进行嗅探。如果没有响应,那么L2缓存将提供服务。如果L2中的请求也未命中,经过一段延迟后(通常等于L2的命中延迟),L2将在其内存侧总线上发出请求,可能被其他L2缓存进行嗅探,然后发送到L3缓存或内存。

然而,逐级向上传播嗅探请求可能会引发大量难以解决的竞争条件。实际系统通常不会按照这种方式进行处理。相反,通常希望在L2总线上执行单个嗅探操作,以告知整个L1/L2层次结构中该数据块的状态。为了实现这一点,可以采用多种方法:

  1. 只嗅探L2缓存,但强制实施包含性,以便L2具有关于L1缓存的所有所需信息。这种方法可以确保L2缓存具有关于L1缓存的完整状态信息,但可能会导致配置上的麻烦,需要根据上层缓存的数量、大小和配置来确定较低级别缓存的标记大小。
  2. 在L2上保留一组额外的标记,以便可以同时嗅探它们(如Compaq Piranha)。这种方法在层次结构不太深的情况下是合理的,但需要在设计中考虑额外的标记,并根据上层缓存的配置来确定标记的大小。
  3. 并行嗅探L1和L2缓存,特别是当它们都位于同一芯片上时。这种方法在一些处理器架构中被使用,如Intel的Pentium Pro。然而,为了实现这种并行嗅探,需要在设计中添加显式路径,这可能导致配置过程变得复杂。

为了解决以上问题,提出了引入"express snoops"的方法。"express snoops"是一种特殊的嗅探请求,即使在系统运行于时序模式时,也可以瞬间和原子地传播到整个层次结构上。这种方法类似于前述的第二或第三种选择,但由于嗅探是沿着常规总线互连传播的,所以没有额外的配置开销。然而,这可能引入一些时间上的不准确性,但如果系统中有专用路径用于这些嗅探,或者在较低级别缓存中维护额外的上层标记副本,那么差异可能是很小的。

最后,注意到该协议在某些配置下可能存在错误,特别是当有多个L2缓存,每个L2缓存后面有多个L1缓存时。这个问题可能在较新的版本中得到修复,但在较旧版本中,该协议在大多数有效的配置下是适用的。

这篇关于gem5学习(22):经典内存系统的一致性——Classic Memory System coherence的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/726107

相关文章

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Linux系统之dns域名解析全过程

《Linux系统之dns域名解析全过程》:本文主要介绍Linux系统之dns域名解析全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、dns域名解析介绍1、DNS核心概念1.1 区域 zone1.2 记录 record二、DNS服务的配置1、正向解析的配置

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重

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

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

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想