美文网首页
NVMe 计算存储1-Subsystem Local Memor

NVMe 计算存储1-Subsystem Local Memor

作者: Stansosleepy | 来源:发表于2024-02-18 10:56 被阅读0次

    1、背景

    可计算存储,一直以来都是存储发展的一个分支,SSD是一种大量使用且大量消耗的电子产品,如果能在这个产品里面加上一点点附加功能,offload CPU的压力或者赋能一下AI大模型,都能极大的节省服务器本身的资源消耗,提高SSD设备的溢价。不少公司都按照自己的思路做了一些私有的解决方案。为了统一可计算存储的发展方向,NVMe协议组织在2024年初正式发布了计算存储的两份spec

    computational-programs-command-set
    subsystem-local-memory-command-set

    这两份spec引入了两种新的namespace类型和与之相对于的两个新的command set,并在Base spec中引入了Reachability的特性,本文主要介绍subsystem local memory command set (SLM)

    1.1 SLM 和计算存储 这两份command set的关系

    SSD是一种存储数据的设备,有多少存储颗粒就能提供多少存储容量。而计算除了需要处理器(CPU、FPGA等任何可计算设备)之外,还需要内存,SLM主要是约定对内存的使用。

    SLM命令集除了可以支持计算之外,还可以支持主机来访问这段内存,假设有一个设备只支持SLM命令集,那么他也可以是一个插在存储接口上的内存增容盘,只是这个内存增容盘只能由SLM命令集来访问,不能映射到主机的内存地址区域(这种用法可能CXL会需要?)

    1.2 SLM和CMB、PMR的关系?

    PMR(Persistent memory region)是一段存储设备提供的内存,可以映射到pcie bar空间,直接被主机按照byte颗粒度访问,并且是非易失的,掉电后数据不会丢,如果SSD里面集成了NVDIMM这样的设备,就可以将NVMDIMM的能力通过PMR的方式暴露给Host

    CMB(controller memory buffer)是一段存储主控内部的内存,通常容量较小,速度快,可以映射到pcie bar空间,指直接被主机按照byte颗粒度访问,是易失的掉电后数据丢失。

    SLM 与上面两种有所不同,SLM是易失的,不能被映射到pcie bar空间的内存,只能通过本文介绍的command set来访问,host可以访问,其他computational namespace或者NVM namespace都可以访问其中的数据(参考 reachability和copy命令),因此SLM实际上可以提供一个比较大的内容容量

    1.3 NVM namespace和SLM/Computational namepsace关系

    在nvme 协议重构之后,分出了三种不同的存储command set,NVMe Block、ZNS,KV,这三种command set分别对应三种不同的namespace,他们都是存储数据且掉电之后不会丢数据的namespace。

    computational command set和SLM command set对应两种新的namespace,他们不是NVM namespace,掉电之后会丢数据,或者不存储数据

    • Block/ZNS/KV : NVM namespace
    • computational/SLM : 非NVM namespace

    NVMe协议中namespace的定义

    Namespaces divide an NVMe SSD into logically separate and individually addressable storage spaces where each namespace has its own I/O queue. Namespaces appear as a separate SSD to the connected host who interacts with them as it would with local or shared NVMe targets.

    2、SLM command set

    在厘清SLM和其他command set的关系之后,实际上SLM很简单,他包含

    1. 4个I/O 命令(memory read、write、fill、copy)
    2. 2个LogPage(Reachability Group、Reachability Association)
    3. 2个Identify命令(CNS 0x5、CNS 0x6)

    2.1、 I/O命令

    memory read/write/fill/copy这四个命令都是提供给主机使用,使得主机可以获取memory namespace中的数据,这里主要讲一下copy命令,SLM可以被理解成是一个2 port memory,host可以访问,其他namepace也可以访问,如果是computational namespace访问memory namespace主要是做运算过程中的数据获取和结果产生,如果是NVM namespace去访问memory namespace,那么主要是通过copy命令,可以实现运算数据的准备,运算结果的持久化保存。

    • 从NVM->SLM or SLM->NVM,走copy命令
      • 需要考虑block和byte之间互相转化,length必须是lba的整数倍,例如从SLM->NVM必须是512字节或者4k字节的整数倍
    • SLM->SLM,走copy命令
      • Dword对齐
    • SLM->Host,走SLM的I/O命令
      • Dword对齐,读写长度的颗粒度也是Dword
    • Computational -> SLM
      • Byte级别颗粒度的访问

    2.2、Admin命令

    SLM命令集中的identify getlogpage没有太多介绍,SLM不支持namespace management命令,也就是说memory ns不支持修改属性

    相关文章

      网友评论

          本文标题:NVMe 计算存储1-Subsystem Local Memor

          本文链接:https://www.haomeiwen.com/subject/lpzpadtx.html