0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何保证缓存一致性

SDNLAB 来源:IT奶爸 2023-10-19 17:42 次阅读

“ 本文的参考文章是2022年HOT 34上Intel Rob Blakenship关于CXL缓存一致性的一篇介绍。”

冯诺依曼说,数据应该存在这里,这里变成了存储器;

冯诺依曼说,数据应该在这里被计算,这里变成了CPU

冯诺依曼没有说,CPU太快而存储太慢。CPU没有办法只能把一部分数据留在身边,慢慢地就成了各级缓存。每个CPU都留了一部分数据在身边,就得维护这些数据和内存的一致性。

(有时间可以再聊聊拜占庭将军问题和共识机制,又要分布式的好,还有集中式的一致性,有点类似。)

1缓存/caching

缓存就是临时把数据存在靠近数据要消费的地方。

放数据的地方有不同的级别,不同级别的延时和带宽都不一样,因此就会有预取。更详细的硬件预取器的文章可以参考以下几篇拙作。

预取就是在数据真正需求之前把数据取回来。既然可以预取就说明数据具有两个性质:

空间局部性:一般来说需求的数据在之前的数据附近

时间局部性:一般来说需求的数据总是之前用过的

636609d8-60f4-11ee-939d-92fbcf53809c.png

现代CPU一般都会有多级的缓存,并且他们都可以保持缓存一致。

L1:空间最小,延时最低,带宽最高

L3:空间更大,延时更高,带宽较低,并且支持多个数据需求来源

637e295a-60f4-11ee-939d-92fbcf53809c.png

那么如何保证缓存一致性呢?

首先需要在更新缓存之前,确保使得其他人拥有的该缓存无效。

这可以通过软件的手段,也可以通过硬件的手段。CXL使用硬件一致性。

CXL和CPU的缓存一致性协议相同,都是基于以下几个状态:

Modified:该数据只被缓存到一个cache中,可读可写,但是还没有更新到内存中;

Exclusive:该数据只被缓存到一个cache中,可读可写,数据与内存同步;

Shared:该数据被缓存到多个cache中,可读,数据与内存同步;

Invalid:该数据没有被缓存;

2缓存的家 Home

内存以64Byte为单位分好,这一份就是一个cacheline。

系统通过物理地址把这些单位都安排好,然后交给Home Agent来管理,有且仅有一个。

也就是说一个cacheline,只有一个家,例如在两路系统中,要么是CPU0,要么是CPU1。

比如说,你要读一个cacheline,你会首先在本地的cache里找,如果没有的话,你就会去找它的家。也就是Home Agent会去问其他的CPU是不是有这个缓存。

如果你要写一个cacheline,你也需要找它的家,获取写权限,然后让Home Agent告诉其他的CPU放弃该cacheline,当然在放弃之前,需要把最新的数据回写给Home Agent。

Home Agent怎么问其他CPU,或者修改cacheline的状态呢?这个就是Snoop消息。

3CXL 缓存协议

为支持设备访问系统主存,cxl.cache有15个读写操作指令。

CXL3.0开始,每一个端口可以最多支持16个缓存设备,而在此之前,只能支持一个。

在CPU和CXL设备之间,有两个通讯方向,一个是H2D,一个是D2H。

顾名思义,host和device 的两个方向。而每个方向分成三个通道/channel,分别为请求,响应和数据通道。

63ac2328-60f4-11ee-939d-92fbcf53809c.png

4举个栗子

Device首先发一个RdShared:Read Cacheline Share State。设备获取了某个cacheline并且获得S-state,然后host返回Go-S。表示Home Agent同意了这个请求,并且该设备的cacheline变成了Shared state。

看看就好,不能动手。

63d0e0f0-60f4-11ee-939d-92fbcf53809c.png

这里的peer cache可以是各种邻居:

CXL的邻居设备;

本CPU中的cache;

远端CPU中的cache;

而这里的内存控制器也可以是各种内存:

本CPU的传统DDR

远端CPU的传统DDR;

邻居CXL设备上的CXL.mem;

63f0fc0a-60f4-11ee-939d-92fbcf53809c.png

CXL的15个request,就不再一一解释,露个脸:

Reads: RdShared, RdCurr, RdOwn, RdAny

Read-0: RdownNoData, CLFlush, CacheFlushed

Writes: DirtyEvict, CleanEvict, CleanEvictNoData

Streaming Writes: ItoMWr, WrCur, WOWrInv, WrInv(F)

5内存池化和共享

池化内存和CXL switch是CXL增加的内容,这使得从host到内存的专属分配成为共享内存的一种方式。

CXL3增加了多个host共享内存的支持,利用HDM-DB。

6416081a-60f4-11ee-939d-92fbcf53809c.png

先写到这里,缓存一致性的具体流程不再详细解释,细心一点的朋友可以多找几个例子,按照图示和步骤对照一下。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储器
    +关注

    关注

    38

    文章

    7148

    浏览量

    161992
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10442

    浏览量

    206564
  • 内存
    +关注

    关注

    8

    文章

    2767

    浏览量

    72765
  • 缓存
    +关注

    关注

    1

    文章

    220

    浏览量

    26443

原文标题:感谢CXL同志为维护缓存一致性做出的努力

文章出处:【微信号:SDNLAB,微信公众号:SDNLAB】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    CPU Cache是如何保证缓存一致性的?

    我们介绍`CPU Cache`的组织架构及其进行**读操作**时的寻址方式,但是缓存不仅仅只有读操作,还有 **写操作** ,这会带来一个新的问题
    的头像 发表于 12-04 15:05 563次阅读
    CPU Cache是如何<b class='flag-5'>保证</b><b class='flag-5'>缓存</b><b class='flag-5'>一致性</b>的?

    相位一致性边缘检测

    大家起探讨相位一致性边缘检测,求指导
    发表于 06-11 13:38

    一致性测试

    谁有聚星公司射频一致性测试的程序啊,求个做参考,!
    发表于 07-14 18:11

    c6678cache一致性

    专家您好!    我现在在做6678 cache一致性的东西,想请问一下一致性的维护哪些是硬件实现的,哪些需要程序员实现?谢谢!
    发表于 06-24 04:38

    CAN一致性测试—容错测试

    CAN总线各节点质量的不一致引发的系统瘫痪、错误、死机等问题,CAN一致性测试已成为保证CAN网络安全运行的重要手段,本文将对CAN总线一致性测试中的容错
    发表于 11-22 16:36

    LTE基站一致性测试的类别

    就LTE基站而言,RF测试方法与一致性要求至为关键,然而,调变格式、带宽、资源分配与移动导致选项复杂度增加,因此优化的一致性测试配置参数组合需求更为殷切。第三代合作伙伴项目(3GPP)长期演进计划
    发表于 06-06 06:41

    MIPI一致性测试

    ; 为了保证MIPI信号能够准确测量MIPI D-PHY的一致性测试规范标准(V1.0)要求示波器带宽至少为4G,MIPI M-PHY的一致性测试规范(v 0.84),对于G1,G2,G3的标准要求带宽
    发表于 09-26 13:31

    Infiniium一致性测试软件

    Infiniium 一致性测试软件
    发表于 10-28 17:28

    什么是霍尔元件的一致性

    什么是霍尔元件的一致性?霍尔开关元件主要是通过感应磁性来进行开关机,霍尔元件本身又属于无触点开关,因此具有感应距离。霍尔开关都有个触发值和释放值,触发值是指霍尔元件表面达到参数磁性大小,霍尔元器件
    发表于 10-12 09:34

    如何确保蓝牙设计通过EMI一致性测试 ?

    选择蓝牙模块时需要考虑哪些因素?如何确保蓝牙设计通过EMI一致性测试 ?
    发表于 05-07 06:25

    小编科普CPU缓存一致性协议MESI

    什么是缓存一致性协议MESI?MESI协议中的状态有哪几种?MESI协议中的状态是如何相互转换的?
    发表于 06-17 10:00

    顺序一致性和TSO一致性分别是什么?SC和TSO到底哪个好?

    保证某个内核的fence指令前的所有memory访问能够在fence指令后的memory访问之前完成。实际上fence指令(或者说是memory barrier)在后续我们即将介绍的弱序内存一致性
    发表于 07-19 14:54

    请教大神在Arm AMBA协议集中,什么叫缓存一致性

    请教大神在Arm AMBA协议集中,什么叫缓存一致性
    发表于 09-29 14:51

    i.MX8M可以调用哪些刷新/无效缓存函数来保证缓存一致性

    的是,我们现在在较小的传输中遇到缓存问题。有时,当缓冲区被复制到用户空间时,64 字节的数据没有被正确的数据 buf 填充为 0xff。我们在次传输中传输了大约 1.1 MBytes,有时
    发表于 04-27 08:30

    你了解过Linux内核中的内存屏障?

    之前一直认为linux中很多东西是用来保证缓存一致性的,其实不是。缓存一致性绝大部分是靠硬件机制实现的,只有在带lock前缀的指令执行时才与
    发表于 05-10 14:20 424次阅读