CXL.cachemem 简介(背景通道)

news2025/1/21 6:36:05


🔥点击查看精选 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.coloradmin.cn/o/966639.html

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

相关文章

无涯教程-JavaScript - TDIST函数

The TDIST function replaces the T.DIST.2T & T.DIST.RT functions in Excel 2010. 描述 该函数返回学生t分布的百分点(概率)​​,其中数值(x)是t的计算值,将为其计算百分点。 t分布用于小样本数据集的假设检验。使用此函数代替t分布的临界值表。 语法 TDIST(x,deg_fr…

iOS 设置下载部分文件,如何获取完整文件的大小

在视频的需求中,遇到这样一个需求,播放一视频的时候,要预下载 后面10条视频,但是只下载后面十条视频的前面1M 实现方法 1 创建请求时设置cacheLength resource [[IdiotResource alloc] init];resource.requestURL task.request…

屋大人少,凶多吉少

在这个世界上,包括人在内的万事万物,都是有自己的气场存在的。 那么,人所产生的气场,我们称之为人气。 道法自然,阴阳二象,同样,人的身上也是有阴阳二气, 二气平衡充盈,会…

【Python】批量下载页面资源

【背景】 有一些非常不错的资源网站,比如一些MP3资源网站。资源很丰富,但是每一个资源都不大,一个一个下载费时费力,想用Python快速实现可复用的批量下载程序。 【思路】 获得包含资源链接的静态页面,用beautifulsoup分析页面,获得所有MP3资源的实际地址,然后下载。…

将 Spring Boot 应用程序与 Amazon DocumentDB 集成

Amazon DocumentDB(与 MongoDB 兼容)是一种可扩展、高度持久和完全托管的数据库服务,用于操作任务关键型 MongoDB 工作负载。在 Amazon DocumentDB 上,您可以使用相同的 MongoDB 应用程序代码、驱动程序和工具来运行、管理和扩展工…

bazel介绍以及其发展历史

简介 Bazel Google开源的,是一款与 Make、Maven 和 Gradle 类似的开源构建和测试工具。 它使用人类可读的高级构建语言。Bazel 支持多种语言的项目,可为多个平台构建输出。Bazel支持任意大小的构建目标,并支持跨多个代码库和大量用户的大型代…

JavaSE基础(1)

1 初识Java 知识导图 1.1 Java简介及发展史 1.1.1 Java是什么 Java是一种优秀的程序设计语言,它具有令人赏心悦目的语法和易于理解的语义。 不仅如此,Java还是一个有一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软…

系统学习Linux-PXE无人值守装机(附改密)

目录 pxe实现系统自动安装pxe工作原理 大致的工作过程如下: PXE的组件: 一、配置vsftpd 二、配置tftp 三、准备pxelinx.0文件、引导文件、内核文件 四、配置dhcp 配置ip 配置dhcp 五、创建default文件 六、新建测试主机用来测试装机效果 七、…

github指南

记录一些Github上的宝贵功能 1、github trending/star 1.1查看github的热门趋势 可以选择点击上面热门趋势的链接,从主页点进去的方式如下 在这个页面中,你可以选择language/data range等来搜索到你想要的 1.2 查看github的star排行 比如&#xff1a…

出货量腰斩,不用中国芯片,美国PC巨头要凉了,苹果成为大赢家

市调机构Canalys公布的二季度数据显示美国PC巨头戴尔在中国市场的出货量同比暴跌52%,显示出它在公开宣布舍弃中国芯片之后,中国消费者正纷纷抛弃它,毕竟如今的PC品牌如此之多,完全有更多的替代选择。 Canalys公布的数据显示&#…

Python Opencv实践 - 拉普拉斯(Laplacian)算子边缘检测

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_GRAYSCALE) print(img.shape)#拉普拉斯边缘检测 #cv.Laplacian(src, ddepth, dst, ksize, scale, delta, borderType) #src:原图 …

正中优配:沪指震荡涨0.23%,保险、酿酒等板块走强,半导体板块下挫

1日早盘,沪指、深成指盘中强势震动上扬,创业板指回落翻绿,科创50指数跌超1%;两市半日成交缺乏5000亿元。 到午间收盘,沪指涨0.23%报3127.19点,深成指涨0.25%,创业板指跌0.23%,科创5…

Ubuntu22.04安装Mongodb7.0

Ubuntu安装Mongodb 1.平台支持2.安装MongoDB社区版2.1导入包管理系统使用的公钥2.2为MongoDB创建列表文件2.3重新加载本地包数据库2.4安装MongoDB包1.安装最新版MongoDB2.安装指定版MongoDB 3.运行MongoDB社区版1.目录2.配置文件3.初始化系统4.启动MongoDB5.验证MongoDB是否成功…

列表、字典的删除操作

1.列表的删除操作,可以使用del 列表[索引]、列表.pop(索引)、列表.remove(元素)、列表.clear() del(如果不指定列表索引,就是删除整个列表,再使用就会出现 name XX is not defined) a [10, 20, 30, 40] print(f"删除前为:{a}") de…

简易虚拟培训系统-UI控件的应用5

目录 Toggle控件简介 示例-使用Toggle组实现主轴速度选择 本篇介绍UI控件Toggle,尝试一个小示例-使用单选框实现速度的选择控制。 Toggle控件简介 1. Toggle的结构如下:最重要的Toggle组件挂在Toggle节点上,下面的Image组件用于显示单选框…

大数据Flink(七十一):SQL的时间属性

文章目录 SQL的时间属性 一、Flink三种时间属性简介

【jsthree.js】全景vr看房进阶版

three小结: Scene场景 指包含了所有要渲染和呈现的三维对象、光源、相机以及其他相关元素的环境;场景可以被渲染引擎或图形库加载和处理,以生成最终的图像或动画 常见属性: scene.background new THREE.Color(0x000000); // …

【01背包理论】01背包问题dp[j](滚动数组) <动态规划板子>

【01背包理论】01背包问题dp[j] 有 n 件物品和一个最多能背重量为 w 的背包。 第 i 件物品的重量是 weight[i],得到的价值是 value[i] 。 每件物品只有一个,求解将哪些物品装入背包里物品价值总和最大。 题解 动态规划 确定 dp 数组以及下标的含义 滚…

wxpython: 数字时钟秒表

wxpython 数字时钟秒表;定时器和线程>示例 编写 wx_clock.py 如下 # -*- coding: utf-8 -*- """ 定时器和线程>示例""" import wx import time import threadingclass MyFrame(wx.Frame): def __init__(self):""…

【Java核心知识】线程基础知识

文章目录 线程线程与进程的区别创建线程的方法方法一:继承Thread类方法二:实现Runnable接口方法三:使用Callable和FutureTask创建带返回值的线程方法四:通过线程池创建线程 线程的基本操作线程的状态守护线程 线程 线程与进程的区…