近日,NVME协议组织为了解决这些性能问题并为供应商提供标准化机制,在其架构中集成优化的计算功能,开发了NVM Express® (NVMe®) 计算存储特性。
计算存储的核心特性包括两个命令集:计算程序集和子系统本地内存。
-
其中,计算程序集允许NVMe设备在非易失性存储器(NVM)子系统上操作数据,通过命令管理在设备上进行计算的程序。
-
而子系统本地内存则支持通过NVMe I/O命令经由NVMe传输协议访问NVM子系统的本地内存,同时还包含了读取、写入及复制用户数据到设备内存的新命令。
NVMe Express(NVMe)计算存储架构设计了一个包含多种类型命名空间的系统,这些命名空间各自具有特定的功能和用途:
-
计算命名空间 (Compute namespaces):这是新引入的一种命名空间概念,专为在存储设备内部执行计算任务而设计。计算命名空间中包含计算资源,允许直接在存储设备上进行数据处理,从而减少数据传输到主机CPU再返回存储设备的过程,提升整体性能和效率。
在NVMe计算存储子系统中,Computational Programs(计算程序)是一个关键特性,它们概念上类似于软件中的函数或算法模块。这些程序在执行时会接收参数,并在完成所有任务后结束运行。
-
Load program:允许主机加载程序到计算命名空间中,这些程序可以是预置的或者由主机下载的。
-
Activate program:激活已加载到计算命名空间中的程序,使其准备就绪以执行相应的数据处理操作。
-
通过计算命名空间索引访问:计算程序可以通过计算命名空间中的程序索引来寻址和调用。
-
全球唯一标识符识别:每个计算程序可能有一个全球唯一的标识符(Program Unique Identifier),确保了在任何环境下都能唯一地识别并调用特定的计算程序。
-
仅处理本地内存数据:计算程序只针对存储子系统内部的Subsystem Local Memory(SLM)中的数据进行操作,避免了频繁的数据迁移,从而提高了性能和效率。Create/Delete Memory Range Set (MRS)创建或删除内存范围集,这是一种定义了子系统本地内存(SLM)内特定内存区域的结构,确保只有指定范围内的数据可供程序访问,增强了安全性并优化了资源使用效率。
-
设备预定义与可下载性:计算程序可以是设备制造商预先内置在硬件中的固定功能程序,例如出厂时提供的压缩、加密等服务;也可以是由主机加载到计算命名空间中的可下载程序,这意味着用户可以根据需要动态添加新的计算逻辑。
-
资源限制性执行:一个计算程序可能只能在一个NVMe子系统内的一部分计算资源上执行,即并非所有计算单元都支持执行所有的计算程序。
-
实现方式多样性:计算程序可以在不同类型的硬件平台上实现,如专用集成电路(ASIC),这种情况下,计算逻辑直接固化在芯片内部;或者在CPU核心上执行,此时计算程序是以软件形式运行于处理器之上。
-
内存命名空间 (Memory namespaces):这也是新提出的命名空间类型,它为主机提供了访问NVM子系统内内存资源的接口。内存命名空间使用了新的“子系统本地内存I/O命令集”,并且与计算程序命令集相互作用,使得计算程序能够在SLM(Subsystem Local Memory)中执行。通过这个命名空间,可以实现对SLM的读写操作以及在不同命名空间间的数据复制,例如从NVM命名空间或其他内存命名空间向内存命名空间复制数据。
新引入的针对内存命名空间的子系统本地内存I/O命令集中包含了一系列新的命令:
-
内存读取(Memory read)和内存写入(Memory write)命令允许主机与SLM之间进行直接的数据读写操作。
-
数据传输命令支持主机内存与内存命名空间之间的数据交换。
-
内存复制(Memory copy)命令则用于将数据从非易失性存储命名空间(NVM namespaces)或其它内存命名空间复制到目标内存命名空间中。
在访问粒度方面,有以下特点:
-
主机对内存命名空间的访问是以双字(dword)为寻址单位和访问粒度的,这意味着主机每次操作都是按双字大小进行的。
-
而计算命名空间对SLM的访问则是基于字节(byte)寻址和字节粒度,具有更高的灵活性,可以更精细地定位和处理数据。