PBlaze5 520 系列 NVMe SSD——NVMe-MI接口的带外管理

Memblaze 今天

在上周最新发布的 PBlaze5 520 低功耗系列 NVMe SSD中,有一个全新功能——NVMe-MI接口的带外管理,这是从PBlaze5 520系列最新增加的功能,那么这个带外管理指的是什么,又怎么实现呢?


关于NVMe-MI接口的带外管理,这段故事源于 PCIe 产品的两个引脚 SMClk 和 SMDat,实现规范是 SMbus。


图示1来源于《Enterprise SSD Form Factor Version1_a》里面SFF8639 的引脚说明


图中左下角标注的颜色指示这对引脚是 optional 的,可以实现也可以不实现,但是对于企业级的产品这是有必要实现的(The Enterprise PCIe SSD should support SM-Bus operation)。


依据《Enterprise SSD Form Factor Version1_a》 (SFF Spec),SMbus 提供了两个层面的功能,一种初级功能是对盘内 vpd 的读写,这个功能在 3.3Vaux 或主电源存在的时都可用。对于企业仓库管理,如果主板带电但是主机未开机,管理人员可以远程通过BMC检查盘的静态信息,如 SN、MN、电源需求等;另一种高级功能是基于 MCTP-over-SMbus 协议之上的管理功能,(此 spec 未做更多解释),此功能在主电源存在时可用。


Server 的 BMC 系统可以通过 SMBus/I2C 与 NVMe SSD 通信


依据另一份规范《NVM Express Management Interface 1_0a》(NVMe MI),利用 SMbus 可以来处理基础的管理命令(主要的一项就是对于 Subsystem Management Data Structure 的监控),还可以处理基于 MCTP 的相关请求。


可以看出两套协议都对 MCTP 有所涉及,那基于 MCTP到底能做什么呢?


按照 NVMe MI,它可以提供如下指令集合:

NVM Express Admin Command Set

▪ Management Interface Command set

PCIe Command Set (optional)

NVM Express Management Enhancements


具体到每个命令集合里面又分为了 mandatory 和 optional 部分,举个例子,对于 NVM Express Admin Command Set,mandatory 的命令包括 Get Feature、Get Log Page、Identify,optional 的命令包括 firmware activate、firmware image download、Format NVM、Namespace Management、Namespace Attachment、Security Send、Security Receive、Set Feature 还有 Vendor Specific 部分。


利用这些 admin 命令,管理者就可以远程获取 NVMe 设备的信息、配置参数或者利用 Vendor Specific 部分实现特定功能的监控。比如主机开机的情况下,无需登录主机就可以升级固件, 再配合 Activate firmware without reset 就可以支持远程升级了。实现了这部分接口,可以做的事情还有很多,不过需要注意到很多 optional 命令有一些潜在的安全风险,实现起来可能需要配合一些措施保证数据的安全性,毕竟数据领域安全第一。


从企业 IT 系统运维的角度讲,带外管理提供了一套独立于主机系统的管理方案,能够配合服务器 BMC 系统,高效实现 NVMe 设备监控、管理及升级等工作。


看起来实现这些功能是有必要的,那需要怎么实现呢?

图示2来自《NVM Express Management Interface 1_0a》


上图中可以看出 NVMe MI 协议是可以基于 SMBus/I2C 或者 PCIe VDM 来实现的。


从左侧的 SMBus/I2C 这边路径来说,固件要实现 DSP0237  MCTP over SMBus/I2C Binding、DSP0236 MCTP Base Specification 和前面说到的 NVMe MI  1.0a(或者最新版NVMe MI 1.1)。基于 PCIe VDM 这部分的实现略微有点复杂,不在此介绍。


结合上面两个原理图,我们模拟了一个 BMC 系统向一块 Memblaze 某系列 NVMe SSD 发了一条获取 NVMe-MI 数据结构的命令。我们节选了部分结果,首先是 BMC 和 SSD 之间传输的数据,如下图。



整个过程有发数据和接收数据两个阶段,两者都可以根据协议解析出来。下面就是命令返回数据的解析:



上图可以看到返回数据又包含 NVMe-MI 的 Header 信息和 NVMe-MI Data Structure 信息(这部分是我们想要的返回结果)。


到这我们就从物理引脚、系统构成、技术原理及命令结果几个角度解读了 NVMe-MI 相关知识。那如果开发完相关功能怎么测试呢?


可以考虑三种方式:第一种是采购业内的 SSD 测试模组外包测试;第二种是跟 Server 厂商关系牢靠,Server 厂商提供 BMC 的接口或者设备联合测试;第三种是自研相关的硬件设备并设计测试用例来验证。总体而言测试需要考虑上面的 DSP0237、DSP0236、NVMe MI 三种规范来验证,最后放一张 NVMe-MI 兼容性测试大纲。


图示3来自UNH-IOL_NVMe-MI_Conformance_Test_Suite_v12.0



(本文作者:Memblaze-测试开发部经理任玉峰)