美文网首页
NVMe 计算存储2-Computational Program

NVMe 计算存储2-Computational Program

作者: Stansosleepy | 来源:发表于2024-02-20 14:22 被阅读0次

1、背景

在当前经典计算机结构中,要完成计算,需要有处理器、内存、存储三个组件,一直以来都有厂商希望存储盘能够实现特定的计算加速功能,可以在更加靠近数据的位置进行计算,降低主机cpu的运算压力,减少大量无效数据的读写操作。

NVMe协议已经定义了完备的存储相关的功能,如果需要在存储设备中完成计算功能,就需要在NVMe协议中补齐“计算”,“内存”两个组件,本次发布的spec也是为了统一这两方面的内容

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

本文主要介绍computational-programs-command-set

1.1、Compute\SLM\NVM 3种namespace之间的关系

本次推出的两份command set都属于I/O command set,分别对应两种新的namespace,这两种新的namespace不是NVM namespace,他们是不能持久化保持数据的,大致的关系如下

ns cmd set NVM? 备注
block ns NVM-Block Yes 最常见的盘
zns ns NVM-Zns Yes
kv ns NVM-KV Yes
memory ns SLM No
compute ns Computational Programs No

1.2 Compute namespace

  • 在compute namespace中可以执行特定的计算,计算的算法可以是device中内置的算法,也可以是临时下载的代码片段
  • compute namespace中可以同时存在多个程序(内置 or 下载)在执行之前需要activate某一个程序,也可以deactivate
  • 计算所需的数据,生成的数据都是放在SLM中,SLM中的数据可以来自于host,也可以是通过copy命令从NVM NS中导入。生成的数据可以被host通过memory read命令读取,也可以通过copy命令写入NVM NS中进行持久化保持,后续可以通过NVM NS的读命令获取
  • 每个compute namespace支持1或者多个program type
    • ebpf、vendor specific等等

1.3 Memory Range Sets

  • Memory Range Set(MRS):单个MRS是一段或者多段SLM中的内存区域,每一段都由nsid、offset、length唯一指定
  • MRS是在compute ns中创建的
  • MRS被创建之后,compute ns执行Execute program命令时需要提供RSID
  • 不同的compute ns创建的MRS可以是overlap重叠的(不同的program允许共享内存区域),在单个MRS中不同的range不允许重叠
  • MRS中不同的range,可以来自于不同的memory namespace
  • compute ns只能在创建过Reachability Association的memory ns中创建MRS
  • RSID是在compute ns中进行管理,在compute ns中RSID需要唯一
  • MRS是有Memory Range Set Management commnad进行管理

1.4 Program执行流程

image.png
  1. 下载/激活PIND0的程序
  2. 为程序创建MRS内存资源
  3. 将需要计算的数据准备到MRS中(可以是NVM ns copy,也可以是host memory write)
  4. Execute Program执行程序成功
  5. Host可以memory read结果,也可以调用copy命令将结果存入NVM namespace,还可以执行下一个程序,将结果用于后续的计算

1.5 Reachability

目前这部分内容是在Base Specification中定义,可以参见下图


image.png

1.6 PUID

  • PUID是一个64 byte的值,代表一个Global Unique的Program
  • PUID由OID和UPI构成,OID确定一个全球唯一的组织,UPI确定组织内唯一的Program
  • PUID需要通过NVMe的申请流程

1.7 Downloadable/Device-defined Programs

  • Compute ns可以支持Downloadable 或者 Device-defined程序
  • Downloadable是通过一系列命令来支持
    • Program Activate(activate/deactivate)
    • Load Program(download/unload) download的行为和fw-download类似
      • Load Program的第一个命令必须提供以下信息
        • PIT 是否使用PID
        • PTYPE
        • PIND index类似于fw-slot
        • PID PUID(基于PIT)
        • PSIZE 需要下载代码片段总大小
        • LOFF 当前代码片段的off
        • NUMB 当前代码片段的size(dowrd)

1.8 Activating/Deactivating Programs

  • 程序执行前必须被activate激活
  • I/O Command set specific id-ns(CNS=0x5)里面的MAXACT值可以声明compute ns上可以同时激活的程序数量

2、Compute Program Command Set

2.1、I/O 命令部分

计算存储的I/O命令部分比较简单,只有1个

  • Execute Program 执行程序

2.2、Admin命令部分

Compute command set 专属的管理命令

  • Load Program:下载程序,可选支持
  • Program Activation Management 激活程序
  • Memory Range Set Management 给程序指定内存区域

为了支持I/O部分的功能,必须支持这些LogPage

  • Program List LID=0x82 计算ns中有多少program
  • Downloadable Program Type List LID=0x83 计算ns允许下载哪些类型的程序
  • Memory Range set List LID=0x84 计算ns目前设定过的MRS查询

为了支持I/O部分功能,必须支持的Identify

  • id-ns CNS05:支持的最大程序数量、MRS颗粒度 size等限制、下载程序颗粒度
  • id-ctrl CNS06:主要是声明协议版本

2.2.1 MRS management command

所有管理命令中,可能最重要的就是MRS管理命令,管理命令分为2个子命令

  • MRS Create:最多创建128个range,每个range的内容放在data buffer中,执行成功后返回1个RSID
  • MRS Delete

相关文章

网友评论

      本文标题:NVMe 计算存储2-Computational Program

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