CXL 内存交织(Memory Interleaving)



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


📢 声明

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

文章目录

  • 0. 缩写
  • 1. CXL 内存交织概念
  • 2. CXL 内存交织实现
    • 2.1 HDM Decoder 基本介绍
      • 2.1.1 交织集/交织设置(Interleave Set)
    • 2.2 HDM Decoder 相关寄存器
      • 2.2.1 CXL HDM Decoder 能力结构
        • 2.2.1.1 状态
        • 2.2.1.2 控制
      • 2.2.2 CXL HDM Decoder 扩展能力结构
      • 2.2.3 Desired_Interleave @CXL DVSEC ID0
    • 2.3 HDM Decoder 解码规则
      • 2.3.1 CXL RP/USP 中的 HDM 地址解码
      • 2.3.2 CXL Device 中的 HDM 地址解码
  • 3. CXL 内存交织举例
  • 4. Q&A
  • 5. 参考


0. 缩写

缩略词释义
BIBack Invalidation
DPADevice Physical Address,设备物理地址
DSPDownstream Switch Port,Switch 的下行端口
eRCDExclusive Restricted CXL Device,只支持 CXL 1.1 的 CXL Device
HDMHost-managed Device Memory,由 Host 管理的 Device Memory
HPAHost Physical Address,主机物理地址
IGInterleave Granularity,交织粒度
IWInterleave Way,交织路数
RPRoot Port,根节点
UIOUnordered Input/Output,无序 IO
USPUpstream Switch Port,Switch 的上行端口


1. CXL 内存交织概念

  Memory Interleaving,内存交织,是一种内存访问方法,其将一段连续的内存地址映射到不同的内存,通过在不同内存上交叉访问来提高内存访问性能。一个带有 4 Bank 的内存交织访问示意图如下,其中红色 Bank 表示其正在进行自刷新且不可用。

https://en.wikipedia.org/wiki/Interleaved_memory#/media/File:Interleaving.gif

  对于 CXL 而言,CXL 内存交织是指把一段地址连续的 HDM 地址以统一的地址间隔映射到不同 CXL.mem Device 的 HDM 中。

  CXL 1.1 时,对于 Multi-head 的 eRCD,若多个 eRCD UP 直连到同一 CPU 内的 RCH 上,改 CPU 可以通过不同发 Flex Bus 来交织访问改 eRCD 的 HDM 空间。相关介绍可以参考《Multi-headed eRCD》。

  CXL 2.0 时支持多个 CXL Device 之间的内存交织,通过配置传输链路上相关 Host Bridge、USP 及 Device 内的 HDM Decoder 来实现相关控制。进一步地,CXL 支持在同一跨主桥逻辑下的 多个 CXL 主桥 之间、同一 CXL 主桥下的 多个 RP 之间、同一 Switch 内的 多个 DSP 之间有选择地进行 单级或多级 Interleave 访问。



2. CXL 内存交织实现

  CXL 主桥、USP 及 Device 基于 HDM Decoder 来实现内存交织中的 CXL.mem 包路由及 HPA->DPA 的地址映射。多个 CXL 主桥之间的 Interleave 由 跨主桥逻辑内的 Host 属性寄存器 进行控制。

2.1 HDM Decoder 基本介绍

  HDM Decoder 是 HDM 地址解码器,CXL 组件依据 HDM Decoder 内的相关配置把上层设备发来的 CXL.mem 访问请求路由到不同的端口或设备区域。

  HDM Decoder 位于 Host Bridge、USP 及 CXL Device 中:

  • 对于 Host Bridge 及 USP 而言,HDM Decoder 主要起路由作用,将 Host Bridge 或 USP 下发的 Transaction 分配到对应的 RP 或 DSP 上;
  • 对于 Device,HDM Decoder 主要用于把带有 Interleave 信息的 HPA 映射到 DPA。

2.1.1 交织集/交织设置(Interleave Set)

  同一 HDM Decoder 控制下的一组内存交织的 CXL Device 称为一个交织集(Interleave Set),HDM Decoder 基于以下关键参数对内存交织行为进行控制:

  • Base HPA ,HPA 基地址,要求 256 MB 地址对齐,即地址低 28b 为 0。
  • Size ,内存交织地址空间大小,需要为 256 MB 的整数倍,从 HPA Base ~ (HPA Base + Size)之间为当前 HDM Decoder 所要控制的内存交织地址范围。
  • Interleave Way (IW),内存交织路数,即把当前的 Size 的 HPA 空间映射到 IW 指示的路数,CXL 2.0 时 CXL RP/DSP/Device 支持 1/2/4/8 路交织,到 CXL 3.0 后同一 CXL Device 内还支持 3/6/12/16 路交织(RP/USP 不支持)
  • Interleave Granularity (IG),内存交织粒度,每隔 IG 所指示的粒度,就将相关包路由到下一路出口上;支持 256B、512B、1KB、2KB、4KB、8KB、16KB 粒度的内存交织,分别对应 HPA[8]~HPA[14]。对于 RCH 除外的 CXL Host Bridge 必须支持所有 IG(HPA[8:14]共七种),对于 CXL Type3 Device 必须支持其 HDM Decoder 能力结构显示的 HPA[8:11]或 HPA[12:14]中的至少一组 IG。
  • Target ,内存交织目标,可以为 CXL 根节点(RP)或 Switch 下行端口(DSP)。

  软件通过配置 HDM Decoder 来确定一个 Interleave Set。若同一 CXL 组件内存在多个 HDM Decoder,软件需确保同一组件内部多个 Decoder 之间以及同一 Path 内上下游 HDM Decoder 之间的行为一致,并通过 Commit Flow 发起自身一致性检查。对于同一组件内的多个 HDM Decoder,不能出现地址重合之类的错误;对于同一 Path 上的 HDM Decoder,上游 Decoder 的 Range 应包含下属 HDM Decoder 的 Range。

2.2 HDM Decoder 相关寄存器

2.2.1 CXL HDM Decoder 能力结构

  CXL 组件采用 CXL HDM Decoder 能力结构对其内部的 HDM Decoder 进行控制或指示,其寄存器分布如下图所示。

在这里插入图片描述

  对于 CXL 主桥(HID=“ACPI0016”),若其下存在多个 CXL RP,该 CXL 主桥的 CHBCR 中必须实现该能力结构;对于 CXL Switch,其 USP Component Register Block 中必须实现该能力结构;对于非 eRCD 的 Type 3 Device 或支持 BI/UIO 的 Type2 Device,应实现该能力结构,将 HPA 映射到其内部 DPA。

2.2.1.1 状态

  HDM Decoder 能力结构能够指示以下能力/参数/状态:

  • Decoder Count,当前组件内支持的 HDM Decoder 的数量,CXL Device 内最所支持 10 个 HDM Decoder,RP 和 Switch 最多支持 32 个;
  • Target Count,每个 Decoder 支持下属 1/2/4/8 个目标端口;
  • UIO Capable、Meta-NXM Capable,是否支持 UIO、Meta-NXM;
  • Address Interleave Capable,支持基于哪些 HPA 地址位的交织地址,有 HPA[8:11]和 HPA[12:14]两组;
  • 是否支持 3/6/12 或 16 路地址交织;、
  • ……

2.2.1.2 控制

  HDM Decoder 能力结构能够控制以下参数:

  • 是否开启 HDM Decoder
  • 每个 HDM Decoder 的基地址及 Size
  • 每个 HDM Decoder 的交织路数
  • 目标类型,为 HDM-D/DB 还是 HDM-H
  • 是否使能 BI 或 UIO 中的地址交织
  • 每一路所对应的 Port ID
  • ……

  每个 HDM Decoder 都有 Commit 相关寄存器,Commit 可以理解为 Decoder Info Valid,在配置完 HDM Decoder 之后需要按从前往后的顺序配置 Commit=1 并将其 Lock 住。

2.2.2 CXL HDM Decoder 扩展能力结构

  CXL HDM Decoder 能力结构支持的 HDM Decoder 数量有限,CXL 协议提供了一组 CXL HDM Decoder 扩展能力结构(CXL Extended HDM Decoder Capability Structure)以支持更多的 HDM Decoder 数量。CXL HDM Decoder 扩展能力结构内的寄存器布局与 CXL HDM Decoder Capability Structure 完全一致,两者 Capability ID 不同。

2.2.3 Desired_Interleave @CXL DVSEC ID0

  在 CXL Device 的 CXL PCIe DVSEC 中,HDM Range 寄存器内有换个 Desired_Interleave 字段来指示当前 HDM Range 所预期的内存交织粒度。CXL 1.1 的时候只支持 256B 和 4KB 两种粒度,到了 CXL 2.0 增加支持 512B, 1KB, 2KB, 8KB, 16KB 交织粒度。

  对于支持 CXL.mem 的 eRCD,若其通过多个 CXL Link 连接到了单个 CPU 上,该字段用以指示 Device 期望的交织粒度。BIOS 配置 CPU 通过交织的方式来访问该 HDM Range,在 Host 支持的范围内访问粒度可以采用 Device 所期望的粒度或最接近期望值的粒度。

  对于 Non-eRCD,该字段表示该设备期望交织粒度的最小值,可以视为一种 Hint。若 Device 实现了 HDM Decoder 能力结构,软件配置的 IG 建议大于等于 Device 所指示的 Desired_Interleave,即便比 Desired_Interleave 小,Device 也要保证内存交织功能正确。

  对于同一个 CXL Device,若当前 CXL Range 内的多个 DPA Range 有不同的 Desired_Interleave 值,Device 应采用所有 DPA Range 中的最大 Desired_Interleave 值;对于同一 Interleave Set 中的多个 Device,若其上报的 Desired_Interleave 值不同,软件选择最小的 Desired_Interleave 值。

2.3 HDM Decoder 解码规则

2.3.1 CXL RP/USP 中的 HDM 地址解码

  若开启了 CXL 内存交织,CXL RP 及 USP 中的 HDM Decoder 负责检测 HPA 是否位于 Active Decoder 的 HPA Base ~HPA+Size 之间,

  • 若没落在任何 Decoder 范围内,
    • Write 直接 Drop;
    • Read 且 Decoder Error Enable=0,直接反馈全 1;
    • Read 且 Decoder Error Enable=1,反馈 Poison。
  • 若落在了某 Decoder 范围之内,
    • 依据 HDM Decoder 中的交织粒度及交织路数参数,提取当前 HPA 相关地址位,判断需要路由到哪一路端口中;
    • 读取上述端口号,发送到上述请求到相关该端口。

2.3.2 CXL Device 中的 HDM 地址解码

  若开启了 CXL 内存交织,CXL Device 中的 HDM Decoder 负责检测是否位于 Active Decoder 的 HPA Base ~HPA+Size 之间,并将 HPA 还原为 DPA,

  • 若没落在任何 Decoder 范围内,
    • Write 直接 Drop;
    • Read 且 Decoder Error Enable=0,直接反馈全 1;
    • Read 且 Decoder Error Enable=1,反馈 Poison。
  • 若落在了某 Decoder 范围之内,抹去 HPA 内用以 Interleave 用的地址位作为 DPA Offset,加上 DPA.Base 作为 DPA,Device 内部访问 DPA。


3. CXL 内存交织举例

  CXL 内存交织支持单级或多级 Interleave,其中 Target 为 RP、DSP 的层级中 Interleave 路数只能为 1/2/4/8 路,跨主桥逻辑及 CXL 设备内支持 3/6/12/16 路 Interleave。

  下图是一个对 16~20 TB 的 HPA 空间进行 8 路三级 Interleave 的例子。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-luSeVGfr-1693265230892)(RackMultipart20230828-1-a7e9p4_html_b1f6f63b7c816202.gif)]

  上图释义如下:

  • 跨主桥逻辑内设置为 2 路交织,IG 为 4KB,依据 HPA[12]进行路由,即[16TB+2*n*4KB,16TB+2*n*4KB+4KB)区间内的 CXL.mem 请求路由至左侧的 CXL 主桥,[16TB+2*n*4KB+4KB,16TB+2*n*4KB+8KB)区间内的 CXL.mem 请求路由至右侧的 CXL 主桥;
  • 设置每一个 CXL 主桥的 HDM Decoder 为 2 路 2KB 粒度的交织,依据 HPA[11]决定路由到其下哪个 RP
  • 设置每一个 CXL Switch USP 的 HDM Decoder 为 2 路 1KB 粒度的交织,依据 HPA[10]决定路由到哪个 DSP;
  • 设置 CXL Device 为 8 路 1KB 交织,Device 以此为依据取 CXL.mem HPA[12:10]=0,转换为 DPA 后对 DPA 进行访问。


4. Q&A

  1. 同一 Decoder 下不同 Way 之间的 IG 可以不同吗?
    不可以,同一 Decoder 内只要=存在一个 IG 寄存器,所有 Way 均遵从该配置。

  2. RP/DSP 中没有 HDM Decoder 吗?
    RP 及 DSP 中没用 HDM Decoder,这两者的 Decode 之后的 Transaction 接收方,其根 USP 或 Device UP 是一对一点到点连接,无需 Interleave。

  3. Interleave Set 是如何建立的?
    配置链路上的各个 HDM Decoder 能力结构。

  4. HDM Decoder 能力结构中的 Commit 是什么意思?
    简单理解为 HDM Decoder 的 Info_Valid 吧。

  5. 上边下来的 CXL.mem 包没用 BDF 号吗?指定了 BDF 号的话,是怎么实现 Interleave 的?要改 BDF 吗?
    Interleave 仅限 CXL.mem 的包,其不是 PCIe 那种 TLP,没用 BDF,而是采用 HDR 或 PBR 的路由方式。



5. 参考

  1. CXL Base Spec, r3.0
  2. Interleaved memory - Wikipedia
  3. What is Interleaved Memory? | Webopedia
  4. 聊一聊DDR(7)—— 内存交织(memory interleaving) - 知乎 (zhihu.com)
  5. DDR 的多通道(channel)和交织(interleave) - 简书 (jianshu.com)
  6. memory interleaving(内存交织)_南风在冥想的博客-CSDN 博客
  7. 内存系列二:深入理解硬件原理- 知乎 (zhihu.com)
  8. 存储器术语interleave 解释_雨轩学院的博客-CSDN 博客

— END —


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

⬆️ 返回顶部 ⬆️

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

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

相关文章

Web后端开发(请求响应)上

请求响应的概述 浏览器&#xff08;请求&#xff09;<--------------------------(HTTP协议)---------------------->&#xff08;响应&#xff09;Web服务器 请求&#xff1a;获取请求数据 响应&#xff1a;设置响应数据 BS架构&#xff1a;浏览器/服务器架构模式。…

uniapp项目实战系列(3):底部导航栏与头部导航栏的配置

目录 系列往期文章&#xff08;点击跳转&#xff09;uniapp项目实战系列(1)&#xff1a;导入数据库&#xff0c;启动后端服务&#xff0c;开启代码托管&#xff08;点击跳转&#xff09;uniapp项目实战系列(2)&#xff1a;新建项目&#xff0c;项目搭建&#xff0c;微信开发工具…

33、Flink之hive介绍与简单示例

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

「MySQL-05」MySQL Workbench的下载和使用

目录 一、MySQL workbench的下载和安装 1. MySQL workbench介绍 2. 到MySQL官网下载mysql workbench 3. 安装workbench 二、创建能远程登录的用户并授权 1. 创建用户oj_client 2. 创建oj数据库 3. 给用户授权 4. 在Linux上登录用户oj_client检查其是否能操作oj数据库 三、使用…

C++ 友元

朋友可访问自己的东西&#xff0c;大概就这么个意思。即某类的友元类可访问该类的所有变量以及函数&#xff0c;或友元函数可以访问该类的变量以及函数&#xff0c;在朋友眼中没有任何隐藏&#xff0c;可谓时赤裸相对&#xff0c;肝胆相照&#xff0c;生生挚友。 注意&#xf…

聊聊检索增强,LangChain一把梭能行吗?

背景 ChatGPT诞生之初&#xff0c;大家仿佛从中看到了未来&#xff1a;可以拿着大语言模型&#xff08;LLM&#xff09;这把锤子&#xff0c;锤遍业务上的钉子。其中最被看好的场景&#xff0c;莫过于搜索&#xff0c;不仅是微软、谷歌、百度这样的大公司将LLM用到自己的搜索业…

ROS2学习(一):Ubuntu 22.04 安装 ROS2(Iron Irwini)

文章目录 一、ROS2(Iron Irwini)介绍二、ROS2(Iron Irwini)安装1.设置编码2.使能代码库3.安装ROS2 Iron 三、ROS2测试四、ROS2卸载 一、ROS2(Iron Irwini)介绍 官方文档 Iron Irwini版本支持的平台如下&#xff1a; 二、ROS2(Iron Irwini)安装 1.设置编码 sudo apt update…

Java实现根据关键词搜索京东商品列表数据方法,当当API接口(jd.item_search)申请指南

要通过京东网的API获取商品列表数据&#xff0c;您可以使用京东开放平台提供的接口来实现。以下是一种使用Java编程语言实现的示例&#xff0c;展示如何通过京东开放平台API获取商品列表&#xff1a; 首先&#xff0c;确保您已注册成为当当开放平台的开发者&#xff0c;并创建…

Windows安装单节点Zookeeper

刚学习Dubbo&#xff0c;在Centos7中docker安装的zookeeper3.7.1。然后在启动provider时一直报错&#xff0c;用尽办法也没有解决。然后zookeeper相关的知识虽然以前学习过&#xff0c;但是已经忘记的差不多了。现在学习dubbo只能先降低版本使用了&#xff0c;之后再复习zookee…

Golang数据结构和算法

Golang数据结构和算法 数据的逻辑结构和物理结构常见数据结构及其特点算法的时间复杂度和空间复杂度Golang冒泡排序Golang选择排序Golang插入排序Golang快速排序Golang归并排序Golang二分查找Golang sort包Golang链表Golang container/list标准库Golang栈stackGolang二叉搜索树…

解决css样式中last-child不生效的问题

需求 项目中需要使用v-for指令来渲染一个图片列表&#xff0c; 现状 发现&#xff0c;最后一个格子并没有跟下面绿色线对齐。 最后发现 是因为 每个格子都给了 margin-right&#xff1a;36px&#xff0c;影响到了最后一个格子 所以使用last-child 将最后一个格子的margin 属性…

ARM DIY(六)音频调试

前言 今天&#xff0c;调试一下音频 硬件焊接 硬件部分核心是 LM4871 音频功放芯片 对于 SOC 来讲很简单&#xff0c;就一个引脚 HPOUTL&#xff08;单声道&#xff09;&#xff1b;对于扬声器来讲也很简单&#xff0c;就两个引脚&#xff0c;插上就可以了。 另外一个关键点…

FastDFS+Nginx - 本地搭建文件服务器同时实现在外远程访问「端口映射」

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…

vue3中如何使用el-tooltip中的插槽达到换行效果

el-tooltip的content属性中的内容可以使用插槽来替换 话不多说&#xff0c;直接上代码 <el-tooltip effect"light" placement"top-start"><div slot"content" class"tips"> // 在这里运用插槽<p class"tip-tex…

OS 死锁处理

如果P先申请mutex 则mutex从1置零&#xff0c;假设申请到的empty 0则empty变成-1阻塞态 同理C中mutex从0变为-1&#xff0c;那么如果想离开阻塞态&#xff0c;那么就需要执行V&#xff08;empty&#xff09;但是如果执行V&#xff08;empty&#xff09;就需要P&#xff08;mu…

7.react useReducer使用与常见问题

useReducer函数 1. useState的替代方案.接收一个(state, action)>newState的reducer, 并返回当前的state以及与其配套的dispatch方法2. 在某些场景下,useReducer会比useState更加适用,例如state逻辑较为复杂, 且**包含多个子值**,或者下一个state依赖于之前的state等清楚us…

stm32之25.FLASH闪存

打开标准库 源码--- int main(void) {uint32_t d;Led_init();key_init();/* 初始化串口1波特率为115200bps&#xff0c;若发送/接收数据有乱码&#xff0c;请检查PLL */usart1_init(115200);printf("this is flash test\r\n");/* 解锁FLASH&#xff08;闪存&#xf…

亚马逊云科技 re:Inforce 大会云安全合规与技术实践及 Security Jam 大赛,快来报名吧!...

‍‍ 2023年8月31日在北京 亚马逊云科技 re:Inforce 大会 首次登陆中国&#xff01; 我们期待您的莅临&#xff0c; 并与您一起迎接 AI 时代&#xff0c; 开启全面智能的安全旅程&#xff01; 在13:00-17:00的 培训与动手实验环节中 云安全合规与技术实践 及 Security Jam 大赛…

Ansible学习笔记14

实现多台的分离实现&#xff1a; [rootlocalhost playbook]# cat example3.yaml --- - hosts: 192.168.17.105remote_user: roottasks:- name: create test1 directoryfile: path/test1/ statedirectory- hosts: 192.168.17.106remote_user: roottasks:- name: create test2 d…

Jenkins测试报告样式优化

方式一&#xff1a;修改Content Security Policy&#xff08;临时解决&#xff0c;Jenkins重启后失效) 1、jenkins首页—>ManageJenkins—>Tools and Actions标题下—>Script Console 2、粘贴脚本输入框中&#xff1a;System.setProperty("hudson.model.Directo…