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

相关文章

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

什么是cron? Linux系统下Cron定时任务使用指南

《什么是cron?Linux系统下Cron定时任务使用指南》在日常的Linux系统管理和维护中,定时执行任务是非常常见的需求,你可能需要每天执行备份任务、清理系统日志或运行特定的脚本,而不想每天... 在管理 linux 服务器的过程中,总有一些任务需要我们定期或重复执行。就比如备份任务,通常会选在服务器资