础滨驱动的设计应用
多年来,内存和存储有着明显区别。内存是其临近的 CPU 或加速器处理数据时临时保存该数据的地方。把内存摆放在需要数据的元件附近,可以提供极低延迟的快速访问从而实现高效地工作。典型例子包括各种形式的 SRAM/DRAM,例如 DDR、LPDDR 和最近出现的 HBM。这些内存设备可以提供低延迟的快速数据访问,作为易失性设备,需要保持通电才能保留数据。
换个角度,存储是非易失性的长期内存,即使在设备断电时仍可保留,但访问时间和延迟远大于传统内存设备。典型例子包括硬盘 (HDD) 和固态硬盘 (SSD)。表 1 比较了内存和存储的一些特性。
|
内存 |
存储 |
例子 |
顿顿搁、尝笔顿顿搁、贬叠惭 |
厂厂顿、贬顿顿 |
靠近 CPU |
接近或嵌入 |
较远 |
访问时间 |
快速,低延迟 |
较慢,较高延迟 |
持久性 |
易失,需要电源 |
持久,无需电源 |
容量 |
受制于物理约束 |
本质上无限制 |
数据访问大小 |
字节 |
块:页面或扇区(以 KB 为单位) |
与 CPU 的接口 |
各种 JEDEC DDR 标准 |
带 NVMe 的 PCIe、其他(SATA、SAS) |
表 1:内存相对于存储的特性
多年前,在 SSD 出现之前,内存和存储之间的区别简单明了。内存是指随机存取存储器 (RAM),存储是指磁性介质(磁盘驱动器或磁带)。由于两者之间的物理差异,内存和存储还有其他区别没有在表 1 中显示。内存可以一次读取或写入一个字节,而存储的最小存储单元是扇区(对于 HDD,通常为 512 字节),这主要是因为存储具有旋转磁盘结构。取代了 HDD 的 SSD 尽管不是旋转磁性介质,但由于其设计本质,SSD 仍然无法像 RAM 一样一次读取或写入一个字节。
SSD 将数据存储在电气单元矩阵中,这些电气单元被组织成称为页的行,数据就存储在这些页中。页面组合在一起成为块。SSD 只能写入块中的空页。导致的结果是,SSD 一次读取一个页的数据,并且只有在整页为空的情况下才能写入页面,否则必须擦除整个块才能写入页。读取或写入页可以转换为 16kB 的数据,因此这些设备不善于解决必须经常访问少量数据的缓存式应用问题。
随着英特尔 Optane 技术等新型持久性内存的出现,这些新型内存具有非易失性,并将访问时间缩短至可媲美 DRAM,使得内存和存储之间的界限开始变得模糊,带来了一些有趣的可能。
PCI Express (PCIe) 是可扩展且有层次的,带有嵌入式交换机或交换机芯片,支持一个根端口与多个终端连接,例如多个存储设备(以及以太网卡和显示驱动程序等其他终端)。然而,这种实现方式在一种带有孤立内存池的大型系统中存在局限,这种系统中的处理器和加速器在同一个 64 位地址空间内共享相同的数据和内存空间进行异构计算。与使用 CXL 的替代实现方案相比,缺乏缓存一致性机制会导致这些应用的内存性能低下,延迟不可接受。
PCIe 通常使用 load-store 语义(load = 读取,store = 写入)通过直接内存访问 (DMA) 机制传输大量数据,而 CXL 使用专用 CXL.mem 协议实现短数据交换和极低延迟。
虽然 64GT/s 的 PCIe 6.0.1 的引入有助于增加存储应用程序的可用带宽,而延迟增加很少或没有增加,但一致性的缺乏仍然限制了 PCIe 应用程序,如传统的 SSD 这种块存储设备。对于这些存储应用,使用 PCIe 作为传输接口的 NVMe 已经占据了 SSD 技术的主导地位。正在开发中的下一代 SSD,它们将使用 CXL 接口替代 PCIe。
表 2 总结了 PCIe 和 CXL 对于存储应用的一些重要特性。本文重点介绍了 CXL 适用于高性能计算存储应用的主要特点。
特性 |
PCI Express |
CXL |
最大带宽 |
PCIe 5.0 为 32GT/s x16 PCIe 6.0 为 64GT/s x16 |
CXL 2.0 为 32GT/s x16 CXL 3.0 为 64GT/s x16 |
一致性 |
无 |
支持;主机管理 |
延迟 |
100 ns |
10 ns |
可缓存性 |
PCIe 地址空间通常 |
CXL 地址空间可按定义缓存 |
切换 |
芯片和嵌入式 |
CXL 2.0 和 3.0 支持 |
拓扑 |
主机到设备,交换式 |
主机到设备,交换式,结构 |
内存访问 |
通常是 DMA |
专用 CXL.mem |
传输大小 |
PCIe 针对更大的数据有效载荷进行了优化;传统块存储(512B、1KB、2KB、4KB);开销较低,适用于处理非缓存数据 |
CXL 针对 64B 缓存行传输进行了优化;固定大小实现低延迟 |
存储标准 |
基于 PCIe 的闪存 (NVMe) |
基于 CXL 接口的 SSD 和 DRAM,适用于众多新型内存/存储应用 |
数据路径 |
32b – 512b |
原生 512b |
实现 |
仅 PCIe |
可支持 PCIe 的 CXL 控制器 设备中不需要 Home agent |
应用 |
非一致数据移动应用、大型 DMA 块传输、传统存储控制器;NVMe |
线性存储:字节可寻址的(而不是块或扇区)SSD 后续产物;计算型内存 |
生态系统 |
庞大且成熟,最高达到 PCIe 5.0 |
到目前为止,应用并不广泛;CXL 在 2022 年至 2023 年期间有望加速发展 |
表 2:PCIe 和 CXL 适用于存储应用的特性
包括深度技术文章、白皮书、视频、即将举行的网络研讨会、产物公告等等。
计算结果表明,CXL 2.0 引入的内存池理论上可至少支持 1.28 拍字节 (PB) 的 CXL 附加内存,如果在 CXL 3.0 中引入多级切换和其他功能,甚至可支持更高的内存容量。这为解决大规模计算问题提供了新思路,使多个主机可以一边处理大量问题,一边同时访问整个数据集。例如,假设系统可以一次性处理整个问题,而不是将问题分解成更小的部分,那么通过访问 1 拍字节的内存,就可以创建全新的模型并对其编码,以此来处理复杂的问题(例如,模拟气候变化)。
CXL 3.0 中引入的高级结构功能是基于前几代及其传统树基架构的一次转变。新架构支持多达 4,096 个节点,每个节点都能够通过基于端口的路由 (PBR) 机制与另一个节点相互通信。节点可以包括 CPU 主机、CXL 加速器(无论是否包含内存)、PCIe 设备或全局结构连接内存 (GFAM) 设备。GFAM 设备是一种 3 型设备,可有效地充当共享内存池,其 I/O 空间属于一个主机或结构管理器。配置后,CXL 结构中的其他主机和设备可以直接访问 GFAM 设备的池式内存。GFAM 设备带来了很多新的可能性,可以根据特定的负载需求构建由计算和内存元件组成的系统。例如,通过访问 1 太字节或 1 拍字节的内存,可以创建全新的模型来应对像绘制人类基因组图谱一样复杂的挑战。
表 3 显示了有助于在内存和存储应用推广 CXL 的一些关键特性。
特性 |
何时引入 |
一致性和低延迟 |
在 CXL 1.0/1.1 中引入 |
切换 |
在 CXL 2.0 中引入,作为 CXL.mem 的单级切换 在 CXL 3.0 中扩展为多级切换,适用于所有协议 |
内存池和共享 |
在 CXL 2.0 中引入了内存池,支持 MLD 在 CXL 3.0 中增加了共享功能 |
结构 |
在 CXL 3.0 中引入 |
表 3:适用于存储应用的关键 CXL 特性
一直以来,只有几种方法可以为加速器或其他 SoC 增加内存。最常见的方法是添加额外 DDR 内存通道来支持更多标准 DDR 内存模块。另一种可行的方法是,将内存与 SoC 集成在同一个封装内。借助 CXL,可以将内存放在非常类似于 PCIe 总线的东西上(CXL 使用 PCIe PHY 和电气元件)。这让系统能够使用带有标准 CXL 接口的卡来支持更多的内存模块,而无需额外 DDR 通道。图 1 举例说明了如何大幅增加 SoC 可访问的内存 — 从内存量 (GB) 和内存类型(RAM 或持久内存)两方面来说明。通过使用这种方法,内存开始变得类似于资源池,可由多个主机通过切换功能进行访问;切换功能在 CXL 2.0 中首次引入,并在 CXL 3.0 中得到显著扩展。
图 1:CXL 通过单一接口实现介质独立,例如 DDR3/4/5、LPDDR 3/4/5、持久内存/存储
从图 1 中可以看出,CXL 可以解决阻碍多系统访问可扩展内存池开发的问题——它取消了专有互连,因此任何需要的 CPU、GPU 或张量处理单元 (TPU) 可以访问基于标准的 CXL 接口设计的额外内存。CXL 最终将允许连接到大量的内存模块,包括 SSD、DDR DRAM 和新兴的持久内存。CXL 具有低延迟、一致性、内存池和共享等功能,这使其成为一种可行的技术,让系统架构师可以创建大型的易失性和持久内存池,这些内存将会扩展到多个基础架构池,成为真正的共享资源。
图 1 所示方法的另一个优点是, SoC 的 CXL 引脚不必专用于内存的,而是可用于连接任何具有 CXL 接口的设备,包括额外的 CXL 交换机、GFAM 设备或芯片间互连。
2022 年闪存峰会传达的一个明确信号是,CXL 是用于汇集和共享联网内存设备的新兴领先架构,主要用于 DRAM 和 NAND 闪存设备。很多大型 SSD 公司正在推出或考虑推出具备 CXL 接口的基于闪存的 SSD,还有些公司在讨论如何打造以 CXL 作为高速内存接口的内存控制器或其他内存产物。参见图 1。
CXL 现已收购了 Z 世代和 OpenCAPI,进一步扩大和增加了 CXL 可以处理的应用的范围和类型。
图 2:CXL 可在多个主机之间实现精细的内存分配(汇集)和共享
CXL 有很多优势,而其中两个优势特别值得一提:内存分解和可组合性。内存分解是指能够将内存扩展到各种设备,同时仍允许多个服务器进行共享和保持一致性,使得内存不再聚合并专用于单个设备或服务器。可组合性是指能够根据需要将分解后的内存分配给特定 CPU 或 TPU,结果是可大幅提高内存利用率。提高内存利用率可使当前系统实现关键改进,根据微软的测量数据以及题为《MICROSOFT AZURE BLAZES THE DISAGGREGATED MEMORY TRAIL WITH ZNUMA》的 所述,当前系统的实际内存利用率可能仅为 40% 左右,大多数虚拟机 (VM) 的内存使用量不足虚拟机监控程序分配的内存量的一半。
借助具有切换功能的 CXL 2.0 和 CXL 3.0,主机可以从形成池的一个或多个设备访问内存。值得注意的是,在这种汇集配置中,主机之间只共享资源本身,而不共享内存内容:内存的每个区域只能属于单个一致域。内存共享(CXL 3.0 规范新增了此功能)实际上允许多个主机之间共享资源池中的单个内存区域。图 2 举例显示了单一系统中的内存池和内存共享。
CXL 还可以实现计算型内存,这种内存设备可以直接对内存内容执行一些计算,而无需主机或加速器参与。
最终目标是实现 100% 分解和可组合性,届时,系统内的所有内存都可以由任何系统内的设备使用,并且可以用作资源池。
为了实现 100% 分解和可组合性这一目标,系统需要能够发现并枚举系统中的每个设备,包括服务器、加速器、内存扩展设备以及具有可共享内存的其他设备。这需要对全部设备(服务器、内存池、加速器和存储设备)进行机架级设备发现和识别,无论是已经组成的还是尚未分配的。这只能使用 PCIe 和 CXL 功能来实现,因为以太网和 Infiniband 等架构不支持精细的发现、分解和组合。
动态创建能够满足不同工作负载要求的灵活硬件配置,这一方法通常被称为可组合式离散基础架构 (CDI),可以使用 CXL 现已支持的低延迟架构来实现。此功能可以有效地允许配置整个机架并使其具有类似于服务器的作用。
CXL 正在迅速成为在多个设备和主机之间一致地管理和共享大量内存的首选接口。它实现了真正的异构可组合式离散架构,这种架构的支持范围并不仅局限于内存。CXL 3.0 规范扩展了以前版本的 CXL,使每通道带宽翻倍,达到 64 GT/s,而延迟并无增加,而且还增加了多级切换、高效对等通信和内存共享等功能。
为了简化和加速采用最新的 CXL 协议,草榴社区 提供了完整的 CXL IP 解决方案,其中包含带 IDE 安全模块、PHY 和验证 IP 的控制器,为 AI、机器学习和高性能计算(包括存储应用)提供安全、低延迟、高带宽的互连。
我们的 CXL IP 解决方案基于经过硅验证的 草榴社区 PCIe IP,可降低设备和主机应用的集成风险,并帮助设计人员实现 CXL 3.0 为适用于数据密集型应用的 SoC 带来的优势。作为很早就开始参与 CXL 相关工作的贡献者,草榴社区 可以快人一步获悉最新的规范,使我们的工程师能够提供更成熟的解决方案。草榴社区 已经向多个客户交付了支持 IDE 的 CXL 2.0 和 3.0 解决方案,包括适用于下一代 SSD 和高级内存应用的解决方案,这些解决方案在客户产物中经过硅验证,并在硬件中证实与第三方具有互操作性。
深度技术文章、白皮书、视频、网络研讨会、产物公告等等。