全文概览
想象一下,应用程序启动不再需要漫长等待,数据处理速度飙升至前所未有的水平。这正是持久内存(PMEM)的魅力所在,它模糊了内存与存储的界限,带来了字节级访问的低延迟和数据持久性。然而,这种革命性的技术并非没有挑战:如何确保数据真正持久化?如何在高并发环境下保证数据一致性?内存泄漏为何会变得“持久”?这些问题让PMEM的编程和应用变得复杂。
面对这些挑战,业界涌现出不同的解决方案。例如,VAST Data在其创新的分解式架构中巧妙地利用存储级内存(SCM)来应对;而Compute Express Link(CXL)标准则为PMEM的集成开辟了新途径,三星和MemVerge等厂商正基于CXL提供软硬件结合的方案。
本文将深入探讨这些不同的技术路径,分析它们如何各自应对PMEM编程的固有难题。VAST Data是如何通过系统内部设计抽象掉PMEM的复杂性?CXL如何标准化PMEM访问,又带来了哪些新的考量?三星的CXL内存模块和MemVerge的软件定义内存方案,又分别提供了怎样的抽象和价值?阅读本文,你将了解这些前沿技术如何重塑数据中心架构,以及它们在解决持久内存挑战上的独特策略。
阅读收获
持久内存 (Persistent Memory, PMEM),作为一种位于动态随机存取内存 (DRAM) 和传统存储之间的技术层级,提供了字节级可寻址、接近 DRAM 的低延迟以及数据持久性的特性。其核心价值在于,通过将工作数据集更靠近中央处理器 (CPU) 并减少输入/输出 (I/O) 瓶颈来加速应用程序。
“启动应用程序时,必须先将数据从存储读取到易失性内存中...这可能需要几秒钟、几分钟或几小时”,PMEM 的引入旨在显著缩短此类应用程序的启动时间。
尽管 PMEM 带来了性能上的巨大潜力,但也引入了传统易失性内存编程模型中不存在的新问题。这些挑战主要包括:
本报告旨在深入分析 VAST Data 基于存储级内存 (Storage Class Memory, SCM) 的架构,以及三星 (Samsung) 和 MemVerge 等供应商基于 Compute Express Link (CXL) 的 PMEM 解决方案,是如何应对上述持久内存编程挑战的。
报告将依次探讨 VAST Data 的方法、CXL 内存扩展带来的问题与机遇、相关厂商的技术实现,并进行对比分析,最后总结并展望未来趋势。
VAST Data 的架构设计,特别是其对 SCM 的战略性运用,为理解如何在一个大规模存储系统中管理和利用持久内存特性提供了重要的实践案例。
VAST Data 的核心是其分解式共享一切 (Disaggregated Shared-Everything, DASE) 架构。该架构将计算资源 (CNodes) 与存储资源 (DNodes) 分离,同时允许所有 CNodes 共享访问全部数据和元数据。这种设计使得计算和存储资源可以独立扩展,提供了极大的灵活性和可扩展性。
在这一架构中,SCM(例如 Intel 3D XPoint)扮演着至关重要的角色:
引用相关资料:“VAST 系统通过使用存储级内存 (SCM) 作为写入 QLC 大块数据之前的大型持久缓冲区来克服这个问题。... SCM 也被用作元数据存储。”。并且,“VAST 存储完全基于非易失性技术设计——用于缓存和元数据的超高速 SCM 内存以及用于数据存储的 QLC 芯片。”。
VAST Data 的架构从根本上为最终用户应用程序抽象了原始 PMEM 的编程复杂性。应用程序通过标准存储协议(如 NFS、S3、SMB、SQL、块协议、Kafka)与 VAST Universal Storage 交互,而不是直接操作 SCM。这意味着,对于 VAST Data 的用户而言,PMEM 的挑战主要由 VAST 的软件和架构在内部解决,应用程序开发人员无需直接处理复杂的 PMEM 底层细节。
VAST Data 通过其精心设计的写路径来确保数据的持久性:
这种机制确保了数据的耐用性:“一旦数据写入 3D XPoint,它随后可以被写入 QLC SSD”。并且,“数据最初被写入持久性的、高性能的 3D XPoint”。因此,“在发生电源故障时,不会有数据丢失”。
VAST Data 的写路径可以用以下流程图表示:
VAST 利用 SCM 作为持久性缓冲区,并结合其向 QLC 大块写入的策略,在系统内部处理了“持久化前需刷新”以及“写入顺序”的问题。应用程序可以从 SCM 获得快速的写入确认。持久内存的一个核心挑战是“刷新之前,不能保证存储区是持久的”。VAST 首先将数据写入本身就是持久介质的 SCM,并迅速给予确认。随后数据到 QLC 的迁移,包括刷新 QLC 缓存,是 VAST 内部的异步过程。至于“CPU 具有无序 CPU 执行和缓存访问/刷新”可能影响持久性顺序的问题,则由 VAST 内部的写入逻辑和 SCM 的特性共同管理。因此,VAST 有效地利用 SCM 的持久性来提供低延迟确认,同时确保数据最终有序地持久化到 QLC,将这些底层的 CPU/缓存刷新问题从存储消费者那里抽象掉了。
dave's point
VAST 将SCM降维成持久化存储介质,而不是作为高速缓存(DRAM)来使用,因此规避了大量缓存系统的设计问题。
VAST Data 在其 Element Store 和 DataSpace 中实现了更高层次的一致性机制。
VAST 并非仅仅依赖 SCM 的硬件原子性原语来实现整体数据一致性,而是实现了一套复杂的、软件定义的一致性模型(如租约、分布式锁),以适应其分布式共享一切架构的需求。
持久内存的一个挑战是“x86 上任何大于 8 字节的内容都不是 powerfail atomic”。VAST 处理的是文件、对象等远超 8 字节的大型数据结构。其一致性机制(租约、DataSpace 锁)在更高的语义层面运作。
SCM 在此处的角色是为 VAST 的软件提供一个快速、持久的介质,以便高效地实现这些一致性协议(例如,快速持久地更新租约信息或锁状态)。因此,VAST 利用 SCM 的速度和持久性来构建强大、可扩展的软件一致性,而不是受限于或直接向应用程序暴露 PMEM 的硬件级原子性约束。
VAST Data 通过多种方式管理 SCM 的特性并最大化其价值:
通过这些机制,SCM 为 VAST Data 提供了低写入延迟和高性能,并通过缓解 QLC 的耐久性限制,使得采用高密度、高成本效益的 QLC 成为可能。
Compute Express Link (CXL) 作为一种新兴的互联标准,为内存扩展和持久内存的集成开辟了新的可能性,但同时也可能带来与传统 PMEM 类似的编程挑战。
CXL 是一种开放的、缓存一致性的互连标准,构建于 PCIe 物理层之上。它用于连接 CPU 与内存及其他设备。CXL 的关键协议包括:
CXL 定义了三种设备类型:
CXL 2.0 规范引入了对持久内存的标准化支持。资料显示:“2020 年 11 月发布的 CXL 2.0 规范增加了新特性——包括...对持久内存的支持”。CXL 2.0 提供了持久内存接口的标准化管理,这包括对诸如全局持久刷新 (Global Persistent Flush, GPF) 等功能的支持,三星的 CMM-H 产品就提及了这一点。CXL PMEM 可以作为无 CPU 的 NUMA 节点呈现给主机,通过加载/存储指令进行访问。
尽管 CXL 为 PMEM 的集成提供了标准化的协议和硬件通路,但如果开发者在没有充分抽象的情况下与 CXL PMEM 进行底层交互,许多原始的 PMEM 编程挑战(如数据持久性细节、复杂操作的一致性、泄漏、错误处理)仍可能重现。
CXL 使 PMEM 能够以缓存一致的方式被连接和访问。然而,用户问题中列出的 PMEM 挑战关乎管理 PMEM 的状态和行为。CXL.mem 提供了访问途径,但操作系统、驱动程序以及最终的应用程序或中间件仍需负责正确使用它,以确保持久性、超越硬件原子性的一致性等。
用户最初的担忧,“为一个服务器平台开发的应用程序可能无法移植到其他平台或 CPU 代系”,在应用程序对 CXL PMEM 行为做出特定假设(而这些假设未被高级操作系统抽象所覆盖)的情况下,仍然可能成立。
因此,虽然 CXL 是 PMEM 集成标准化方面的一大进步,但它并不能自动使 PMEM 编程变得简单。软件层(操作系统、库、供应商解决方案)对于简化至关重要。
面对 CXL 带来的机遇与挑战,内存产品厂商正通过硬件和软件层面提供解决方案,以期简化 PMEM 的使用并克服其固有的复杂性。
三星推出了一系列基于 CXL 的内存模块,旨在扩展内存容量、带宽并引入持久性特性。
三星的 CMM-H 试图在设备内部抽象管理混合 DRAM/NAND 持久内存系统的某些复杂性。原始的 PMEM(尤其是混合介质)需要复杂的主机软件来管理分层、刷新到 NAND 等操作。CMM-H 集成了控制器、DRAM 和 NAND,并以 CXL 内存设备的形式呈现给主机。它处理其 DRAM 和 NAND 之间的内部数据迁移,并响应 CXL PMEM 命令(如 GPF)。这旨在通过将管理智能嵌入 CMM-H 来简化基于 CXL 的 PMEM 的采用。主机操作系统和应用程序与一个行为更规范的“CXL PMEM 设备”交互,而不是直接管理原始闪存和 DRAM 组件以实现持久性。然而,主机仍需要具备 CXL PMEM 感知能力(例如,使用 GPF)。
MemVerge 采用软件定义的方法来应对 CXL 和持久内存的挑战。
MemVerge 的 Memory Machine 提供了一个全面的软件抽象层,直接解决了应用程序在其之上运行时面临的许多 PMEM 编程挑战(持久性、通过快照实现的一致性、通过虚拟化隐式管理的泄漏问题、错误处理抽象)。用户问题中列出的 PMEM 编程痛点,通过 Memory Machine 的内存虚拟化、数据分层以及快照和复制等数据服务得到了有效缓解。
通过管理底层的 PMEM(包括 CXL PMEM)并向应用程序呈现简化的内存模型,它使开发人员免受底层 PMEM 复杂性的困扰。例如,快照为应用程序提供了一种强大的方式来确保一致性和可恢复性,而无需手动执行刷新/屏障操作。持久性内存泄漏则在虚拟化层的内存记账范围内进行管理。因此,MemVerge 提供了一个系统级软件解决方案,旨在使 PMEM(包括 CXL 连接的 PMEM)对于许多应用程序而言像易失性 DRAM 一样易于使用,同时增加了企业级数据服务。这是一种比 CXL 本身甚至像 CMM-H 这样的设备所能单独提供的更高层次的抽象。
VAST Data 将 SCM 作为其存储系统的内部组件,有效地抽象了其复杂性(文件系统层面解决问题)。而 CXL PMEM 解决方案,无论是三星的硬件还是 MemVerge 的软件,都旨在将 PMEM 更直接地集成到服务器的内存层次结构中,但为应用程序开发者提供了不同程度的抽象。
下表对这些方法在应对持久内存编程挑战方面进行了比较:
表 1:持久内存编程挑战应对方案对比:VAST SCM vs. CXL PMEM
PMEM 挑战 | VAST Data (内部 SCM 使用) | CXL 原生接口 | 三星 CMM-H (CXL PMEM 的设备级抽象) | MemVerge Memory Machine (CXL PMEM 的软件抽象) |
---|---|---|---|---|
数据持久性 (刷新、排序) | SCM 作持久写缓冲,内部执行落盘逻辑,应用获快速确认。系统确保刷新到 QLC。 | 定义 PMEM 接口,如 GPF 命令。主机 OS/应用负责从 CPU 到 CXL PMEM 的刷新。应用仍需关注排序。 | 设备上 DRAM 缓存,NAND 后备。响应 CXL GPF。管理从其 DRAM 到 NAND 的内部刷新。简化主机刷新目标。 | 透明分层。对于持久层,确保数据刷新。快照提供时间点持久性。 |
数据一致性 (原子性、一致性) | 软件定义一致性 (租约、分布式锁) 用于其分布式文件/对象系统。SCM 用于高效实现这些机制。 | CXL.cache 实现硬件一致性 (MESI)。原子性受限于 CPU/硬件 (如 8 字节)。更大操作需软件实现。 | 依赖 CXL.cache 实现一致性。其 DRAM/NAND 间内部一致性。主机处理事务一致性。 | 快照提供原子、一致的时间点。软件为其虚拟化内存管理一致性。 |
内存泄漏 (持久性泄漏) | 内部系统问题。VAST 软件管理 SCM 空间。非应用级 PMEM 泄漏。 | 若应用直接映射/管理 CXL PMEM,风险高。OS/分配器负责。 | 主机 OS/应用仍管理 CMM-H 上的分配。泄漏在主机端。 | 在其虚拟化池内管理内存。抽象原始分配/释放,可能减少应用级泄漏风险。 |
字节级访问 (利用/管理) | SCM 支持;可能用于元数据。主要数据路径到 QLC 是块级。应用看到文件/对象/块接口。 | CXL.mem 允许加载/存储,使能应用的字节级访问。 | 通过 CXL.mem 暴露内存,主机可字节寻址。 | 向应用呈现内存 (可字节寻址),管理底层物理页。 |
错误处理 (直接硬件错误) | 系统级韧性 (DASE),错误控制。从应用抽象硬件错误。 | 定义错误报告。主机 OS/应用可能需处理 CXL PMEM 设备错误。 | 设备可通过 CXL 报告错误。主机 OS/应用负责。 | 软件层可潜在屏蔽或管理某些错误,或向上报告。通过复制提供高可用性。 |
性能影响 | SCM 加速写入,改善 QLC 性能/耐久性。元数据访问低延迟。 | 延迟高于本地 DRAM,低于 NVMe SSD。带宽取决于 PCIe 版本和宽度。 | 设备上 DRAM 缓存减轻 CMM-H 的 NAND 延迟。性能取决于其 DRAM 命中率。 | 分层旨在将热数据置于最快层 (DRAM)。性能取决于分层效果。 |
价值主张 / 用例适用性 | 用于要求严苛的文件/对象/表/块工作负载的高性能、可扩展主存储。 | 内存容量/带宽扩展,分层内存,支持 PMEM。 | 用于内存数据库、AI/ML 的具成本效益的带持久性选项的内存扩展。 | 无需代码更改即可为现有应用增强大内存、PMEM 能力 (快照、分层);AI/ML、HPC、内存数据库。 |
此表格清晰地展示了不同解决方案在应对持久内存编程挑战方面的策略差异。VAST Data 通过系统级集成将 SCM 的复杂性内部化。CXL 提供了标准化的接口,但其原生形态仍可能将一些编程负担传递给上层软件。三星的 CMM-H 在设备层面进行了一定的抽象,而 MemVerge 则通过一个全面的软件层来提供更高级别的抽象和附加功能。这种结构化的比较有助于根据具体需求和应用场景评估最合适的持久内存采用路径。
本报告分析了 VAST Data 如何在其存储系统中内部利用 SCM 来构建高性能、高韧性的解决方案,并有效地将应用程序与原始 SCM/PMEM 的编程复杂性隔离开来。同时,CXL 标准化了 PMEM 的互连方式,为内存扩展和分层提供了新的可能性,但若无适当抽象,也可能重新引入 PMEM 的编程挑战。三星(通过 CMM-H 等硬件中心型 CXL 设备)和 MemVerge(通过 Memory Machine 等软件定义解决方案)等供应商正在提供不同层次的抽象,以简化 CXL PMEM 的采用并应对其固有挑战。
数据中心架构正朝着内存分层和分解的方向发展,SCM 和 CXL 在其中扮演着关键角色。SCM(如 3D XPoint)在缓冲、元数据存储和专用缓存层方面持续显示其价值。CXL 则正成为实现灵活内存扩展、池化和共享的关键技术,能够同时容纳易失性 DRAM 和持久内存。“CXL 是一项十年一遇的技术,它将改变数据中心的架构。”。
技术的发展呈现出融合与专业化的趋势。PCIe 和 CXL 等技术的融合为新的内存范式奠定了基础。这种通用基础使得多样化的 PMEM 解决方案得以涌现。VAST Data 以专业化的方式将 SCM 用于其存储架构;三星则构建了专业的 CXL PMEM 硬件;MemVerge 开发了专门的软件来管理 CXL(及其他)内存。这意味着未来可能会出现一个丰富的生态系统,应用程序可以根据性能和可编程性需求,通过从高级存储系统到软件定义内存平台,再到更直接(但仍由操作系统管理)的 CXL PMEM 访问等多种方式来利用 PMEM。对于 PMEM 的使用,不会存在一种万能的解决方案。
尽管取得了显著进展,但在充分发挥 SCM 和 CXL PMEM 的潜力方面仍存在一些挑战和值得进一步创新的领域:
随着这些挑战的逐步解决和技术的持续创新,持久内存和 CXL 有望在未来的计算和存储架构中发挥越来越重要的作用,为数据密集型应用带来前所未有的性能和效率。
===
Cite
Notice:Human's prompt, Datasets by Gemini-2.5-Pro-DeepResearch
#CXL内存扩展 #VAST高性能存储