第六章:Coherence Protocols

news/2024/10/8 18:40:20

chapter6:cache coherence

1、大局观

coherence的目标,具体包括:

  1. 单写多读(single-writer-multiple-reader, SWMR)不变性:对任何内存地址A,在任何时间点上只存在一个可以向A写入的内核,但可以存在多个从A读取的内核。
  2. 数据-值(data-value)不变性:一个内存位置在一个时间片开始时的值与该内存位置在其上一个时间片结束时的值相同。

为了上述这些性质,可以把每个存储结构(包括cache、LLC、内存)与coherence contorller连接起来,构成一个分布式系统,控制器之间交换信息。下面两张图展示了缓存控制器与LLC/内存控制器的功能。对于cache的coherence controller称为cache controller,如下图所示。

controller接受来自core的load和store指令,并将load值返回到核心。cache miss发生时,controller发起一笔coherence transaction,并且这笔transaction通过network与其他controller交互。transaction的类型及格式取决于特定的一致性协议。

每个block对应一个有限状态机,根据当前event改变block的状态,多个相同的状态机构成controller。

2、指定一致性协议

一般可以通过定义controller的行为来定义coherence协议,通常用表格的形式来说明,如下图所示。

3、简单coherence协议示例

为了方便理解举一个简单例子,假设所有处理器通过共享总线(一个Core发送的消息可以被所有Core看到)连接,假设每个缓存行可以在两个稳定态:I(Invalid)和V(Valid)。

根据cache行为分析,可以得到使用三种总线消息传输实现的两种一致性事务:Get请求一个缓存行;数据回复(DataRep)传输一个缓存行的数据;Put将缓存行内容写回LLC/memory。当发生load/store miss时,缓存控制器发送Get消息,并等待即将到来的DataResp消息。上图中前缀Own表示自身Core的请求,Other表示其它Core的请求。

IV_D是指瞬态,当前block状态为ivalid,在等待data response变为valid。在IV_D瞬态中,如果cache controller收到了load/store请求或者需要evict缓存行的请求,都采取Stall等待的措施,这是因为IV_D在逻辑上属于I状态,一方面自然不能满足load/store的请求;另一方面如果对evict请求不stall而直接evict该缓存行的话,最后会产生I状态的缓存行接收到了有可能是dirty的DataResp,由于不是预期的请求,缓存行不会做出任何反应,进而使得dirty的数据没有写回memory,造成错误。

4、coherence设计空间概述

状态

在只有一个参与者的系统中(如没有coherent DMA的单核处理器),一个缓存行的状态是有效(valid)或者无效(invalid)。或许在需要分辨缓存行是否是脏的时候可能需要两个有效状态。在多个参与者的系统中也可以只使用两三个有效状态,但我们通常使用多个有效状态来标志缓存行的某些特性。这些特性有:

  • 有效性(validity):该缓存行有最新的值。
  • 脏(Dirtiness):就像单核系统一样,缓存行拥有最新的值,该值区别于LLC/memory,缓存控制器需要最终将其写回LLC/memory。
  • 独有(Exclusivity):缓存行在系统中只有一份存在于某个核心的private cache(没有其它共享者)。
  • 所有权(Ownership):如果该缓存控制器负责响应对某个缓存行的所有请求,那么称该缓存控制器是该缓存行的所有者。

稳定状态

MOESI协议

过渡状态

在复杂的协议中,我们可能会有几十个过渡状态,我们用XY_Z的形式来表示这些状态,如IV_D表示在Invalid状态中,准备进入Valid状态,且正在等待DataResp。

LC/内存中的状态

有两种命名这些状态的方法:

  1. 以缓存(cache)为中心:一个缓存行在LLC和内存中的状态是该行在缓存中的状态的集合,例如,如果该行在所有缓存中状态都是I,那么在LLC/内存状态也是I,如果在一个或多个缓存中的状态是S,那么LLC/内存状态就是S,如果在一个缓存中状态为M,那么LLC/内存状态就是M。
  2. 以内存(memory)为中心:一个缓存行在LLC/内存中的状态对应于内存控制器对该行的权限(而不是缓存的权限),例如,如果该行在所有缓存中状态都是I,那么在LLC/内存控制器中的状态就是O(而不是以缓存为中心的方法中的I),如果在一个或多个缓存中的状态是S,那么LLC/内存的状态也是O,如果在一个缓存中状态为M或O,那么LLC/内存的状态就是I。

后面我们都使用以缓存为中心的命名方法来表示LLC/内存中的缓存行的状态。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Redis多数据源,看这篇就够了

背景 Redis多数据源常见的场景:分区数据处理:当数据量增长时,单个Redis实例可能无法处理所有的数据。通过使用多个Redis数据源,可以将数据分区存储在不同的实例中,使得数据处理更加高效。 多租户应用程序:对于多租户应用程序,每个租户可以拥有自己的Redis数据源,以确保…

VScode 多行快速变一行

前言全局说明VScode 多行快速变一行,无意中发现的一、说明 多行快速变一行二、多行内容 假设有以下多行内容 VScode 多行快速变一行1 VScode 多行快速变一行2 VScode 多行快速变一行3 VScode 多行快速变一行4 VScode 多行快速变一行5 VScode 多行快速变一行6三、操作 3.1 先把…

JVM从零到进阶

JVM进阶字节码​ 字节码为编译后的class文件,比如java、scala这些语言都是可编译成字节码的,字节码借助jvm就可以在任何平台运行,可以理解成跨平台的实现 一、运行时数据区 ​ 在程序运行时,由jvm提供的几块内存区域,分别为以下几个区域:本地方法栈:执行native关键字的方…

降本增效,火山引擎ByteHouse助力短剧广告投放效率提升5倍

近几年来,短剧市场呈现出爆发式增长的态势,2023 年中国网络微短剧市场规模为 373.9 亿元,同比上升 267.65%。短剧涵盖爱情、历史、悬疑等各种题材,短小精悍特点也符合现代人快节奏、碎片化的生活方式,观众可以通过手机随时随地观看短剧,满足了不同群体的需求。用数据分析…

基于arduino+as608+360舵机的宿舍指纹锁

需要的制作材料Arduino nano开发板AS608指纹模块MG995 360舵机(360舵机的控制与180舵机控制不相同,360舵机只可以控制旋转的速度,180舵机可以控制旋转的角度)面包板,电线若干准备部分 参考了大佬的代码http://t.csdnimg.cn/GB29Qarduino模块可以看b站视频,,零基础(c语言…

每台服务器都有错包增长,线路问题?交换机问题? 机房里面有鬼?

服务器网卡 RX 方向errors包一直在增长,换模块换尾纤都不好使, 眼看业务上线要延期 客户精神要崩溃,运维心想要遭罪 一、问题现象 服务器侧的运维人员在服务器上使用 ifconfig 命令发现每台服务网卡上都有错包,且一直在不停增长通过图片可以看到网卡RX 方向有大量的 errors…

c#中Debug和Release的区别实验

一、Release版本相比Debug版本的性能提升很大Debug模式在编译时不对源代码进行优化,而Release模式进行了大胆的优化,使得程序在代码大小和运行速度上都有显著提高,下面通过一个对10000条数据进行冒泡排序的例子来比较它们二者的性能差距:来源:https://blog.csdn.net/u010476…

实验3——软件测试

一、实验题目 :软件测试 二、实验目的 1、熟悉开发环境下的自动化测试工具; 1、利用自动化测试工具进行自动化单元测试。 三、实验内容 1、选择开发环境,IDEA或PYCHARM任选其一; 2、基于所选择的开发环境实现对输入的n个整数进行排序的代码; 3、对所编写代码设计测试用例…