首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >NVMe + CXL 场景案例分析

NVMe + CXL 场景案例分析

作者头像
数据存储前沿技术
发布2025-02-11 19:55:55
发布2025-02-11 19:55:55
1.3K0
举报

全文概览

文章探讨了如何结合CXL和NVMe技术以实现高性能计算存储系统。

  • 介绍CXL协议如何通过提供低延迟、细粒度的路径来访问子系统本地内存(SLM),增强了NVMe设备与主机之间的内存一致性,并允许直接的加载和存储操作。
  • 详细阐述了利用这种技术进行计算存储的优势,包括通过P2P通信提高效率,以及实现数据的一致性和更新。
  • 对计算存储架构进行了说明,包括关键组件如计算存储处理器(CSP)、计算存储驱动器(CSD)和计算存储阵列(CSA),并描绘了一个具体资源分配示例。进一步讨论了NVMe计算存储的基本原理,包括引入的命令集和概念如功能数据内存(FDM)。
  • 提出了两个用例,分别展示了在数据后处理阶段如何通过CXL和NVMe技术优化性能,以及展望了未来的研究方向。整体上,文章强调了CXL和NVMe结合在提升计算存储性能方面的潜力及其在数据处理中的应用前景。

为什么结合 CXL 和 NVMe技术?

在之前整理的材料中,介绍了 NVMe 作为专门为SSD优化的存储访问接口(协议),为存储系统的高效访问提供通信基础。 CXL 是一种高速接口协议,旨在连接计算、内存和存储资源,提升数据中心的工作效率。它不仅是一个通信协议,还支持多种设备间的互操作性,允许灵活的资源分配和管理。

两种技术结合,为以下两种场景奠定基础:

  • NVMe 设备提供主机可访问的内存,形式为子系统本地内存(SLM)
    • 通过内存协议访问这些内存更为高效
    • 允许该内存的缓存一致性
    • 允许使用内存模型进行对等通信
  • 计算存储使用
    • 计算存储驱动器比传统存储设备拥有更多主机可访问的内存
    • 受益于对等通信(稍后将进一步讨论)

Cite

更多关于CXL的技术报道,可参考:

场景1:内存一致性

CXL 协议访问的优势

CXL 给 NVMe® 技术带来了哪些好处?

  • 允许主机和一个或多个带有 SLM 的设备之间的内存一致性(Dapustor 提出链式内存缓冲LMB
  • 低延迟、精细粒度的路径来访问 SLM
  • CXL.mem 允许直接的加载/存储访问 SLM
  • 允许使用 CXL.mem 进行对等通信

这与 CMB/PMR 有何不同?

  • CXL 允许与主机内存和 MMIO 空间之间的一致性——CMB/PMR 只允许通过 PCIe® 架构访问未缓存的 MMIO 空间的主机加载/存储
  • CXL 为设备访问主机内存提供一致性
  • CXL 协议比 PCIe 内存访问协议更高效
    • CXL 启用更低的延迟和更高的吞吐量
    • CXL 协议比 PCIe 内存访问协议有更宽松的排序规则

CMB 与 PMR

CMB(Controller-Memory Buffer)和PMR(Persistent Memory Region)是提升存储系统性能的重要技术,尤其在云存储环境中得到了广泛应用。

字节跳动的ZNS-SSD云存储实践中,CMB和PMR被广泛应用于优化存储系统架构,显著提高了I/O操作的效率和数据处理的吞吐量。


内存一致性的作用

  • 所有设备看到相同的内存视图
    • 设备之间查看的内存是一致的
  • 所有设备看到相同的共享数据视图
    • 数据是最新的
  • 设备和主机可以相互推送数据或从彼此拉取数据
    • 这包括设备间通信
  • 避免或减少可能变得过时的复制

主机可寻址的 SLM

图片介绍主机可寻址的 SLM(子系统本地内存)和其相关技术。SLM 可以通过主机物理地址(HPA)进行访问,支持主机和设备间的内存共享,并且通过主机加载/存储命令或 CXL.mem 命令进行读写。计算操作可通过计算程序命令触发,SLM 的数据可以实现主机间的对等数据传输(P2P)。此外,SLM 仍可以通过标准的内存读写命令进行访问,提供灵活的内存管理。


CXL® SLM 的潜在配置流程

右侧流程图介绍了配置配备 CXL SLM(子系统本地内存)功能的 NVMe 设备流程。

首先,操作系统会为 CXL 类型 2 设备进行标准的 PCIe 配置,然后加载 CXL 驱动程序。设备驱动程序会发现设备的能力,并调用操作系统的 CXL 内存核心服务来设置所需的 CXL 能力。驱动程序负责设备 CXL 内存的运行时管理,并可能使用新的编程接口来暴露 CXL 能力。

--

  • 配备 CXL SLM 的 NVMe® 设备类似于 CXL 类型 2 设备。
  • 对于 CXL 类型 2 设备的配置,操作系统计划进行标准的 PCIe® 配置(例如,分配 BAR 空间),然后根据设备的 PCI ID 加载驱动程序的 CXL 配置。
  • 配备 CXL SLM 的 NVMe 设备将使用增强型的 NVMe 驱动程序:
    • 针对基于 CXL 的 SLM 配置进行了增强。
    • 设备将使用现有的 NVMe 类别代码,并可能使用新的编程接口(PI)标识符来暴露 CXL 能力。
  • 设备驱动程序发现设备功能并调用操作系统的 CXL 内存核心服务进行设置:
    • CXL 核心服务提供内核接口,供驱动程序设置所需的 CXL 能力,例如 HDM 解码器,并返回必要的信息(例如 HPA 范围)。
    • 设备的 CXL 内存分配由 NVMe 驱动程序控制。
    • Linux 对 CXL 类型 2 设备的支持尚不可用。
    • 驱动程序负责设备 CXL 内存的运行时管理。

HPA-SLM 的映射关系

从右往左来看,应用程序(App)从本地主机获取映射的内存空间地址(HPA ),OS基于 CXL SLM调用,直接将 NVMe 设备中的内存隐射到 主机 HPA 上,其中需要借助SSD主控上的HDM 解码器来解析映射关系。

备注:

  • 一个 HDM 解码器可以映射一个或多个具有相同访问特性的 SLM 命名空间(如一致性、UIO 等)。
  • 需要不同访问特性的 SLM 命名空间必须使用不同的 HDM 解码器(见备份中的示例)。

场景2:计算型存储

计算型存储架构解析

CSx = 计算存储设备 —— 包括计算存储处理器 (CSP)、计算存储驱动器 (CSD)、计算存储阵列 (CSA)。

图片展示了计算存储架构的不同组件,包括计算存储处理器(CSP,左)、计算存储驱动器(CSD 中)和计算存储阵列(CSA 右)。这些组件通过 PCIe 或以太网等传输架构连接,提供存储资源和计算功能。计算存储处理器(CSP)侧重于资源处理和管理,计算存储驱动器(CSD)结合存储控制和计算存储功能,而计算存储阵列(CSA)则提供阵列控制和更加复杂的存储访问功能。


计算型存储的组件/模块拆解

  • CSR - 计算存储资源是 CSx 中可用的资源,必要时用于存储和执行计算存储功能(CSF)。
  • CSF - 计算存储功能是一组可以配置和由计算存储引擎(CSE)在计算存储引擎环境(CSEE)中执行的特定操作。
  • CSE - 计算存储引擎是计算存储资源(CSR),可以通过编程执行一个或多个特定操作。
  • CSEE - 计算存储引擎环境是为 CSE 提供的操作环境空间。
  • FDM - 功能数据内存是设备内存,可供计算存储功能(CSF)使用,用于存储在 CSF 操作中使用或生成的数据。
  • AFDM - 分配功能数据内存是功能数据内存(FDM)的一个部分,专门为一个或多个特定实例的 CSF 操作分配。
  • 资源库 - 可用但未激活的资源。

Cite

更多关于CSx 的背景知识,可参考:Marvell:计算型存储入门(全文)


图片展示了 NVMe 计算存储的基础架构。子系统本地内存(SLM)通过命令集引入了内存命名空间,而计算命名空间可以通过内存范围集访问这些内存区域。功能数据内存(FDM)与 SLM 相关联,允许计算引擎(CSE)处理存储程序(CSF)。此外,图片还显示了 NVM 命名空间和设备存储的关联。


Use Case

用例 1:减少主机内存的数据复制

图片说明了使用 CXL SLM 进行数据后处理的流程。

首先,应用程序通过 CXL.mem 将输入数据缓冲区写入主机内存,并可能将数据暂时保留在主机缓存中。然后,主机通过执行计算命名空间的程序命令,使用 CXL Snoop 协议保持数据的一致性,并通过 NVMe 拷贝命令将结果数据复制到存储介质。此流程通过降低延迟和避免不必要的数据复制,实现了高效的数据存储操作。

--

场景价值:

  • 避免使用 DMA 从主机内存或写入主机内存进行数据复制
  • 更低延迟的基于 CXL® 的直接加载/存储访问,尤其适用于小型输入数据

用例流程(右图):

  1. 应用程序使用 CXL.mem 写入(存储)输入数据缓冲区
    • 一些或所有数据可能在完成时保留在主机缓存中。
  2. 主机发出 NVMe® 执行程序命令至计算命名空间。
  3. 计算命名空间对输入数据缓冲区中的数据进行操作,并将结果存储在输出数据缓冲区中
    • 使用 CXL BI Snoop 协议保持主机缓存与输入数据缓冲区的一致性。
  4. 为计算命名空间发布 CQE(完成队列条目)。
  5. 主机发出 NVMe 拷贝命令,将输出数据缓冲区的数据复制到存储。
  6. 数据从输出数据缓冲区复制到存储介质。
  7. 为 NVM 命名空间发布 CQE。

用例2:绕过主机内存进行数据移动

应用程序通过 CXL.mem 将输入数据缓冲区写入主机内存,主机随后发出计算命令,计算命名空间执行数据处理,并将结果写入输出数据缓冲区。主机通过 I/O 写命令将数据传输到 SSD,而 SSD 使用 PCIe UIO 进行 P2P 数据传输,绕过主机内存,直接将数据写入存储介质。

--

示例用例(右图):

  1. 应用程序使用 CXL.mem 写入(存储)输入数据缓冲区。
    • 一些或所有数据可能在完成时保留在主机缓存中。
  2. 主机发出 NVMe® 执行程序命令至计算命名空间。
  3. 计算命名空间对输入数据缓冲区中的数据进行操作,并将结果存储在输出数据缓冲区中。
    • 使用 CXL BI Snoop 协议保持主机缓存与输入数据缓冲区和输出数据缓冲区的一致性。
  4. 为计算命名空间发布 CQE(完成队列条目)。
  5. 主机生成 I/O 写命令写入 SSD NVM 命名空间。
    • 数据指针指向在 SLM(HDM)中的输出数据缓冲区。
  6. SSD 使用 PCIe® UIO 进行直接 P2P 数据传输,从 HDM 空间写入存储。
    • 由于输出数据缓冲区位于 CXL HDM 空间中,UIO 无法使用 BAR 空间进行 P2P 传输。
  7. 为 NVM 命名空间发布 CQE。

关于 UIO (无序IO)技术

PCIe UIO 是一种新的 TLP(Transaction Layer Packet)格式,旨在优化数据传输性能,特别是在 CXL(Compute Express Link)环境中。UIO 允许非阻塞写入操作,从而提高数据处理速度。

UIO 的实现包括四个步骤:UIO DMA 请求、后备无效快照请求、后备无效快照及数据响应、以及 DMA 数据移动。这些步骤确保了数据的一致性和高效传输。

UIO 主要适用于 NVMe 设备,需在协议层面进行支持和启用,以实现最佳性能

关于 UIO(无序IO)技术的细致分析,详见:Solidigm:无序IO访问优化CXL内存性能


小结

  • CXL® 和 NVMe® 技术可以同时使用
    • CXL 提供对 NVMe SLM 的加载/存储访问
    • CXL 和 NVMe 协同工作,支持 NVMe I/O 命令集,包括计算存储命令集

优势:

  • 设备 SLM 和主机之间的一致性
  • 小数据传输时,主机与 SLM 之间的延迟较低
  • 由于 SLM 可通过 HPA 寻址,无需将数据从主机内存复制到 SLM
  • 绕过主机进行对等数据移动

展望:

  • CXL 和 NVMe 计算存储正朝着交汇的轨迹发展
  • 增强 NVMe SLM 以支持 CXL 是推动融合/协作的关键步骤
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-01-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 王知鱼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 全文概览
    • 为什么结合 CXL 和 NVMe技术?
    • 场景1:内存一致性
      • CXL 协议访问的优势
      • 内存一致性的作用
      • 主机可寻址的 SLM
      • CXL® SLM 的潜在配置流程
      • HPA-SLM 的映射关系
  • 场景2:计算型存储
    • 计算型存储架构解析
    • 计算型存储的组件/模块拆解
    • Use Case
      • 用例 1:减少主机内存的数据复制
      • 用例2:绕过主机内存进行数据移动
  • 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档