CXL.cachemem 简介(背景通道)



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


📢 声明

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

文章目录

  • 1. CXL.cache
    • 1.1 背景意义
    • 1.2 Channel 简介
      • 1.2.1 Pre-allocated 怎么理解?
  • 2. CXL.mem
    • 2.1 背景意义
    • 2.2 Channel 简介


1. CXL.cache

  在 CXL 支持的三种协议中,CXL.cache 协议是可选的。CXL.cache 主要目的是为了便于设备访问主存(Device 访问 Host-attached Memory)。

1.1 背景意义

  采用 PCIe 的方案中,Device 在需要访问 Host Memory 的时候,通过 PCIe 给 Host 发送 Memory 读写请求,这样一来一回时延较大。为了降低 Device 访问 Host Memory 的时延,可以在 Device 端增加一块 Cache,将 Device 经常用到的 Host Memory 的数据缓存在 Device Cache 内。这样,当 Device 侧的 Processor 需要访问 Host Memory 时,如果访问的地址刚好在 Device Cache 内,则直接对 Device Cache 进行访问,能够大大减少访问时延,实现 Device 对 Host Memory 的低时延、大带宽访问。

  考虑到 Host Memory 同一地址数据可能被缓存在了多个 Cache 中,这就涉及到多个 Cache 的一致性(或称缓存一致性)的问题。CXL.cache 就是为解决缓存一致性而生的,通过 CXL.cache 来实现 Host 与 Device 的缓存一致性。

1.2 Channel 简介

  为了实现 Host 和 Device 之间的缓存一致性,CXL.cache 提供了 D2H、H2D 两个方向的 Cache 管理,每个方向均有 3 个 Channel:Req、Rsp 及 Data。CXL.cache 的 6 个 Channel 作用概况如下:

  • D2H Req ,在 Type 1 及 Type 2 设备中用以 Device 访问 Host Memory,在 HDM-D Host Bias 设备中也用于 Device 访问 Device Memory。若访问的地址位于 Host Memory,Host 会通过 H2D Rsp/Data 反馈相关响应/数据;若访问的地址位于 Device Memory,Host 会通过 CXL.mem 的 M2S Req/RwD 把请求转发回 Device。
  • H2D Req ,Host 通过该 Channel 来 Snoop Type 1 或 Type 2 Device Cache 中归属于 Host Memory 的 Cacheline,并通过 D2H Rsp Data 来反馈 Snoop Response 及 Data。

在这里插入图片描述

  在 CXL.cache 的 6 个 Channel 中,Rsp 及 Data 在发送之前均已在接收端提前分配(Pre-allocated)好相关 Buffer,且两者有独立的 Channel(有别于 CXL.mem 的 RwD、NDR,CXL.mem 的 Rsp+Data 共用 RwD,单纯的 Rsp 用 NDR)。

1.2.1 Pre-allocated 怎么理解?

  H2D 方向发出的请求可以认为是读请求,D2H 方向既有读请求又有写请求。对于写请求,在发送请求之前需要确保对端有足够的 Credit 来接收当前 Req 及 Data;对于读请求,在发送请求之前,一方面确保对端有足够的 Credit 来接收当前 Req,另一方面需确保本段有足够的 Buffer 来接收对端反馈回来的数据。对于读响应,本端在发出 Req 之前即已分配好相应 Entry 来接收 Rsp 和 Data;对于写响应,一方面本端在发出 Req 之前即已分配好响应 Entry 来接收 Rsp,另一方面对端收到 Req 后也已分配好相应 Entry 来接收数据。

2. CXL.mem

2.1 背景意义

  在 CXL 支持的三种协议中,CXL.mem 协议是可选的。CXL.mem 主要目的是为了便于 Host 直接访问 Device Memory。

  纯粹的 PCIe 方案中,Host Processor Cache 无法通过 Prefetch 的方式拿到 Device Memory 的数据,也无法将 Cache 中的数据直接 Flush 到 Device Memory。Host 想要把 Processor 处理产生的数据存放到 Device Memory 需要以下流程:

  1. Host Processor 把数据缓存至 Host Cache;
  2. Host Cache 把数据 Flush 到 Host Memory;
  3. Host 通过中断通知 Device 来取数据;
  4. Device DMA 通过 DMA 来 Host Memory 读数据,并写回到 Device Memory。

  以上方案较为繁杂,不利于 Host 对 Device Memory 的使用。在采用 CXL.mem 的方案中,Device Memory 跟 Host Memory 一同编址,Host 可以绕过 Host Memory 及中断直接访问到 Device Memory。以上流程可简化为:

  1. Host Processor 把数据缓存至 Host Cache;
  2. Host Cache 通过 CXL.mem 把数据 Flush 到 Device Memory。

  显然,采用 CXL.mem 的方案能够实现 Host 对 Device Memory 的高效访问。除了访问效率,Processor 能够使用的 Memory 容量也得到了扩展。

2.2 Channel 简介

  CXL.mem 提供了双向 6 个 Channel 来实现 ①Host 对 Device Memory 的直接访问;②Device 对 Host Cache 的 Back Invalidation。

在这里插入图片描述

  两个方向为:M2S 及 S2M。M 负责生成读写请求,S 负责反馈响应及数据。举个例子:CPU Coherency Engine 作为 Master,Device Memory 作为 Subordinate。若 S 为 HDM-D 或 HDM-DB,CXL.mem 默认存在 Device Coherency Engine,DCOH 负责实现 Device Cache 的 Snooping 等 Coherency 相关功能并负责更新元数据。

  6 个 Channel 分别为:M2S Req、RwD、BIRsp,S2M NDR、DRS、BISnp。BISnp/BIRsp 非必须,但对于支持 HDM-DB 的设备必须实现 BI* Channel。


— END —


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

⬆️ 返回顶部 ⬆️

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4.0 Spring与Dubbo整合原理与源码分析

#Dubbo# 文章介绍 Dubbo中propertie文件解析以及处理原理Dubbo中@Service注解解析以及处理原理Dubbo中@Reference注解解析以及处理原理1.0 整体架构和流程 应用启动类与配置 public class Application {public static void main(String[] args) throws Exception {Annotation…

2023-9-3 筛质数

题目链接&#xff1a;筛质数 埃氏筛法 #include <iostream>using namespace std;const int N 1000010;int cnt; bool st[N];bool get_primes(int n) {for(int i 2; i < n; i ){if(!st[i]){cnt ;for(int j i i; j < n; j i) st[j] true;}} }int main() {int …

对Excel表中归类的文件夹进行自动分类

首先把excel表另存为.txt文件&#xff08;注意&#xff1a;刚开始可能是ANSI格式&#xff0c;需要转成UTF-8格式&#xff09;&#xff1b;再新建一个.txt文件&#xff0c;重命名成.bat文件(注意&#xff1a;直接创建的如果是是UTF-8格式&#xff0c;最好转成ANSI格式&#xff0…

AUTOSAR规范与ECU软件开发(实践篇)7.11 MCAL配置验证与代码生成

在配置完所需MCAL模块之后&#xff0c; 就可以进行配置验证与代码生成。MCAL配置工具的工具栏如图7.64所示。 其中&#xff0c; 右起第二个按钮为“Verify selected project”&#xff0c; 点击之后将进行配置验证。 右起第一个按钮为“Generate Code for the currently select…

二、Mycat2 相关概念及读写分离

第三章 Mycat2 相关概念 3.1 概念描述 1、分库分表 按照一定规则把数据库中的表拆分为多个带有数据库实例,物理库,物理表访问路 径的分表。 解读&#xff1a;分库&#xff1a;一个电商项目&#xff0c;分为用户库、订单库等等。 分表&#xff1a;一张订单表数据数百万&#xff…

ReactNative 井字游戏 实战

效果展示 需要的插件准备 此实战项目需要用到两个插件。 react-native-snackbar 底部信息提示组件。 react-native-vector-icons 图标组件。 安装组件&#xff1a; npm i react-native-snackbar npm i react-native-vector-icons npm i types/react-native-vector-icons /…

mysql:[Some non-transactional changed tables couldn‘t be rolled back]不支持事务

1. mysql创建表时默认引擎MyIsam&#xff0c;因此不支持事务的操作&#xff1b; 2. 修改mysql的默认引擎&#xff0c;可以使用show engine命令查看支持的引擎&#xff1a; 【my.conf详情说明】my.cnf配置文件注释详解_xiaolin01999的博客-CSDN博客 3. 原来使用MyIsam创建的表…

使用MDK5的一些偏僻使用方法和谋个功能的作用

程序下载后无法运行 需要勾选如下库&#xff0c;是优化后的库&#xff1b; MicroLib和标准C库之间的主要区别是: 1、MicroLib是专为深度嵌入式应用程序而设计的。 2、MicroLib经过优化&#xff0c;比使用ARM标准库使用更少的代码和数据内存。 3、MicroLib被设计成在没有操作…

stm32之28.ADC

须看原理图&#xff08;引脚、电压值、ADC几号通道&#xff09;配置 。 若对比值0~4096 模拟电压/参考电压4096/x 假设模拟电压2.1V&#xff0c;参考电压3.3v&#xff0c;4096/x3.3/2.1 ->3.3x2.1x4096 ->x2,606.5 也可反推出模拟电压 ADC转换时间 ADC时钟来源于…

【LeetCode每日一题合集】2023.8.14-2023.8.20(⭐切披萨3n块披萨)

文章目录 617. 合并二叉树833. 字符串中的查找与替换&#xff08;模拟&#xff09;2682. 找出转圈游戏输家&#xff08;模拟&#xff09;1444. 切披萨的方案数&#xff08;⭐⭐⭐⭐⭐&#xff09;解法——从递归到递推到优化&#xff08;二维前缀和记忆化搜索&#xff09; 1388…

【ag-grid-vue】列定义(Updating Column Definitions)

列定义一节解释了如何配置列。可以在初始设置列之后更改列的配置。本节介绍如何更新列定义。 添加和删除列 可以通过更新提供给网格的列定义列表来添加和删除列。当设置新列时&#xff0c;网格将与当前列进行比较&#xff0c;并计算出哪些列是旧的(要删除)、哪些列是新的(创建…

Linux简介

为什么选择Linux&#xff1f; Linux是一个优秀的操作系统 硬件方面&#xff1a;适合嵌入式&#xff0c;服务器&#xff0c;移动设备&#xff0c;桌面&#xff0c;计算机集群和超级计算机应用方面&#xff1a;人工智能&#xff0c;分布式计算&#xff0c;云计算&#xff0c;大数…

Win7系统电脑开机总出现硬盘自检的简单解决方法

你是不是经常会遇到电脑开机进行硬盘自检&#xff0c;而且每次开机都检查很久不能跳过&#xff1b;怎么才能跳过这一步骤呢&#xff1f;下面教大家如何让Win7系统电脑在开机的时候跳过硬盘自检这一步骤&#xff0c;加快开机时间。 解决步骤&#xff1a; 1、按下“Win R”快捷键…

【前端demo】倒计时器 可选择时间 原生实现

文章目录 效果过程日历与获取时间居中背景与字计时器清空计时器 代码HTMLCSSJS 其他demo 效果 效果预览&#xff1a;倒计时器 可选择时间 (codepen.io) 参考&#xff1a; Simple Clock/Countdown timer (codepen.io) 前端页面实现倒计时效果的几种方法_前端倒计时__Boboy的…

如何使用Puppeteer进行金融数据抓取和预测

导语 Puppeteer是一个基于Node.js的库&#xff0c;可以用来控制Chrome或Chromium浏览器&#xff0c;实现网页操作、截图、PDF生成等功能。本文将介绍如何使用Puppeteer进行金融数据抓取和预测&#xff0c;以及如何使用亿牛云爬虫代理提高爬虫效果。 概述 金融数据抓取是指从…

【Linux】简单的小程序:进度条

在学习进度条之前&#xff0c;需要学一点预备知识。 1. 预备知识 回车换行 现在的换行符&#xff08;\n&#xff09;其实就是回车式换行符&#xff0c;另起一行&#xff0c;光标指向最新一行的开头。回车符&#xff08;\r&#xff09;是光标指向这一行的开头。 缓冲区 &a…

腾讯云免费SSL证书申请流程_每年免费50个HTTPS证书

2023腾讯云免费SSL证书申请流程&#xff0c;一个腾讯云账号可以申请50张免费SSL证书&#xff0c;免费SSL证书为DV证书&#xff0c;仅支持单一域名&#xff0c;申请腾讯云免费SSL证书3分钟即可申请成功&#xff0c;免费SSL证书品牌为TrustAsia亚洲诚信&#xff0c;腾讯云百科分享…

使用gradio库的File模块实现文件上传和生成可下载文件

使用gradio库的File模块实现文件上传和生成可下载文件 文章目录 使用gradio库的File模块实现文件上传和生成可下载文件一、背景二、介绍1、gradio简介2、File模块简介3、tempfile 模块 三、文件上传demo实战1、具体代码2、运行样例 一、背景 在用Gradio设计改写效果审核AI的de…

华为云软件精英实战营——感受软件改变世界,享受Coding乐趣

机器人已经在诸多领域显现出巨大的商业价值&#xff0c;华为云计算致力于以云助端的方式为机器人产业带来全新机会 如果您是开发爱好者&#xff0c;想了解华为云&#xff0c;想和其他自由开发者交流经验&#xff1b; 如果您是学生&#xff0c;想和正在从事软件开发行业的大佬…

使用 Python 和 dash 创建仪表板

推荐&#xff1a;使用 NSDT场景编辑器快速搭建3D应用场景 介绍 在数据科学和分析领域&#xff0c;数据的力量不仅通过提取见解来释放&#xff0c;而且还通过有效地传达这些见解来释放;这就是数据可视化发挥作用的地方。 数据可视化是信息和数据的图形表示。它使用图表、图形和…