提交成功
返回列表

PBlaze5 520 系列 NVMe SSD——NVMe-MI

2020 / 08 / 07
1

这段故事源于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

 

 

参考链接:

https://www.dmtf.org/standards/pmci

https://www.iol.unh.edu/registry/nvme-mi

https://nvmexpress.org/specifications/

http://www.ssdformfactor.org/docs/SSD_Form_Factor_Version1_a.pdf