【栏目介绍:“玩转OurBMC”是OurBMC社区开创的知识分享类栏目,主要聚焦于社区和BMC全栈技术相关基础知识的分享,全方位涵盖了从理论原理到实践操作的知识传递。OurBMC社区将通过“玩转OurBMC”栏目,帮助开发者们深入了解到社区文化、理念及特色,增进开发者对BMC全栈技术的理解。
欢迎各位关注“玩转OurBMC”栏目,共同探索OurBMC社区的精彩世界。同时,我们诚挚地邀请各位开发者向“玩转OurBMC”栏目投稿,共同学习进步,将栏目打造成为汇聚智慧、激发创意的知识园地。】
随着异构计算(CPU、GPU、FPGA、AI加速器)的普及,传统互连协议(如PCIe)在缓存一致性、内存共享和低延迟通信方面的局限性逐渐暴露。CXL(Compute Express Link)应运而生,其目标是构建一个统一的缓存一致性协议,支持CPU与加速器、内存扩展设备之间的高效协作。本文旨在为读者普及CXL协议的基础知识,助力其深入理解并有效运行这一技术。
CXL 设备类型
CXL 定义了三种设备类型(Type1、Type2、Type3),每种类型支持不同的协议子集,适用于不同的硬件场景:
注:上图引用< Compute Express Link Specification Revision 3.1, Version 1.0>
图1 CXL设备类型
01 Type1设备:缓存一致性加速器
该设备无本地内存且依赖主机内存,支持CXL.io和CXL.cache协议:
注:上图引用< Compute Express Link Specification Revision 3.1, Version 1.0>
图2 Type1-带缓存的CXL设备
Type1 设备是无本地内存的加速器(如智能网卡、FPGA、AI 推理芯片),需要直接访问主机的物理内存。
其核心功能是通过 CXL.cache 协议实现以下操作:
- 缓存一致性机制:Type1 设备可以缓存主机内存中的数据,并与CPU缓存(如L1/L2/L3)保持一致性。当设备修改缓存数据时,CXL.cache 会自动通知 CPU缓存失效,反之亦然,避免数据冲突。
- 低延迟访问:设备通过CXL链路直接访问主机内存,无需软件干预(如 DMA 或驱动程序的数据拷贝)。
示例应用场景:
- 网络数据包处理:智能网卡可以直接解析主机内存中的网络数据包,无需先将数据复制到设备本地。
- 加密加速:FPGA 可以直接读取主机内存中的明文数据,加密后写回,全程无需 CPU 参与。
关键优势:
- 简化编程模型:开发者无需手动管理缓存一致性(如传统的DMA +软件同步)。
- 低延迟:设备与主机内存的交互延迟接近本地内存访问。
02 Type2设备:带本地内存的加速器
支持CXL.io、CXL.cache以及CXL.mem协议:
注:上图引用< Compute Express Link Specification Revision 3.1, Version 1.0>
图3 Type2-带内存的CXL设备
Type2 设备是有本地内存的加速器(如GPU、AI训练芯片),其核心功能是双向缓存一致性:
- 设备访问主机内存:设备通过CXL.cache协议缓存主机内存数据,与CPU缓存保持一致(类似Type1)。
- 主机访问设备内存:主机可以通过CXL.mem协议直接读写设备的本地内存(如GPU显存),视为“内存扩展”。例如CPU可以直接访问GPU显存中的张量数据,无需通过PCIe的显式拷贝。
- 缓存一致性域扩展:设备本地内存与主机内存被纳入统一的缓存一致性域,由CXL.cache协议管理。当GPU修改显存数据时,CPU缓存会自动失效,反之亦然。
示例应用场景:
- 机器学习训练:GPU可直接读取主机内存中的训练数据集,同时CPU可以直接访GPU 显存中的中间结果。
- 异构计算:FPGA 的本地内存与CPU内存统一编址,实现零拷贝数据共享。
关键优势:
- 双向内存共享:主机和设备内存无缝融合,减少数据拷贝开销。
- 一致性粒度更细:支持缓存行(Cache Line)级别的一致性管理。
03 Type3 设备:内存扩展设备
支持CXL.io和CXL.mem协议,不支持CXL.cache:设备内存与主机缓存无一致性。
注:上图引用< Compute Express Link Specification Revision 3.1, Version 1.0>
图4 Type3-HDM-H内存扩展设备
Type3设备是纯内存扩展设备(如CXL内存条、内存池、SSD内存化存储),其核心功能是为主机提供大容量、低延迟的内存扩展。例如主机将Type3设备的内存映射到自身物理地址空间(通过 CXL.mem),像使用本地DDR内存一样,突破本地内存插槽的限制。
示例应用场景:
- 内存扩展:为内存密集型应用(如数据库)提供低成本的大容量内存。
- 持久化内存:将支持字节寻址的持久内存模块通过 CXL.mem 接口连接到系统中,以实现高性能的持久化存储
关键优势:
- 容量灵活:突破物理内存插槽限制,动态扩展内存容量。
- 低延迟访问:相比传统网络存储(如RDMA),CXL.mem提供纳秒级延迟。
CXL 设备固件端支持
在CXL设备使用过程中(以Type3设备为例),固件端通过描述ACPI表并上报操作系统,提供了必要的信息以用于内存访问、优化资源分配和提升系统性能。其中关于CXL设备的ACPI内容包括:
01 CEDT表
CEDT表允许操作系统发现系统中的任何CXL主机桥和主机桥寄存器。它包含两种类型的ACPI对象:
CHBS(CXL Host Bridge Structure):提供指向CHBCR(CXL Host Bridge Control Register)块的指针,操作系统通过对HDM(Host-managed Device Memory)Decoder进行配置,将CXL设备内存映射到统一的系统地址空间。
CFMWS(CXL Fixed Memory Window Structure):描述了CXL设备内存的HPA(Host Physical Address)内存基址、窗口大小、内存交织粒度与路数等。操作系统驱动程序可根据这些参数进行内存映射与访问。
02 DSDT表
在ACPI命名空间中描述CXL设备,以便操作系统对CXL设备进行枚举并了解相关的属性参数。其中描述的ACPI HID(Hardware ID)包括:
ACPI0017: 使操作系统知晓CXL根设备的存在。
ACPI0016: 描述CXL主机桥,操作系统利用其进行枚举和配置。
03 SRAT表
SRAT(System Resource Affinity Table)表用于描述系统资源的NUMA(Non-Uniform Memory Access)亲和性,帮助操作系统了解内存的物理拓扑和性能特性,对CXL内存的分配至关重要。
04 HMAT表
HMAT(Heterogeneous Memory Attribute Table)表提供了系统局部性之间的内存延迟和带宽属性信息,帮助操作系统优化内存访问路径,减少延迟,并提高带宽利用率。
CXL 设备固件端支持
CXL是一项前沿的开放高速互连技术,专为提升数据中心及高性能计算环境中CPU与多样化加速器、内存扩展设备间的通信效率而设计。该技术的核心在于其支持的三种设备类型:CXL.cache、CXL.io以及CXL.mem,它们分别专注于实现缓存一致性管理、I/O操作优化与内存扩展功能。依托于PCIe物理层的强大传输能力,CXL协议能够支持高达64GT/s的数据速率,使得设备能够直接且高效地访问主机内存,实现高效的数据传输,还确保了缓存数据的一致性。此外,CXL还支持硬件级原子操作和电源管理,提供灵活的内存映射和资源分配,优化系统性能。通过ACPI表与操作系统交互,CXL确保了跨平台的兼容性和资源的最优利用。
进阶思考
思考点:CXL如何实现与现有PCIe生态的兼容性?答案:CXL.io层完全兼容PCIe协议,设备可降级为传统PCIe模式运行。
常见问题解答
Q1:CXL Type3设备与Type1/2设备的区别是什么?
Type3是内存扩展设备(如SSD、内存条),仅支持CXL.mem,Type1/2是加速器(如GPU、FPGA),需支持CXL.cache。
Q2:若CFMWS窗口与其他内存区域重叠,会发生什么?
系统可能无法启动或出现内存访问错误,固件端在上报该部分内容时,需合理分配地址避免冲突。
欢迎大家关注OurBMC社区,了解更多BMC技术干货。
OurBMC社区官方网站:
https://www.ourbmc.cn/
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。