查看原文
其他

CXL赋能NVMe:计算存储架构与应用

常华Andy Andy730
2025-01-01

主要内容

  1. 传统的NVMe设备通过子系统本地内存(SLM)提供主机可访问的内存,但只能通过PCIe访问,效率较低且不支持一致性操作。
  2. CXL协议可以提供对NVMe SLM的低延迟、细粒度的Load/Store访问,并实现与主机内存和MMIO空间的一致性,以及基于内存模型的点对点通信。相比于PCIe的内存访问协议,CXL协议效率更高,延迟更低,吞吐量更高,且顺序规则更宽松。
  3. NVMe TP4184提案正在定义主机可寻址SLM的架构,支持主机通过PCIe BAR或CXL协议以主机物理地址(HPA)访问SLM。
  4. 通过CXL访问NVMe SLM可以实现设备与主机之间的数据一致性,降低小规模数据传输的延迟,并通过HPA直接访问SLM,无需数据拷贝。基于HPA的点对点数据传输可以绕过主机,进一步提升效率。
  5. 用例一:数据后处理(写入存储之前)。利用CXL访问NVMe SLM,在数据写入存储介质之前进行后处理,避免了数据拷贝,降低了延迟。
  6. 用例二:使用标准SSD进行数据后处理。利用CXL访问NVMe SLM和PCIe UIO,绕过主机内存,实现数据直接从CXL可访问SLM传输到标准SSD。

常见问题解答

1.为什么需要将NVMe和CXL技术结合?

NVMe设备通过子系统本地内存(SLM)的形式提供主机可访问的内存。使用内存协议访问此类内存更高效,支持缓存一致性,并支持使用内存模型进行点对点通信。

计算型存储也能从NVMe和CXL的结合中受益。计算型存储设备拥有比传统存储设备更多的主机可访问内存,并能从点对点通信中获益。

2.CXL如何使NVMe技术受益?

  • 内存一致性:CXL支持主机和一个或多个具有SLM的设备之间保持内存一致性。
  • 低延迟访问:CXL.mem提供了对SLM进行低延迟、细粒度访问的途径,支持直接Load/Store访问。
  • 点对点通信:CXL.mem支持使用内存模型进行点对点通信。
  • 高效协议:CXL协议比PCIe内存访问协议更高效,延迟更低,吞吐量更高,并且排序规则更宽松。

3.CXL的Load/Store访问与CMB/PMR有何不同?

CXL支持与主机内存和MMIO空间保持一致性,而CMB/PMR仅支持主机通过PCIe架构使用未缓存的MMIO空间进行Load/Store访问。CXL为设备访问主机内存提供了一致性。

4.内存一致性有哪些好处?

  • 所有设备对内存的视图都一致,确保数据在设备之间保持一致。
  • 所有设备都能看到共享数据的最新视图,避免数据过时。
  • 设备和主机可以相互推拉数据,包括设备到设备的通信,避免或减少过时的数据副本。

5.什么是计算型存储架构?

SNIA提出的计算型存储架构模型在NVMe计算领域得到广泛应用。该架构的核心组件是计算型存储驱动器(CSD),它比传统存储驱动器拥有更多的主机可访问内存。

6.NVMe如何支持计算型存储?

  • NVMe引入了计算程序命令集和计算命名空间。
  • 子系统本地内存(SLM)命令集引入了内存命名空间。
  • 计算命名空间可以使用内存范围集访问SLM命名空间。

7.什么是主机可寻址SLM(NVMe TP4184)?

  • NVMe TP4184处于架构定义阶段,它支持通过主机物理地址(HPA)寻址SLM。
    • 可通过PCIe BAR或CXL访问SLM。
    • 主机应用程序可以对SLM内存进行虚拟映射,无需切换上下文即可访问SLM。
    • 主机和设备都可以访问SLM内存,可以使用主机Load/Store命令或CXL.mem命令进行读写。
    • 仍然可以使用SLM命令集访问SLM。

8.CXL和NVMe的未来发展方向是什么?

CXL和NVMe计算型存储正朝着融合的方向发展。增强NVMe SLM以支持CXL是实现融合与协作的重要一步。
NVMe和CXL的结合将带来以下优势:
  • 设备SLM和主机之间的一致性。
  • 主机和SLM之间的小数据传输延迟更低。
  • 通过HPA寻址SLM,无需将数据从主机内存复制到SLM。
  • 绕过主机进行点对点数据传输。


Jason Molgaard (Solidigm)

为何我们需要将CXL与NVMe技术融合?这里有两个关键的驱动因素需考量。

首要的是,NVMe设备通过Subsystem Local Memory(子系统本地内存,SLM)的形式,提供主机可访问的内存。假如我们能通过内存协议来访问这些内存,那该有多好?此外,若设备中的内存具备一致性支持,也将大有益处。同样,利用内存模型实现此类内存的点对点通信,也将是一个显著优势。

另一驱动因素是Computational Storage(计算型存储)的应用场景,尽管它并非唯一的应用场景。从计算型存储的视角来看,这类设备相较于传统存储驱动器,拥有更多的内存。借助这些内存,通过内存协议进行访问可能会极具价值。计算型存储显然能从点对点通信中获益。

我认为CXL满足了我们的大部分需求。

CXL为设备和主机中的内存提供了一致性,使得一致访问成为可能。CXL支持对Subsystem Local Memory(SLM)进行低延迟且细粒度的访问。CXL.mem实现了对SLM的直接Load/Store访问。此外,CXL还支持通过CXL.mem实现点对点通信。

你可能会问,这与NVMe长期以来支持的CMB(Controller Memory Buffer,控制器内存缓冲区)和PMR(Persistent Memory Region,持久性内存区域)有何异同?这是一个很好的问题。

CXL支持与主机内存及MMIO(Memory-Mapped I/O,内存映射I/O)空间进行一致性操作,而CMB/PMR仅能通过PCIe访问执行Load/Store操作及未缓存的MMIO空间,因此无法实现一致性操作。

这一区别尤为显著:借助CXL技术,我们能够达成与主机及其他设备间的一致性操作,而采用CMB或PMR则无法实现这一目标。

此外,与PCIe的内存访问协议相比,CXL协议更为高效,能够实现更低的延迟和更高的吞吐量。CXL的顺序规则相较于PCIe也更为宽松,这进一步提升了其性能。

首先,简要介绍一下一致性的一些普遍优势,因为之前已多次提及。

其一,通过一致性,所有设备对内存的视图均保持一致。内存在设备间保持一致,可以避免数据过时的问题。所有设备对共享数据的视图均为最新,从而消除了过时的副本。

设备和主机可以相互推送或拉取数据,从而实现设备间的通信。数据可以一致地发送和接收,避免或减少不必要的数据副本。过时的数据副本是我们希望消除的问题,而一致性正是解决这一问题的关键所在。

Bill Martin (Samsung)

计算型存储架构(Computational Storage Architecture)是由SNIA提出的一个模型,该模型在NVMe的计算领域得到了广泛应用。我们尤为关注该架构中的核心组件——计算型存储驱动器(Computational Storage Drive)。

我们目前正聚焦于该架构的一个细分领域。尽管计算型存储架构涵盖了多个组件,但我们特别对用于计算的内存感兴趣。这部分内存承担着存储计算结果的重任。

在SNIA的模型中,这部分内存被命名为功能数据内存(Function Data Memory, FDM)。此外,该模型还支持为特定用途分配的功能数据内存(Allocated Function Data Memory, AFDM)。

我们正在探索如何在NVMe计算型存储中访问这种内存。为此,NVMe引入了子系统本地内存(SLM)的概念。我们已经研发了子系统本地内存命令集(Subsystem Local Memory Command Set),它支持通过NVMe命令进行通信。

在计算型存储架构中,SNIA定义的FDM概念与SLM是等价的。

此外,在计算型存储命令集中,我们还定义了一种内存范围集(Memory Range Set),用于标记子系统本地内存中的特定区域。这在后续讨论内存映射时将显得尤为重要。

我们的目标是让主机能够通过Load/Store命令直接访问内存,而不仅仅依赖于NVMe命令。

介绍一下TP4184的工作。

这是NVMe对这一概念的命名,即主机可寻址SLM(Host Addressable SLM)。

主机可寻址SLM具备哪些功能呢?目前我们仍处于架构设计阶段,正在对这一体系结构进行定义。它的核心功能是什么?SLM被作为主机物理地址(Host Physical Address, HPA)进行寻址。这意味着在发送给NVMe的命令中,可以将HPA作为分散聚集列表(Scatter Gather List, SGL)的一部分进行传递。通过SGL,这些HPA可以被传递到设备上的SLM,并以其作为HPA进行寻址。

实现这一功能有两种途径:PCIe BAR或CXL。在这个新的提案中,我们计划通过这两种方式使内存可访问。这种内存的功能与CMB相似,但具体的比较和差异仍在架构讨论中。

除了通过NVMe命令集访问SLM外,主机还可以通过Load/Store命令或CXL.mem命令对其进行读写操作。选择CXL还是PCIe BAR访问取决于设备的配置。这两种方式是互斥的,不能同时使用。计算操作则通过计算程序命令集来触发。该命令集通过“执行”(execute)命令来指定SLM中用于计算的部分内存。

通过这一提案,NVMe还引入了一项新功能,即基于HPA的点对点(peer-to-peer)数据传输。例如,如果两个NVMe设备都通过CXL将HPA映射到各自设备上,一个设备就可以直接使用其HPA向另一个设备传输数据。这种数据传输利用了CXL的映射结构。

SLM仍然可以通过SLM命令集进行访问,包括内存读(MEMRD)和内存写(MEMWR)命令。此外,还可以使用内存复制(MEMCPY)命令,将数据从SLM复制到设备存储中,或进行反向操作。

这种机制在系统中是如何运作的呢?以下是NVMe SLM结合CXL的潜在配置流程。请注意,这并不是唯一的方法,但它能够展示这种功能如何在生态系统中得到应用。

一个带有CXL功能的NVMe设备可以视为一个CXL Type 2设备。我们利用其特性将其映射到生态系统中。对于CXL Type 2设备,操作系统会执行标准的PCI配置。例如,设备上会设置BAR空间。无论是CXL设备还是NVMe设备,BAR空间都是各种配置所必需的。

对于具备CXL SLM功能的NVMe设备,我们将采用一个增强的NVMe驱动程序。设备在系统中表现为一个NVMe设备,而不是被拆分为独立的NVMe和PCIe功能,或者单独表现为一个CXL功能。这种增强功能是基于SLM配置的。设备将使用现有的NVMe类代码,但可能会引入一个新的编程接口来暴露其CXL能力。

NVMe驱动程序会发现设备的CXL功能,并调用操作系统的CXL核心服务来配置内存。操作系统会配置HPA空间,并将其保留给NVMe驱动程序进行管理。与一般的HPA空间不同,这种空间不是普遍可访问的,而是由NVMe驱动程序专门管理的。

目前,Linux尚未原生支持CXL Type 2设备,但可以通过绕过命令来实现类似的功能。在运行时,NVMe驱动程序负责设备CXL内存的管理。

在此系统中,为特定计算命令配置内存范围的具体流程如下:在左侧幻灯片中展示的是,一个命名空间ID及其对应的偏移量共同指向了一个SLM命名空间。

关键特性概述:

所有CXL可寻址的SLM在HPA空间中是连续分布的,不存在用于其他用途的间隔。

HDM(Host-Managed Device Memory,主机管理设备内存)解码器负责将各个SLM命名空间映射到HPA空间中。

举例来说,HPA空间中的一个特定段落与为计算操作分配的内存范围相对应。该段落被映射到HPA空间,并作为虚拟地址提供给应用程序使用。应用程序能够利用此虚拟地址来访问SLM空间。

这一概述清晰地展示了计算和内存配置是如何无缝地集成到整个系统中的。

Jason Molgaard(Solidigm)

首先,我们来看第一个用例,具体说明请参见右侧图示。

在图示的顶部是主机,主机下方连接的是一个CXL结构,而该结构则与一个计算型存储设备或驱动器相连。接下来的示例将更贴近计算型存储处理器的实际应用场景。

在左侧展示的是主机物理地址空间,以及其中分配给CXL SLM的一部分空间,主机应用程序将在这部分空间中执行相关操作。

这个用例描述的是在数据写入存储之前进行后处理的操作。简而言之,我们将数据发送到驱动器上,执行特定的计算处理,然后将处理结果写入到驱动器的持久化介质中。在我们的配置中,包含一个输入数据缓冲区和一个输出数据缓冲区。在此场景下,输入数据缓冲区位于CXL可访问的SLM部分,而输出数据缓冲区则位于传统的SLM中。

操作流程概述如下:

应用程序利用CXL.mem功能将数据写入或存储到输入数据缓冲区中。写入操作完成后,可能会有部分数据仍然驻留在主机缓存中,但这并不会影响后续操作。

主机发出NVMe执行程序命令,该命令属于计算程序命令集。计算过程会从输入数据缓冲区中读取数据,并将处理结果写入到输出数据缓冲区中。

在此过程中,设备会向主机发出CXL Back Invalidate Snoop请求,要求主机将所有相关数据发送到设备,并使主机缓存中的副本失效。这一步骤确保了设备在进行操作之前已经拥有了所有必要的数据。

程序执行完成后,设备会向主机报告执行结果。

随后,主机发出NVMe复制(Copy)命令,将数据从SLM输出缓冲区移动到NVMe命名空间中,并最终写入到持久化介质中。操作完成后,主机会收到一个完成通知。

上述每一步操作都与图示中的编号箭头相对应。

接下来,我们来看第二个用例。这个用例与第一个用例类似,其中输出数据缓冲区也位于通过CXL可访问的主机可寻址SLM中。然而,在此用例中,输入和输出数据缓冲区都位于主机可寻址SLM中。

这种配置的主要优势在于,当使用传统SSD作为数据传输的最终目标时,可以绕过主机直接进行数据移动。

工作流程概述如下:

主机应用程序将数据写入到主机可寻址SLM中输入缓冲区的地址空间中。同样地,可能会有部分数据仍然驻留在主机缓存中,但这并不会影响后续操作。

主机发出执行程序命令,将数据从输入缓冲区处理到输出缓冲区中。

如果需要的话,设备会通过CXL发出Back Invalidate Snoop请求,以确保所有数据的一致性。这一步骤会使主机的缓存副本失效,并将所有数据保留在设备上。

计算完成后,数据会被写入到输出缓冲区中。

主机发出I/O写入命令,将数据写入到SSD的NVMe命名空间中。此时,数据指针会引用CXL内存空间中主机可寻址SLM的输出缓冲区。

点对点传输通过PCIe UIO读取输出缓冲区中的数据,并将其写入到SSD的持久化介质中。随后,主机会收到一个完成通知。

我们坚信NVMe和CXL技术能够高效地协同工作。CXL为NVMe的SLM提供了Load/Store访问的能力。通过我们持续参与的TP4184项目工作,我们的目标是支持CXL在所有I/O命令集(包括计算程序)中的访问。

这一技术融合带来了一些主要优势:
  • 一致性(Coherency):确保了设备SLM与主机之间的数据一致性。
  • 低延迟(Lower Latency):尤其适用于小规模数据传输场景,CXL在这方面展现出了出色的性能。
  • 直接访问(Direct Access):由于SLM可以通过主机物理地址(HPA)进行寻址,因此无需将数据从主机内存复制到设备中,主机可以直接写入到SLM中。
  • 点对点数据传输(Peer-to-Peer Data Movement):实现了数据传输时绕过主机的直接传输方式。

展望未来,TP4184项目仍有许多工作需要完成。我们期待在未来的展示中能够探讨更多的技术细节。这标志着NVMe和CXL技术融合迈出了重要的第一步。

----------

参考资料:Molgaard, J., & Martin, B. (2024). NVM Express Support for CXL [Video]. YouTube. Retrieved from https://www.youtube.com/watch?v=HUQQ_m8wbWI



---【本文完】---

近期受欢迎的文章:
  1. 突破内存墙:软件定义内存技术详解及其应用(演讲/技术白皮书)
  2. AI基础设施再升级:SC24存储厂商技术发布全景
  3. 2024年第三季度HDD行业市场概览
  4. 高性能数据中心存储:基于DPU的解决方案(演讲)
  5. CXL技术深度剖析:机遇、挑战与市场展望



更多交流,可加本人微信

(请附中文姓名/公司/关注领域)

继续滑动看下一个
Andy730
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存