NVMe-Over-CXL技术详解:存储与内存融合的未来之路
NVMe-Over-CXL技术详解:存储与内存融合的未来之路
NVMe-Over-CXL(CXL)是一种新型的存储技术,它通过允许使用CXL.mem协议在相同的PCIe物理接口上进行高效的内存访问,解决了NVMe控制器内存缓冲(CMB)的性能瓶颈。本文详细介绍了NVMe-Over-CXL的最新进展、与NVMe-Over-Fabrics的区别,以及NVMe-Over-CXL的落地场景和架构。
NVMe Over CXL 的最新进展
NVMe从1.2版本的规范开始就支持控制器内存缓冲(CMB),然而CMB的性能优势受限于PCIe总线本身(Fig6/7),因为PCIe并不支持轻量级内存协议。CXL通过允许使用CXL.mem协议在相同的PCIe物理接口上进行高效的内存访问,解决了CMB的这一根本性限制,而CXL.io协议则支持NVMe的所有传统功能,无需对应用程序进行重写。
通过在同一设备上将存储和内存结合,可以解决资源分配中的竞争条件。使用NVMe Over CXL的SSD的优点被详细说明,并与具有内存语义的SSD进行比较。存储与内存的合并还有一个附加好处:类似于NVDIMM-N的DRAM持久性。
作者在这里提出深度思考:CXL倡议的高速互联,能改变计算机千年来的设计范式吗?(其实不到百年,追溯到冯诺依曼架构)
冯诺依曼架构是在1945年由约翰·冯·诺依曼提出的。这种架构为现代计算机的设计奠定了基础,主要特点是将程序和数据存储在同一内存中,使得计算机能够以更灵活的方式执行指令。
留意图中的两句话:
- CXL作为一种新型基于结构的模型出现,用于连接处理、内存、存储和通信
- 一种考虑CXL扩展的方法是通过具有特定功能的机架概念
需要特定功能机架来彻底实现CXL,这和OCP曾提出的数据中心再解耦,内存分离不谋而合,这条路虽然很彻底,但实属”概念“,因为要克服的困难实在太多。
CXL 不仅仅是另一个 I/O 总线
CXL 允许通过一致的协议将处理、内存、存储和 I/O 结合在一起。这使得以有趣的新方式虚拟化资源成为可能。是的,请注意我在该图中移除了 CXL.cache……在 NVLink/UALink 世界中,CXL 类型 2 设备可能会消失。这也意味着我相信 CXL 可以与 xxLink 互补。
Wolley 作为CXL技术的主要推广机构,随着各家推出自己的片上/间互联技术,CXL的可用空间相较于19年刚提出来的时候,有所挤压,但两者关注的区域还是暂时有差别的,Bill 补了一句”我相信“。
通过比较 NVMe Over Fabric,来认识NVMe Over CXL(NVMe-oC) 。NVMe Over CXL™ (NVMe-oC) 和 NVMe Over Fabrics (NVMe-oF) 都是围绕 NVMe(非易失性内存设备)的技术,用于优化存储和计算资源的访问和性能,但它们之间有一些关键区别。
1. 协议层面的区别:
NVMe-oC (NVMe Over CXL):CXL(Compute Express Link)是一个基于PCIe的协议,它提供三种关键协议:CXL.io(类似PCIe)、CXL.cache和CXL.memory。这使得处理器、内存和存储设备之间的连接可以在低延迟的情况下进行更高效的共享和协作。CXL特别适合在同一系统中多个资源之间实现内存共享,打破了传统的IO和内存之间的界限,允许设备直接访问内存。
NVMe-oF (NVMe Over Fabrics):NVMe-oF 是基于网络结构(Fabric)进行存储访问的协议,旨在通过网络传输NVMe命令。Fabric可以是RDMA、TCP/IP或Fibre Channel等协议。它允许在数据中心或远程设备上通过网络访问远程存储设备。NVMe-oF 的主要目标是通过网络进行高效的存储访问,解决本地设备和远程设备之间的高延迟问题。
2. 使用场景与目的:
NVMe-oC (CXL):CXL主要解决内存和存储设备之间的深度融合问题,尤其是在数据中心和服务器架构中,它允许CPU、加速器(如GPU)和内存池之间实现高效的内存共享和动态访问。它更侧重于减少内存访问的延迟,并提供一致的低延迟存储访问。CXL的一个核心应用场景是允许处理器和外部设备直接访问共享内存池,以提高计算效率。
NVMe-oF:NVMe-oF 则更多用于远程存储系统的访问,它主要解决的是存储在不同服务器或节点上的NVMe设备,通过网络结构进行高速访问。适用于大规模分布式存储系统,典型的应用场景包括超大规模数据中心、云存储和高性能计算(HPC)环境中的远程存储设备的访问。
3. 性能与延迟:
NVMe-oC:通过CXL,内存和存储设备能够更加紧密地连接,这意味着延迟会极低,尤其是内存和存储的整合大大减少了传统存储设备与内存设备之间的瓶颈。CXL 还支持cache coherence,允许不同设备之间共享相同的数据缓存,有效提升性能。
NVMe-oF:虽然NVMe-oF的性能相比传统的网络存储解决方案(如iSCSI、NFS等)有了显著的提升,但由于涉及通过网络传输数据,因此延迟不可避免地会比本地存储或内存访问高。不过,通过使用高速网络协议(如RDMA),NVMe-oF 依然能够保持较低的延迟,适合需要快速存储访问的场景。
4. 设备间的互联:
NVMe-oC:CXL 支持在设备之间共享内存池,可以让处理器、GPU、FPGA 等设备共同访问共享内存。这种深度融合的设计使得CXL不仅限于存储访问,还包括更多关于内存资源的共享和处理。
NVMe-oF:NVMe-oF 更关注的是通过高速网络连接不同服务器或存储阵列上的 NVMe 设备,通常是远程设备之间的存储数据传输。
总结:
NVMe Over CXL专注于计算、存储、内存设备的融合,通过低延迟和内存共享提升性能,适合需要高效内存访问的场景。
NVMe Over Fabrics则着眼于通过网络结构访问远程存储设备,解决了大规模分布式存储系统中存储设备的高速访问问题。 两者都有助于提升NVMe的使用效率,但它们的目标应用场景和技术实现方式有所不同。
图示 NVMe-SSD的访问方式,其中标出的1/2属于CXL扩展后的新方式。
- 当前系统将存储与内存分离。
- 数据根据需要在存储和内存之间以 4KB 块大小进行复制。
- 每次 NAND 读取可能会导致多个 DRAM 写入,包括:
- SSD 缓存
- 远程内存
- 本地处理器 DRAM
这张图片是用来讨论CMB缓存在实际数据传输中的有限作用,尽管当前NAND-DRAM的数据IO,已经过优化,如在SSD主控加入有限DRAM模块(含CMB)来提高数据传输速度,但作者指出:
问题:NVMe V1.2 不是添加了控制器内存缓冲区 (CMB) 来解决这个问题吗?
答复: 是的,NVMe V1.2 添加了 CMB,但它并没有完全解决问题。
解释:
- NAND 和 DRAM 之间的 DMA(直接内存访问)不需要使用网络结构。
- 但是,NVMe CMB 并不能彻底解决问题,因为 PCIe 的开销仍然迫使进行大量数据传输。
为什么说PCIe的开销迫使大量数据传输?这里的开销指的是什么?数据传输又指的是什么?
当我们提到“PCIe 的开销迫使进行大量数据传输”,这是因为PCIe协议在管理数据传输时具有一些固有的协议开销,而这些开销会对数据传输产生影响。为了更好地理解这一点,我们需要从多个角度来解释:PCIe的开销是什么,以及为何会导致大量数据传输。
1.PCIe 开销是什么?
PCIe(Peripheral Component Interconnect Express)是现代计算设备中用于连接CPU、内存和外部设备(如NVMe SSD)的高速接口。虽然PCIe拥有高带宽,但每次数据传输都会产生协议开销,这些开销可以分为几个方面:
数据包的封装和拆封:在PCIe中,数据传输是以数据包(packets)为单位的。这些数据包包含了要传输的数据,以及相关的协议头、错误校验码、握手信息等元数据。这些元数据的存在是为了保证数据传输的完整性、准确性和可靠性,但它们也会占用一定的带宽。
握手和确认:PCIe在传输数据时,设备之间需要进行握手(handshaking)来建立连接并确认数据的正确性。这种握手过程会产生额外的延迟和流量,特别是在小数据块的传输中,握手的比例开销可能会显得很大。
错误校验和纠正:PCIe在传输数据时进行错误检测与纠正(error checking and correction),以确保数据传输的可靠性。这些机制进一步增加了每个数据包的协议开销。
这些因素共同导致了PCIe在每次数据传输时的“开销”,即使传输的数据本身可能不大,但管理这些数据传输的协议头信息、握手和错误校验所需的额外传输流量也会显著增加。
2.大量数据传输的原因
为了减少这种“开销”对性能的影响,PCIe通常倾向于使用大块数据进行传输(例如 4KB 块大小),以此来“摊薄”每个数据包中附带的协议开销。这就解释了“迫使进行大量数据传输的说法。
小数据块效率低下:如果每次只传输非常小的数据块(例如512字节),那么PCIe的协议开销将会相对于实际数据而言占据较大的比例。结果是,虽然传输了多个小数据包,但每个数据包中有效的数据占比非常小,反而浪费了大量带宽和时间。
大数据块更有效率:通过使用较大的数据块,例如 4KB 块进行传输,PCIe的固定开销(握手、协议头等)被分摊到更多的有效数据上。这意味着对于相同的传输开销,我们可以传输更多的数据,从而提高传输效率。
因此,为了提高PCIe的使用效率,系统通常倾向于批量传输较大的数据块,这就导致了所谓的“迫使进行大量数据传输”。
3.控制器内存缓冲区 (CMB) 的作用和局限性
控制器内存缓冲区 (CMB)是 NVMe V1.2 引入的一个功能,旨在让存储设备(如NVMe SSD)拥有自己的一部分内存缓冲,用于暂存数据。它的目的是通过减少CPU与SSD之间的直接数据交互,降低延迟并减少PCIe带宽的占用。
然而,CMB并没有完全解决PCIe开销问题,因为PCIe的数据传输开销依然存在,特别是在数据需要频繁进出CMB的情况下。例如:
数据依然要通过PCIe总线传输:即使使用了CMB,数据还是要通过PCIe总线在NVMe SSD和主内存(DRAM)之间移动,PCIe的协议开销依然存在。
数据块大小问题:如前所述,由于PCIe的开销问题,系统需要通过批量传输大块数据来提高效率。这意味着即使你只需要小部分数据,也可能需要进行大块的数据传输(如4KB)。
4.总结
PCIe开销包括协议头、握手、错误检测和确认等固有的协议管理信息,这些会占用带宽,特别是在传输小数据块时,效率会显著下降。
为了优化PCIe带宽利用率,系统通常会使用大块(如 4KB)的数据进行传输,以摊薄协议开销的比例。这就是为什么我们说“PCIe开销迫使进行大量数据传输”的原因。
CMB的引入虽然在某种程度上缓解了PCIe的压力,但并没有完全解决数据传输的开销问题,因为大规模的数据传输依然需要通过PCIe完成,且其固有的协议开销仍然存在。
总体来说,PCIe协议设计中每次传输的小数据量往往会因为协议开销而不经济,因此通过传输较大的数据块(如 4KB)来提升效率是一种被迫的选择。
NVMe Over CXL 解决方案:只获取你所需要的 FLITs(流量单元)
- NVMe 命令通过 PCIe(CXL.io)与以前一样,在 NAND 和设备本地 DRAM 之间传输 4KB 数据。
- CMB 被分配在 CXL 主机定向内存 (HDM) 地址空间中。
- 处理器只通过 CXL.mem 获取所需的 FLITs。
- 剩余的 BMC 数据保留在原地。
图片解释了 NVMe Over CXL 如何优化数据传输。通过 CXL.mem,处理器只提取所需的 FLITs(即小数据单元),而无需一次性提取整个 4KB 数据块。相比传统的 NVMe 通过 PCIe 执行大块数据传输,这种方法更加高效,因为它减少了不必要的数据传输,允许部分访问数据。剩余的数据仍然保留在存储设备中,进一步提升了存储和内存之间的数据管理效率。
FLIT 的全称是 Flow Control Unit,中文一般称为“流量控制单元”。它是许多高速互连协议(如PCIe、CXL等)中的一个基本数据传输单元。
图片勾勒出基于CXL的软件协议栈。
主机管理的数据块访问路径
图左演示应用在NVMe-oC单元基于CXL.mem/CXL.io访问NAND中数据。
NVMe 命令像往常一样被发出。
控制器内存缓冲区 (CMB)和命令/完成队列的地址定向到 CXL 设备 HDM。
NVMe-oC 控制器:
- 接收通过 CXL.io 发出的 NVMe 命令。
- 使用本地 HDM 进行操作队列。
- 使用本地 HDM 进行块数据传输(在本地 NAND 之间)。
- 通过 CXL.io 发送完成中断。
主机 CPU 通过 CXL.mem 访问HDM(主机定向内存)。
- CMB 数据缓冲。
- 命令和完成队列。
主机管理的内存模式(Host-Managed Memory Mode)
- 应用程序层面:
- 内存分配和释放由主机执行,命令通过 CXL.io 发送到 NVMe-oC 控制器。
- 应用程序的加载/存储操作通过 CXL.mem 访问设备的 HDM(主机定向内存)。
- Traps 机制允许在设备 HDM 和 NAND 间交换内存块。
解释了主机基于 NVMe-oC 管理SSD中内存,主控内存由主机(应用程序来管理),减少OS内核层的调用堆栈。
这对于应用程序的编写提出了挑战。之前开发都很简单,缺少接口就找操作系统,作为中台的OS功能多,互相调用,IO路径深在需要高效访问的场景就显得鸡肋了。
主机直接访问文件的路径。
- DAX 文件系统 提供程序员接口访问 HDM(主机定向内存)地址空间。
- NVMe-oC DAX 驱动 处理缓存命中与未命中,指导在设备 HDM 和 NAND 之间通过 CXL.io 进行数据传输。
- 主机 通过 CXL.mem 访问设备的 HDM。
- NVMe-oC 同时在所有访问模式下运行。
- xRAM 始终作为 HDM 访问。
- CMB(控制器内存缓冲区)、DAX 和 HDM都被允许使用。
- NAND 到 xRAM 的传输方案由主机通过 NVMe 命令控制。
- 持久性区域可以是部分的。
小结:
该图展示了 NVMe-oC 在多个访问模式下的同时运行能力,支持通过 NVMe 命令控制主机在 NAND 和 xRAM 之间的传输。xRAM 始终作为主机定向内存(HDM)进行访问,支持各种内存访问模式,包括 CMB、DAX 和 HDM。持久性区域可以部分实现,即可以部分保留数据的持久性而无需完全覆盖。
总结
CXL 概念最近几年在数据中心领域被广泛讨论,但实际进展有限,这与其触及的架构之深直接相关,且这一领域创新日新月异。
NVMe over CXL 是基于CXL现有协议+NVMe 协议实现主机访问内存、数据的高效路径,本质上是软件层创新,只不过这次不是由操作系统或应用厂商提出,而是由硬件厂商提出。
文中重点分析基于PCIe总线的内存/IO路径,因PCIe开销问题而效率有限,同时提出若干NVMe -oC场景的落地架构(Fig-10/11/12),不得不指出,这条路还比较远。