CXL.cache H2D Message 释义

news2025/2/25 21:51:08


🔥点击查看精选 CXL 系列文章🔥
🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥


📢 声明

  • 🥭 作者主页:【MangoPapa的CSDN主页】。
  • ⚠️ 本文首发于CSDN,转载或引用请注明出处【https://mangopapa.blog.csdn.net/article/details/132647087】。
  • ⚠️ 本文目的为 个人学习记录知识分享。因个人能力受限,存在协议解读不正确的可能。若您参考本文进行产品设计或进行其他事项并造成了不良后果,本人不承担相关法律责任。
  • ⚠️ 若本文所采用图片或相关引用侵犯了您的合法权益,请联系我进行删除。
  • 😄 欢迎大家指出文章错误,欢迎同行与我交流 ~
  • 📧 邮箱:mangopapa@yeah.net
  • 💬 直达博主:loveic_lovelife 。(搜索或点击扫码)

文章目录

  • 0. 前言
  • 1. Req
  • 2. Rsp
  • 3. Data
  • 4. Q&A
  • 5. 参考




0. 前言

  为了实现 Host 和 Device 之间的缓存一致性,CXL.cache 提供了 D2H、H2D 两个方向的 Cache 管理,每个方向均有 3 个 Channel:Req、Rsp 及 Data。每个 Channel 由细分为多种 Message,如下图所示。本文对 H2D 方向各 Message 的含义进行解释。
在这里插入图片描述



1. Req

  H2D Req 用以保证 Device Cache 跟 Host Cache/Memory 的一致性。

  Host CPU LLC Controller 内的 Local Snoop Filter 通过 H2D Req Channel 对 Device Cache 进行 Snoop。H2D Snoop 的目标为 Device Cache 内缓存的归属于 Host Memory 的 Cacheline 数据及状态。对于 HDM-D,该 Snoop 不区分 HDM-D 的 Bias Mode,Device Cache 内属于 Host Memory 的 Cacheline 都会被 Snoop。

  Snoop 请求有 3 种:

  • SnpData ,当 Host 想要将归属于 Host Memory 的某条 Cacheline 置为 Shared 或 Exclusive 状态时,其向包括 Device Cache 在内的所有 Peer Cache 发送 SnpData 请求。该请求通常由 Host 端的读请求触发,BE 全为 1。只有所有 Peer Cache 均回复了 RspI*类型的 Rsp 时 Host 才能独享该 Cacheline,否则只能 Shared。Device 收到该 SnpData 请求后,一方面可以将 Device Cache 内该 Cacheline Invalidate 掉,另一方面可以降级为 Share。如果 Device Cache 内该 Cacheline 有脏数据,需要回复 Rsp*Fwd*把脏数据写回到 Host。
  • SnpInv ,当 Host 想要将归属于 Host Memory 的某条 Cacheline 独享时,其向包括 Device Cache 在内的所有 Peer Cache 发送 SnpInv 请求来 Invalidate 所有其他 Peer Cache 内的该 Cacheline。该请求通常由 Host 端的写请求触发,BE 全为 1。该请求对于的 D2H Rsp 只能是 RspI*。如果 Device Cache 内该 Cacheline 有脏数据,需要回复 RspIFwdM 把脏数据写回到 Host。
  • SnpCur ,仅获取 Cacheline 最新数据,不改变 Cacheline 状态。该请求相对比 SnpData 柔和了很多,如果 Device Cache 内该 Cacheline 有脏数据,需要回复 RspIFwdM 把脏数据写回到 Host,但仍能保持 Modified 状态,Host Cache 该 Cacheline 状态不变也不会去争夺 Exclusive 权限。

  H2D Req 发出之后,如果 Host 收到了 Rsp*Hit*类型的 D2H Rsp,表明当前请求已经完成;如果收到 Rsp*Fwd*类型的 D2H Rsp,表面 Device 有数据需要写回到 Host,Device 会通过 D2H Data Channel 把数据写回。



2. Rsp

  H2D Rsp 是一条 Message 或多条 Message 的组合,用以响应 D2H 方向的 Cache 请求,有两大作用:① 指示 Host 一致性的完成情况及 Device Cacheline 可进入的状态;②请求 Device 反馈数据。

  H2D Rsp 共 7 种:

  • WritePull ,Host 告知 Device 进行写数据,但无需更改 Cacheline 状态。只有 WrInv 的时候会用到 WritePull,WrInv 的时候需要先反馈 WritePull 再反馈 GO(I/Err)。
  • GO ,Global Observation,相当于 Ack 的作用,指示 Device 中该 Cacheline 可用的状态,GO 包括 GO-M/E/S/I/Err。对于 GO-M,Device Cache 不能 Drop 该 Cacheline 且后续必须该 Cacheline 写回;对于 GO-I/Err,Device 收到后不能缓存该 Cacheline。
  • GO_WritePull ,GO+WritePull 的组合,Device 收到该 Rsp 后写数据到 Host,用于 Post Write。
  • GO_WritePull_Drop ,与 GO_WritePull 类似,但无需写数据到 Host,目前仅能用于 CleanEvict 请求的情况下。对于需要部分写的情况(BE 非全 1,比如*WrInv*),Host 不能反馈 GO_WritePull_Drop,这个 Data 不能 Drop 掉。
  • GO_ERR_WritePull ,与 GO_WritePull 类似,但是请求出现了错误
  • Fast_GO_WritePull ,与 GO_WritePull 类似,但只能作为 WOWrInv/F 等弱内存顺序的写请求。常规情况下(非弱内存顺序),Host 需要完成 Device Cache、Host Cache 及所有 Peer Cache 的全局缓存一致性操作后才能反馈 GO_WritePull;在若内存顺序时,Host 只完成局部缓存一致性即可反馈 Fast_GO_WritePull 要求 Device 写数据过来,响应更快。举个例子:CPU Socket0 的 LLC0 下挂有多个 CXL.cache 设备 D0 & D1,CPU Socket1 的 LLC1 下挂有 CXL.cache 设备 D2 & D3,两个 CPU Socket 通过一致性对称链路连接在一起。D0 向 LLC0 发起 Cache 写请求,LLC0 跟 D0、D1 Cache 完成一致性操作后,不等待跟 LLC1、D2、D3 完成一致性就立刻反馈 Fast_GO_WritePull 给 D0,D0 写数据到 Host。待全局一致性操作完成后进一步给 D0 反馈 ExtCmp。
  • ExtCmp ,跟 Fast_GO_WritePull 一样只能作为 WOWrInv/F 等弱内存顺序的写请求这里的"Ext"个人理解是 Extend 的意思。Fast_GO_WritePull 是局部一致性完成之后发出的第一次响应,ExtCmp 是在全局一致性完成之后在 Fast_GO_WritePull 基础上进一步扩展的 Completion。只有全局一致性完成操作完成之后,Memory 里的数据才敢保证是最新的。

  以上 H2D Rsp 中,CQID 字段采用 D2H 的 CQID。若该 H2D Rsp 需要 D2H 后续反馈数据(*WritePull*类型的 H2D Rsp),该 H2D Rsp 的 RspData 填充 12b 的 UQID,供 D2H Data 的 UQID 字段取用。对于 GO,RspData 字段用以指示当前的 GO 类型:M/E/S/I/Err。

  在以上解释上做点补充:

  • *WritePull*(不含 Drop)是 Host 发给 Device 的指示信号,指示 Device 可以开始往 Host 写数据了,Device 收到*WritePull*之后通过 Data Channel 往 Host 写数据。
  • 对于 D2H 的写请求,Host 反馈给 Device 的 GO 只能是 GO-I/Err。GO 可以在 WritePull 之后到,也可在同一 Flit 中同时到,但不能早到。
  • 对于 Posted Write,Host 只反馈 GO-I/WritePull 的组合 GO_WritePull 即可。对 Device 而言 Device 收到 GO_WritePull 发出写数据之后即可认为该笔写操作完成,对 Host 而言 Host 收到 Device 发的数据即可认为写操作完成。
  • 对于 NP Write,对 Device 而言,强内存顺序时 Device 收到 GO-I、弱内存顺序时候收到 ExtCmp 才算完成。


3. Data

  回应 D2H 所请求的数据。



4. Q&A

  1. 为什么 H2D 方向没有读写请求?
    请问读写什么?CXL.cache 存在的意义是便于 Device 去拿 Host Memory 的数据,是以 D2H 方向的读写访问为主的。Device 取回 Host Memory 数据后放在 Device Cache,Host 只负责来嗅探这些 Cacheline 就好了,没有必要去读这些本属于 Host Memory 的 Cacheline。当然 Host 有必要能够直接取到 Device Memory 的数据,但拿就是 CXL.mem 的故事了,可以通过 M2S Req/RwD 来访问。

  2. 如果 Device Cache 内某归属于 Host Memory 的 Cacheline 为独享状态, Host 还能对其进行 Snoop 吗?
    能。只要是 Device Cache 内归属于 Host Memory 的 Cacheline,Host Snoop Filter 内该 Cacheline 都处于 Active 状态,Host 都可以进行 Snoop。



5. 参考

  1. CXL Base Spec, r3.0
  2. Cache 一致性的那些事儿 (2)–Snoop 方案 - 知乎 (zhihu.com)

— END —


🔥 精选往期 CXL 协议系列文章,请查看【 CXL 专栏】🔥

⬆️ 返回顶部 ⬆️

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

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

相关文章

CXL Memory Cache 分类及 Cacheline 归属问题

🔥点击查看精选 CXL 系列文章🔥 🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥 📢 声明: 🥭 作者主页:【MangoPapa的CSDN主页】。⚠️ 本文首发于CSDN&#xff0c…

【原创】鲲鹏ARM构架openEuler操作系统安装Oracle 19c

作者:einyboy 【原创】鲲鹏ARM构架openEuler操作系统安装Oracle 19c | 云非云计算机科学、自然科学技术科谱http://www.nclound.com/index.php/2023/09/03/%E3%80%90%E5%8E%9F%E5%88%9B%E3%80%91%E9%B2%B2%E9%B9%8Farm%E6%9E%84%E6%9E%B6openeuler%E6%93%8D%E4%BD%9C%E7%B3%BB%…

进程、操作系统

文章目录 一、冯诺依曼体系(Von Neumann Architecture)1. 概述2. CPU 二、操作系统(Operating System)三、进程(process)/任务(task) 一、冯诺依曼体系(Von Neumann Architecture) 1. 概述 分类 CPU 中央处…

自建音乐播放器之一

这里写自定义目录标题 1.1 官方网站 2. Navidrome 简介2.1 简介2.2 特性 3. 准备工作4. 视频教程5. 界面演示5.1 初始化页5.2 专辑页 前言 之前给大家介绍过 Koel 音频流服务,就是为了解决大家的这个问题:下载下来的音乐,只能在本机欣赏&…

2023年“羊城杯”网络安全大赛 Web方向题解wp 全

团队名称:ZhangSan 序号:11 不得不说今年本科组打的是真激烈,初出茅庐的小后生没见过这场面QAQ~ D0n’t pl4y g4m3!!! 简单记录一下,实际做题踩坑很多,尝试很多。 先扫了个目录,扫出start.sh 内容如下…

网络协议分析-http/https/tcp/udp

文章目录 TCP三次握手/TCP三次挥手TCP三次握手TCP四次挥手完整报文 实例代码HttpSampleClientHttpSampleServerHttpsSampleClientHttpsSampleServerTcpSampleClientTcpSampleServerUdpSampleClientUdpSampleSever 资料 TCP三次握手/TCP三次挥手 “三次握手”的目的是“为了防止…

ModaHub魔搭社区专访百度智能云李莅:以后所有的数据库它都会原生地支持用向量?

ModaHub魔搭社区:您是否认为,以后所有的数据库它都会原生地支持用向量? 李莅:传统数据库广义上也分好几类:一类是关系型的,一类是 NoSQL 类的,还有一类是分析型的数据库。我觉得关系型的这种数据…

创建10个线程并发执行(STL/Windows/Linux)

C并发编程入门 目录 STL 写法 #include <thread> #include <iostream> using namespace std;void thread_fun(int arg) {cout << "one STL thread " << arg << " !" << endl; }int main(void) {int thread_count 1…

JS踩坑: for let 和 for var的区别

最近踩了一个js的坑 踩坑代码 如下两段代码&#xff0c;看起来没什么区别&#xff0c;但是实际运行效果却不一样 for (let i 0; i < 10; i) {console.log("for:" i);setTimeout(() > {console.log("setTimeout:" i);}, 1000); }输出&#xff1…

个性化定制你的AI助手,AI指令提示词专家

『个性化定制你的AI助手』围观不如下场&#xff01;需要学习AI指令提升能力的&#xff0c;精准输出想要内容的&#xff0c;快来订阅 javastarboy『AI指令保姆级拆解』合集&#xff01; ▶️你是否尚未挖掘到 AI 的潜力&#xff1f; ▶️你是否经常遇到“答非所问”的“人工智障…

手撕二叉平衡树

今天给大家带来的是平衡树的代码实现&#xff0c;如下&#xff1a; #pragma once #include <iostream> #include <map> #include <set> #include <assert.h> #include <math.h> using namespace std; namespace cc {template<class K, clas…

重装系统全流程

重点&#xff1a; 下载镜像网址&#xff1a;下载 Windows 10 (microsoft.com) 不过不用下载&#xff0c;你的美均相U盘里面有下载好的Win10系统 重点注意&#xff0c;重启后拔优盘&#xff0c;安装时不要联网

sql:SQL优化知识点记录(九)

&#xff08;1&#xff09;小表驱动大表 对sql调优的分析&#xff1a; 排序优化&#xff1a; 数据库的连接方式&#xff0c;里面的数据尽量这样连接&#xff0c;尽量选择第一个方式&#xff0c;因为两个表的连接一共建立5次连接&#xff0c;第二个建立1000次连接&#xff0c;从…

谁该来负责拥塞控制

寻找一种 host 公平而非 packet 公平的方法&#xff0c;有趣的是&#xff0c;CSMA/CD 网络就体现了这种方法。 端到端拥塞控制算法(cca)准不准先不论&#xff0c;仅说让它们运行&#xff0c;被控制的流至少要持续 2 个 RTT&#xff0c;一条持续传输的流是多数 cca 的约束。持续…

12. 自动化项目实战

目录 1. 登录测试 2. 测试首页的帖子列表数不为0 3. 帖子详情页校验 4. 发布帖子 5. 退出登录 自动化项目实施的基本流程如下图所示&#xff1a; 手工测试用例、自动化测试用例。 1. 登录测试 校验登录后主页显示的用户名称和登录时输入的用户名是否相等。 public class…

牛客小白月赛77 D-小Why的密码锁 双哈希做法

这道题没卡自然溢出的哈希&#xff0c;但mod为1e9的哈希被卡了。 双哈希只需把单哈希做法中的lst和ans转换成 <PII&#xff0c; int>类型的即可。 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \nusing nam…

使用Docker安装和部署kkFileView

&#x1f388;1 参考文档 kkFileView官方文档 &#x1f680;2 安装kkFileView 拉取Redis镜像。 docker pull keking/kkfileview启动docker容器。 docker run -it -d -p 8012:8012 keking/kkfileview --restart always解释&#xff1a; docker run redis # 从kkfileview镜像运行…

ArcGIS Pro实践技术应用、制图、空间分析、影像分析、三维建模、空间统计分析与建模、python融合

GIS是利用电子计算机及其外部设备&#xff0c;采集、存储、分析和描述整个或部分地球表面与空间信息系统。简单地讲&#xff0c;它是在一定的地域内&#xff0c;将地理空间信息和 一些与该地域地理信息相关的属性信息结合起来&#xff0c;达到对地理和属性信息的综合管理。GIS的…

c语言每日一练(13)

前言&#xff1a;每日一练系列&#xff0c;每一期都包含5道选择题&#xff0c;2道编程题&#xff0c;博主会尽可能详细地进行讲解&#xff0c;令初学者也能听的清晰。每日一练系列会持续更新&#xff0c;上学期间将看学业情况更新。 五道选择题&#xff1a; 1、程序运行的结果…