栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

NVMe-MI协议解读

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

NVMe-MI协议解读

1. NVMe-MI介绍 1.1 概述

        NVME-MI接口是一个寄存器级接口,它允许带内主机软件与NVM子系统通信。该规范建立在NVM Express规范的基础上。

        NVME-MI规范定义了用于NVMe存储设备带外和带内管理的架构和命令集,以及用于监控和控制NVMe Enclosure元件的架构和机制。

定义了NVMe存储设备的以下关键功能:

  • 发现存在的NVMe存储设备并了解每个NVMe存储设备的能力;
  • 存储关于主机环境的数据,便于管理控制器或其他实体后面查询数据;
  • 健康和温度监测;
  • 多个并发命令,防止长延时命令阻塞监控操作;
  • 带外机制是主机处理器和操作系统无关的;
  • VPD的标准格式和读写VPD内容的定义机制;
  • 保持data-at-reset的安全性。
1.2 管理组件传输协议

        带外机制利用管理组件传输协议(MCTP)作为传输层,并利用现有的MCTP SMBus/I2C和PCIe绑定作为物理层。命令消息被提交到与包含在NVM子系统中的管理端点相关联的两个命令槽中的一个。图1显示了NVMe-MI带外协议层。

1.3 FRU信息设备

        Field-Replaceable Unit(FRU),协议定义了一种通过IPMI平台管理FRU信息存储定义的SMBus/I2C或通过VPD Read 和 VPD Write命令访问FRU信息设备的机制。存储在FRU信息设备中的数据被称为VPD关键产品数据。FRU信息设备可以以多种方式实现(例如,串行EEPROM、NVMe控制器专用集成电路中的一次性可编程存储器等)。

1.4 NVM子系统架构模型

        本规范定义了一个接口,该接口可用于管理包含在NVMe存储设备或NVMe框中的NVM子系统。

        带内隧道机制和带外隧道机制对NVM子系统的管理,包括发送命令消息和接收相应的响应消息。命令消息由标准的NVMe管理命令组成,目标是NVM子系统中的控制器;提供对NVM子系统中控制器的PCI Express配置,I/O和内存空间的访问的命令;和Management接口相关的命令,用于查询、配置和监控NVM子系统。

        NVM子系统中的PCIe端口和SMBus/I2C端口可以任意包含单个NVMe管理端点。管理端点是MCTP端点,它是MCTP报文/消息的终端和起源,负责实现MCTP基本协议、处理MCTP控制消息和命令消息的内部路由。

        每个管理端点都有其独特的功能。所有管理端点可能支持相同的命令,即使PCIe端口是全双工的,数据速率比SMBus高得多,SMBus/I2C和PCIe VDM都能够提供相同的功能。

 

1.5 NVM子系统架构模型

        如果一个NVMe存储设备包含多个NVM子系统,那么与每个NVM子系统相关联的FRU信息设备是可选的,因为通过上游连接器访问所需的FRU信息设备描述了整个NVMe存储设备。

        下图4说明了一个NVMe存储设备,它是一个单端口PCIe SSD,带有由NVM子系统实现的FRU信息设备。图5展示了一个NVMe存储设备,它是一个双端口PCIe SSD,带有SMBus/I2C端口和一个通过串口EEPROM实现的FRU信息设备。

 1.6 NVMe Enclosure架构模型

        NVMe Enclosure是一个平台、卡、模块、盒子、机架或一组盒子,可以为一个或多个NVM子系统提供电源、冷却和机械保护。这些NVM子系统可能是NVMe Enclosure本身的一部分或可能包含在NVMe存储设备FRU中,这些FRU通过一个或多个NVMe Enclosure插槽连接到NVMe Enclosure。一个NVMe Enclosure包含一个或多个NVM子系统。作为NVMe Enclosure一部分的NVM子系统可能只支持带内隧道机制,也可能只支持带外隧道机制,或者两者都支持。

        当NVMe Enclosure继续正常工作时,组成NVMe Enclosure的一些元件可能是可拆卸和可更换的。

        SCSI Enclosure Services -3(SES-3)是由美国国家标准协会T10委员会开发的用于管理SCSI架构的Enclosure的标准。虽然NVMe和SCSI架构不同,但NVMe Enclosure和SCSI Enclosure的元件是相似的,管理所需的能力也是类似的。因此,该规范利用SES进行框管理。本规范仅支持SES中定义的独立框服务流程模型。

        请求者通过管理接口命令集中的SES Send和SES Receive命令来管理NVMe Enclosure。SES Send命令提供SES-3 SCSI Send DIAGNOSTIC命令的功能,请求者通过发送SES控制类型诊断页面来修改NVMe Enclosure的状态。SES Receive命令提供SES-3 SCSI Send DIAGNOSTIC RESULTS命令的功能,请求者使用该命令检索SES状态类型诊断页面,其中包含NVMe Enclosure提供的各种状态和警告信息。

        图8展示了一个包含一个NVM子系统的NVMe Enclosure示例。这个NVMe Enclosure有多个端口,请求者可以使用这些端口与NVMe Enclosure进行通信。它也有多个槽位,用于连接NVMe存储设备到NVMe框(例如,PCIe)。

1.7 术语定义
术语中文含义
Carrie载体一种NVMe存储设备FRU,具有一个或多个扩展连接器和0个或多个NVM子系统。
Command Message命令消息一种包含NVMe管理命令、PCIe命令或NVMe-MI命令的请求消息类型。
Command Slot命令槽管理端点中的一个逻辑目标,管理控制器在其中发送请求消息。每个管理端点都有两个命令槽。
Conrol Primitive控制原语从管理控制器发送到管理端点的单包请求消息,以影响以前发出的命令消息的服务或获取命令槽位和管理端点的状态。控制原语只适用于带外机制和禁止在带内的隧道机制。
NVMe-MI与NVM子系统中每个NVMe控制器相关联的接口,负责代表管理端点执行管理操作。
Enclosure Management附件管理对构成NVMe附件的元件的搜索、监控和控制
Enclosure Services Process附件服务流程为支持Enclosure Management的NVMe Enclosure提供Enclosure服务的进程。
Field-Replaceable Unit(FRU)现场更换单元一个系统中的一个物理部件、设备或组件,它可以被移除或替换,而不必替换包含它的整个系统。
FRU Information DeviceFRU信息设备用于保存VPD的逻辑或物理设备。FRU信息器件可以以多种方式实现(例如,EEPROM或一次性可编程存储器等)。
In-Band带内根据管理组件传输协议(MCTP)概述白皮书,带内管理是在对操作系统至关重要并由操作系统使用的硬件组件支持下运行的管理。该规范定义的带内通信路径是通过NVMe管理队列,使用NVMe-MI发送和NVMe-MI接收命令从主机软件到NVMe控制器。
Out-of-Band带外根据管理组件传输协议(MCTP)概述白皮书,带外管理是对独立于操作系统控制的硬件资源和组件进行操作的管理。该规范支持的带外通信路径是通过SMBus/I2C上的MCTP或PCIe VDM上的MCTP从管理控制器到管理端点。此外还有通过SMBus/I2C从管理控制器访问FRU信息设备。
2. 物理层介绍

        本节介绍规范支持的NVMe存储设备或NVMe Enclosures的物理层。

2.1 PCI Express

        在本规范的带外机制和带内隧道机制中,PCI Express被作为物理层。

        对于带外机制,NVMe存储设备或NVMe Enclosure中的PCIe端口可能实现管理端点。如果PCIe端口实现了管理端点,则该PCIe端口应支持MCTP over PCIe Vendor Defined Messages(VDM),MCTP PCIe VDM传输绑定规范指定的MCTP over PCIe Vendor Defined Messages。

        对于带内隧道机制,主机软件通过PCI Express向NVMe管理队列发出NVMe管理命令(NVMe-MI Send 和 NVMe-MI Receive)。关于NVMe-MI发送和NVMe-MI接收命令的详细信息,请参考NVM Express规范和该规范的4.3节。

2.2 SMBus/I2C

        NVMe存储设备或NVMe Enclosure实现SMBus/I2C接口时的要求。SMBus/I2C物理层仅适用于带外机制。

        如果一个NVMe存储设备或NVMe Enclosure实现了一个NVM子系统,管理端点与SMBus/I2C端口相关联,那么该端口应遵循管理组件传输协议(MCTP)SMBus/I2C传输绑定规范。

        NVM子系统也可以支持NVMe基本管理命令来运行状况和状态轮询。

        NVMe存储设备或NVMe Enclosure支持的SMBus/I2C组件如图15所示。对于每个SMBus/I2C单元,都提供了默认的SMBus/I2C地址,以及NVMe存储设备或NVMe Enclosure需要SMBus/I2C单元的条件。NVMe存储设备上是否存在扩展连接器决定了FRU信息设备使用两个互斥SMBus/I2C地址中的哪一个。运营商和非运营商NVMe存储设备上的FRU信息设备使用不同的SMBus/I2C地址可以避免当扩展连机器填充NVMe存储设备时SMBus/I2C地址冲突。

        SMBus/I2C元件上的ARP支持是可选的,除非NVMe存储设备或NVMe Enclosure中有多个SMBus/I2C元件,且相同的默认SMBus/I2C地址存在于同一个SMBus/I2C通道上。

         当一个或多个管理端点一起使用主机平台应该隔离SMBus/I2C通道,以避免管理端点与另一个SMBus/I2C元件的地址冲突。当不支持ARP的管理端点被使用在不隔离SMBus/I2C通道的平台上时,可能会发生SMBus/I2C地址冲突。当管理控制器和NVMe存储设备或NVMe Enclosure同时支持时,ARP可以用来动态地重新分配系统中的SMBus/I2C地址。

        支持ARP的SMBus/I2C元件应实现为SMBus规范定义的默认从地址(DSA)设备。这些设备不应该发出”通知ARP主控“命令。

        如果ARP被一个NVM子系统支持,那么所有与该NVM子系统相关的SMBus/I2C元件将使用如图16所示的SMBus地址解析协议唯一设备标识符(UDID)。ARP UDID是唯一标识符。UDID厂商ID bits 30和 bits 31允许多达4个SMBus/I2C元件与同一个NVM子系统组合在一起。这组udid中唯一的区别是Vendor Specific ID是最重要的两位。这个可以被管理控制器用来关联SMBus/I2C管理端点与其相应的FRU信息设备。

        如果在一个SMBus ARP支持的NVMe存储设备或NVMe Enclosure中有多个NVM子系统,那么UDID的唯一NVM存储设备ID字段应为每个NVM子系统加1。如果上游连接器有SMBus/I2C端口,那么与该连接器相关联的FRU信息设备应该直接出现在与上游连机器相连的SMBus/I2C通道上。

      

2.3 错误处理

        按照相应的物理层规范和MCTP传输绑定规范的规定处理物理层错误。除了MCTP传输绑定规范中概述的那些之外,该规范不要求任何特定于物理层的错误处理需求。

3. 消息传输

        该规范定义了一个支持多种消息传输的接口。消息格式与带外机制和带内隧道机制相同。

3.1 NVMe-MI消息

        NVMe-MI消息在带外机制和带内隧道机制中都有使用。NVMe-MI消息的格式如图17和图18所示。

        在带外机制中,NVMe-MI消息由一个或多个MCTP包的有效负载组成。NVMe-MI消息的最大大小为4224Byte(即:4KB + 128Byte)。请参考MCTP绑定规范上的NVMe管理消息。长度大于4224Byte的NVMe-MI消息被认为是无效的。

        在带内隧道机制中,NVMe-MI消息不拆分为MCTP报文,且NVMe-MI消息的最大大小等于最大数据传输大小(MDTS),可以参考NVM Express规范。

3.1.1 NVMe-MI消息字段

        NVMe-MI消息的格式由:Message Header(1dword) + Message Data + Message Integrity Check(1dword)。如果完整性检查(IC)bit设置为“1”,则NVMe-MI消息以IC结束。

        消息头包含MCTP基本规范定义的消息类型(MT)字段和完整性检查(IC)位。消息类型字段指定消息体中包含的有效负载类型,在所有NVMe-MI消息中需要设置为4h(参考MCTP id和代码规范)。完整性检查(IC)字段表示NVMe-MI消息是否受消息完整性检查保护。

  • 带外机制中所有的NVMe-MI消息都有32位CRC保护,IC字段应该设置为“1”
  • 带内隧道机制中所有的NVMe-MI消息没有CRC保护,IC字段应该设置为“0”

        消息头中的(POR)位指定了NVMe-MI消息是请求消息还是响应消息。消息类型(NMIMT)字段指定消息是控制原语还是命令消息的特定类型。命令槽标识符(CSI)位指定了在带外机制中NVMe-MI消息与之关联的命令槽。

        消息头中的管理端点缓冲区(MEB)位指定消息数据是包含在NVMe-MI消息的相关消息数据字段中,还是包含在管理端点缓冲区中。这个位应该只在支持管理端点缓冲区操作的命令消息中设置。在任何其他命令消息中设置此位都是错误的,当发生此情况时,将响应无效参数命令消息。

3.2 带外消息传输

        本规范中定义的带外机制利用MCTP作为管理控制器和管理端点之间可靠的有序消息传输。

3.2.1 MCTP包

        在MCTP基本规范中,数据传输的最小单位是MCTP包。将一个或多个报文组合起来创建MCTP消息。在这个规范中,MCTP消息被称为NVMe-MI消息。一个数据包总是包含至少1Byte的有效载荷,但总长度不得超过协商的MCTP传输单元大小。MCTP数据包的格式如图20所示。

        MCTP规范使用大端字节排序,而NVM Express规范使用小端字节排序。本规范中所有图形都使用小端字节排序进行说明。注意:实际物理层上还是使用的大端排序。

        物理介质专用的报头、报尾由端口使用的MCTP传输绑定规范定义。

        管理组件传输协议(MCTP)基本规范定义了MCTP报头,MCTP包字段如图21所示。符合要求的管理端点应实现MCTP基本规范中定义的所有MCTP要求的特性。可能支持可选特性。 

 3.2.1.1 报文组装成消息

        一个NVMe-MI消息可以被分解成多个MCTP包载荷,并作为一系列包发送。图22显示了一个NVMe-MI消息示例,它的内容被分成四个MCTP包。请参阅MCTP基本规范了解封包和消息组装规则。

        NVMe-MI消息 = N个MCTP包(NVMe-MI MCTP Message)

 除了MCTP基本规范和传输绑定规范中概述的要求外,该规范还有以下附加要求:

  • 除消息中最后一个数据包外,给定消息中所有数据包的MCTP传输单元大小应与协商的MCTP传输单元大小相等;
  • 一个完整的NVMe-MI 消息组装完成后,就需要校验消息的完整性。如果校验通过,则处理NVMe-MI消息;如果校验失败,则丢弃NVMe-MI消息。
4. 消息服务模型 4.1 NVMe-MI 消息

        图23展示了NVMe-MI消息的分类。NVMe-MI消息的两个主要类别是请求消息和响应消息。当使用带外机制时,请求消息由管理控制器发送到管理端点。在使用带内隧道机制时,请求消息由主机软件发送到NVMe控制器。发送请求消息的实体统称为请求者,接收请求消息的实体统称为响应者。在接收到请求消息后,响应者处理请求消息。当处理完成时,响应者向请求者发送一个响应消息。

        请求消息可以分类为命令消息或控制原语。命令消息指定响应者要执行的操作,可以进一步分类为NVMe-MI命令、NVMe管理命令或PCIe命令。控制原语在带外机制中使用。

        响应消息可分为成功响应和错误响应。

4.1.1 请求消息

        请求消息是由请求者生成并发送给响应者的NVMe-MI消息。请求消息指定响应者要执行的操作。请求消息一共有两种类型:Command Message、Control Primitive。

        其中Command Message命令消息的消息体格式与命令集相关,由消息头中的NMIMT字段指定。NVMe-MI支持三种命令集:

  • 管理接口命令集:Management Interface Command Set,协议第5章;
  • NVM Express管理命令集:NVM Express Admin Command Set,协议第6章;
  • PCIe命令集:PCIe Command Set,协议第6章。
4.1.2 响应消息

        响应消息是当响应者完成先前发出的请求消息后,生成的NVMe-MI消息。

        响应消息的格式如图24和图25所示。第一个dword包含消息头Message Header。Status字段对响应消息关联的状态进行编码。接下来是Response Body,其格式跟NVMe-MI消息类型和特定的消息状态有关,最后如果完整性检查(IC)位设置为“1”,则响应消息以NVMe-MI消息完整性检查字段结束。

        在带外机制中,消息头中的CSI位指定了响应消息与之关联的请求消息的命令槽位。NVMe-MI消息类型(Msg Type)字段跟请求消息中相同字段的值保持一致。

        在带内隧道机制中,Message Header中的CSI位是保留的。

        响应消息Status状态表:

补充Response Msg Status

4.1.2.1 通用错误响应

        如果在响应消息状态Status之外,未提供其他信息的错误,将生成通用错误响应。Byte7:5被保留,通用错误响应的格式如图27所示。

 4.1.2.2 无效参数错误响应

        当Status字段设置为无效参数 Invalid Parameter(04h),无效参数响应格式如图28所示,响应特定字段汇总在图29中。

         该字段表示请求消息中包含的第一个无效参数的Byte位置和Bit位。

 4.2 带外消息服务模型

        本规范中的带外机制使用请求和响应服务模型。管理控制器向管理端点发送请求消息,管理端点处理请求消息,当处理完成时,将响应消息发送回管理控制器。在任何情况下,管理端点都不会生成未经请求的响应消息。

        与可能跨越多个MCTP数据包的其他NVMe-MI消息不同,包含控制原语的NVMe-MI消息应仅包含一个MCTP数据包。

        

 

        

        

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1041126.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号