CXL FRAME/HARDWARE
CXL FABRIC MANAGER
CXL Software Architecture
CXL BIOS/UEFI/OVMF
CXL ACPI
CXL ACPI HMAT
CXL ACPI SRAR
CXL PCI Express
CXL DOE
CXL MAILBOX
CXL NUMA BALANCING
CXL INTERLEAVING
CXL Engineering Practice(工程落地)
在现代 CPU 架构里,内存控制器(IMC) 已经集成到芯片内部,DIMM 内存条通过内存通道(Channel)与内存控制器相连,处理器在内部通过访问内存控制器,就可以直接访问到 DIMM 内存, 因此 DIMM 内存构成了系统物理地址空间里的物理内存. 在这种模式中,内存条插入到 DIMM 插槽并通过内存通道(Channel) 连接到内存控制器,处理器可以利用多通道技术,以及距离 CPU 近的缘故,可以提供高带宽低延迟的内存访问.
随着技术不断进步,以及 AI 推理和机器学习不断普及,业务场景对内存需求不断增强,随即 Intel 引入了 PMEM(NIVDIMM) 新型内存,其同样插入到 DIMM 插槽内进行访问,PMEM 的出现不仅可以提供大容量的内存,其也在不断降低内存成本. 另外在服务器端,内存池化的概念不断被提出,不同的厂家有提出了多种解决方案,其中类似通过 PCIe 外设提供内存加速卡或者大容量低速内存的方案. 这些新科技的出现为系统物理内存的来源提供了更多的选择,但新的技术无法很好的解决以下几个痛点:
- 内存瓶颈: 传统的 DDR 内存只能直接与 CPU 连接,并且受限于内存通道数量和速度,难以进一步扩展. 此外,多处理器系统中的内存共享和通信效率较低.
- 处理器和加速器的协同工作效率低下: 处理器和加速器之间的数据传输通常依赖 PCIe 接口,但 PCIe 协议最初是为 I/O 设计的,其本身并不专为低延迟、高带宽的内存访问而设计, 这使得加速器的性能在处理复杂任务时受限于与主内存或其他处理器通信的延迟
- 内存池化和共享: 现代应用需要高效的内存资源分配和池化,但当前的内存管理方式(包括 PCIe 加速卡和 PMEM 等技术)在跨多个设备和处理器时存在限制
- PMEM 特性受限: PMEM(Persistent Memory) 是持久性存储器,主要用于提供低延迟、高容量的存储,它的速度介于 DRAM 和传统 SSD 之间, PMEM 可用于扩展内存容量,但其本质上仍是存储器,尽管支持内存模式,但其访问延迟较高
随着 AI 和机器学习等领域的兴起,异构计算体系结构变得越来越普遍, 处理器与加速器(如 GPU、FPGA、AI 专用加速芯片)之间需要紧密协作, 然而传统的 PCIe 通信接口不适合处理频繁的、低延迟的数据传输需求, 需要更高效的连接方式来加速数据处理. 现有的 CPU 与 GPU、FPGA 等加速器之间的数据传输主要依赖于 PCIe,而 PCIe 是为 I/O 设备设计的协议,虽然提供高带宽,但在低延迟、内存一致性等方面并未做出优化,导致在处理复杂计算任务时,数据传输成为瓶颈, 并且随着数据量的爆炸性增长,尤其是在大规模云计算和数据密集型应用中,系统对内存的需求显著增加.
2019 年由 Intel 发起 CXL 项目,随后得到了业内广泛的支持,包括 AMD、NVIDIA、Arm、Google、Microsoft、Facebook 等科技巨头. CXL 的初衷是为了扩展和优化基于 PCIe 的通信标准,特别是针对 CPU 和加速器、内存等设备之间的高效互连需求, 并应对现代计算和数据中心基础架构中出现的挑战,尤其是在高性能计算(HPC)、人工智能、大数据和云计算等领域. 随着这些领域的飞速发展,传统的内存和处理器通信方式已经不能有效支持日益增长的数据处理需求,为了打破这些瓶颈,CXL 应运而生.
CXL 1.0/1.1 是 CXL 的首个广泛采用的版本,它基于 PCIe 5.0 物理层,并在其上构建了三个协议来支持不同的设备类型和内存访问需求. 其目标是解决处理器与加速器、内存扩展之间的低延迟通信问题. CXL 1.0/1.1 标准主要集中在 CPU 和加速器、内存设备之间的高效连接和内存一致性. CXL 1.0/1.0 版本里,CXL 只能在一个主机上使用,并没有实现多个主机之间资源池化, 其具有以下几个特点:
- 内存一致性支持: 加速器可以通过 CXL 直接访问主内存,同时保持与处理器之间的一致性
- 低延迟通信: CXL 通过改进的协议层降低了加速器和 CPU 之间的数据传输延迟,适用于高性能计算和加速器的应用
- PCIe 兼容性: CXL 1.0/1.1 基于 PCIe 5.0 物理层,因此在硬件层面上兼容 PCIe 通信设备
2020 年发布 CXL2.0,其对 CXL 1.1 的重要升级,增加了对内存池化、多设备支持和更复杂系统拓扑的功能. CXL 2.0 引入的新功能显著增强了系统的灵活性和扩展能力,特别是针对大规模云计算和数据中心的需求. CXL 2.0 保留了 CXL 1.1 的三层协议结构(CXL.io、CXL.cache 和 CXL.mem),但在内存池化和多设备共享上引入了更多优化,能够支持更多的内存拓扑和灵活配置, 具体新增功能如下:
- 内存池化(Memory Pooling): 支持多个主机共享同一片内存资源,允许不同的处理器动态地使用和分配共享内存池,提高内存资源的利用率,特别适合云计算和虚拟化场景
- 热插拔支持: 设备可以在不关闭系统的情况下动态添加或移除(如内存扩展卡或加速器),增强了数据中心的灵活性
- 安全增强: CXL2.0 在通信协议中加入了更强的安全性功能,以应对在数据中心环境中可能存在的安全威胁
- 持久性内存(Persistent Memory)支持: 支持与持久性内存设备的直接通信,扩展了内存的应用场景
2022 年发布 CXL3.0,进一步扩展了 CXL 协议的功能,支持更加复杂的内存拓扑、设备间通信,并大幅提高了系统的扩展能力. CXL 3.0 的目标是彻底优化高性能计算和云数据中心的架构,允许多主机、多设备和更大规模的系统集成.
- 多层次内存拓扑(Multi-Level Memory Topology): 支持更复杂的内存拓扑结构,不仅限于 CPU 和单个内存扩展设备之间的通信,还允许不同设备之间直接进行内存访问和数据共享
- 增强的内存池化: CXL3.0 在 CXL2.0 的基础上进一步增强了内存池化功能,支持更多主机和设备同时访问共享的内存池,显著提高了系统的灵活性和扩展性
- 设备间通信(Direct Peer-to-Peer Communication): CXL3.0 支持设备之间的直接通信,而无需通过 CPU 进行中介, 这大大提高了设备之间的数据传输效率,尤其是在复杂计算任务中,如 GPU 间的协同工作
- 更高带宽和更低延迟: 通过优化协议,CXL3.0 提供了更高的带宽和更低的延迟,进一步提升了高性能计算和数据中心的吞吐量和响应速度
CXL协议是在 PCIe 技术的基础上开发的,特别是在物理层和链路层上与 PCIe 共享许多相同的技术特性. CXL Flex Bus 是 CXL 和 PCIe 共用同一物理总线的机制,它允许一个设备通过同一个硬件接口同时支持 PCIe 和 CXL 协议. 这意味着硬件只需一个物理连接(例如 PCIe 插槽), 设备就可以根据需要选择运行 PCIe 或 CXL 协议. CXL 的协议栈由 Transaction Layer、Link Layer 和 Physical Layer 三个主要层次构成,每一层负责不同的功能,协同工作以确保 CXL 在设备之间的高效数据传输、内存一致性和低延迟通信. CXL 主要支持三种协议: CXL.io、CXL.cache 和 CXL.mem, 三种协议的特点和主要功能:
- CXL.io: CXL.io 协议用于管理传统的 I/O 操作,并且在功能上与 PCIe 的标准 I/O 操作兼容, 它主要负责设备的配置、内存映射和标准读写操作. 特点包括:
- 兼容 PCIe: CXL.io 与 PCIe I/O 操作完全兼容,负责设备的发现、配置、读写和中断管理, 它确保 CXL 设备可以执行与 PCIe 设备类似的 I/O 操作
- 设备管理: CXL.io 支持对设备进行配置和管理,包括枚举设备、初始化以及处理标准的设备操作,如读写命令、设备状态监控等
- I/O 传输: CXL.io 支持标准的 I/O 事务,包括对内存映射 I/O(MMIO)的支持,允许设备和主机通过内存地址空间交换数据
- CXL.cache: CXL.cache 协议的作用是支持异构设备(如 CPU 和加速器)之间的缓存一致性管理. 它允许设备(如加速器或内存扩展卡)通过缓存访问共享的主内存,而无需反复复制数据,这极大提高了处理速度并降低了延迟, 特点包括:
- 缓存一致性: CXL.cache 使得加速器、内存扩展卡等设备可以直接缓存主内存的数据,并且确保缓存的一致性. 这样多个设备可以同时访问相同的内存数据,而不需要频繁的数据复制操作
- 加速器协作: CXL.cache 允许 CPU 和加速器设备(如 GPU、FPGA)协同工作, 加速器可以缓存 CPU 的内存数据,实现低延迟的数据访问,适合高性能计算(HPC)、机器学习和其他数据密集型任务
- 减少数据复制: 通过缓存一致性机制,CXL.cache 避免了处理器和设备之间频繁的数据复制,从而降低了数据传输延迟和开销
- CXL.mem: CXL.mem 协议负责设备与主内存之间的直接内存访问(Direct Memory Access, DMA),允许设备直接读取和写入主机的内存, 这是 CXL 协议最重要的特性之一,它实现了低延迟、高带宽的内存访问,并支持扩展内存容量, 其特点如下:
- 直接内存访问: CXL.mem 允许加速器、内存扩展卡或其他设备直接访问主内存(DDR),并且以与 CPU 访问内存相同的方式进行操作, 这种机制避免了传统架构中的内存拷贝或数据传输操作,从而减少了延迟
- 内存扩展: CXL.mem 使得系统可以通过附加设备(如内存扩展卡)来扩展物理内存容量,而不受传统 DDR 通道数量的限制, 这对于需要大规模内存的应用(如大数据处理)尤为重要
- 共享内存模型: CXL.mem 提供共享内存模型,允许多个设备同时访问同一内存地址空间,提升了资源利用率和计算性能
CXL 设备分为三种类型: Type1、Type2 和 Type3,每种类型的设备有不同的特性,适用于不同的应用场景. Type1 设备主要是那些具有计算能力,但没有自己的专用内存的设备, 它们依赖于主机 CPU 的内存,而不需要独立的内存空间. 通常这类设备是 I/O 加速器,如网络接口卡(NIC)或一些特定领域的加速器. Type1 设备的特点:
- 无专用内存: Type1 设备没有独立的内存,它们依赖于主机的内存空间进行所有的内存操作
- 低延迟访问主内存: 通过 CXL.mem 和 CXL.cache 协议,Type1 设备能够低延迟地访问主机内存,并保持与主机 CPU 一致的内存视图
- 缓存一致性: Type1 设备可以利用 CXL.cache 协议,允许设备缓存主机内存的数据,同时保持数据一致性. 这对于那些频繁与主机通信的加速器非常重要
- I/O 操作: 设备可以执行标准的 I/O 操作,利用 CXL.io 协议进行数据传输和设备管理
Type1 涉笔应用场景可以是网络加速器,如智能网卡(SmartNIC)等,处理网络流量时需要与主机 CPU 高效协同工作,但不需要专用内存. 又如特定任务加速器,一些用于加速特定任务的硬件加速器,它们通过 CXL 与主机协同工作,但不需要大量的本地内存.
Type2 设备是具有计算能力并且拥有自己的本地内存的设备, 它们不仅可以进行数据处理,还能使用独立的内存存储数据, Type2 设备通常是加速器设备,如 GPU、FPGA 或 AI 加速器, 其具有如下特点:
- 拥有独立的内存: Type2 设备具有自己的本地内存,这使它们可以在独立的内存空间中执行计算任务,而不依赖主机内存来存储所有数据
- 低延迟访问主内存: 虽然 Type2 设备有自己的内存,但它们仍然可以通过 CXL.mem 访问主机的内存,并保持较低的延迟. 这种能力允许设备在需要时使用主机内存来处理更大的数据集
- 缓存一致性: 通过 CXL.cache,Type2 设备可以与主机保持内存的一致性, 这对需要频繁共享数据的任务(如 AI 推理、机器学习等)非常有用
- 计算与存储分离: Type2 设备能够独立进行计算并使用自己的内存空间,这种计算与存储的分离使其非常适合用于高性能计算、机器学习等场景
type2 典型设备如 GPU/FPGA 加速器,在 AI、机器学习、图形渲染等领域,GPU 和 FPGA 设备通常需要高性能计算和大规模内存支持,Type2 设备能够同时利用自己的内存和主机内存,提升计算效率. 又如 AI 加速器,专用的 AI 处理设备,如 AI 推理加速器和训练设备,需要高性能计算和内存共享以处理复杂的神经网络运算.
Type3 设备是没有计算能力,但拥有大量内存的设备, 它们的主要功能是内存扩展,用于为主机提供额外的内存空间, Type3 设备并不执行计算任务,而是通过 CXL.mem 提供对其内存的低延迟访问. 其特点如下:
- 无计算能力: Type3 设备不进行计算操作,它们只是为系统提供额外的内存资源
- 大容量内存扩展: Type3 设备的主要作用是提供大规模的内存扩展,允许系统通过连接这种设备来扩展物理内存容量, 这对于需要大量内存但不需要额外计算资源的应用场景非常适用
- 低延迟内存访问: 尽管 Type3 设备没有计算能力,但它们可以通过 CXL.mem 提供低延迟的内存访问能力,这使得它们非常适合内存密集型的任务
- 持久性内存支持: Type3 设备还可以使用持久性内存(PMEM),这意味着即使系统掉电,数据仍然可以保存在设备的内存中,从而提高数据可靠性和安全性
type3 可以做内存扩展模块,用于大规模云计算或数据中心的内存扩展场景,Type3 设备可以为需要大量内存的任务(如大数据处理、虚拟化等)提供所需的内存资源. 另外 type3 还可以做持久性内存设备,在需要高数据持久性和快速恢复的应用中,如数据库系统、文件系统等,Type3 设备可以提供持久性内存支持,确保数据的可靠存储.