入门到放弃之 NVMe-MI --- 协议简介

2023-05-16

        在学习NVMe-MI协议之前,感觉协议是如此的枯燥,通过短时间的阅读Spec发现协议规范定义的精妙绝伦;协议中各种细节处理的相当到位,最有趣的是消息服务模型的状态机设计,希望大家一起在学习的过程中,碰撞出火花。

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传输绑定规范中概述的那些之外,该规范不要求任何特定于物理层的错误处理需求。

NVME-MI其它章节协议解读:

NVMe-MI --- Message Transport(消息传输)_智小星的博客-CSDN博客

NVMe-MI --- Message Servicing Model(消息服务模型)_智小星的博客-CSDN博客

        

        

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

入门到放弃之 NVMe-MI --- 协议简介 的相关文章

  • extern "C" 含义

    extern 34 C 34 含义 extern 34 C 34 被 extern 限定的函数或变量是 extern 类型的 被 extern 34 C 34 修饰的变量和函数是按照 C 语言方式编译和链接的 extern 34 C 34
  • 77. Combinations

    Given two integers n and k return all possible combinations of k numbers out of 1 n For example If n 61 4 and k 61 2 a s
  • 基于STM32的串口通讯

    基于STM32的串口通讯 设备之间通信的方式 串行通信一般是以帧格式传输数据 xff0c 即一帧一帧的传输 xff0c 每一帧都含有起始信号 xff0c 数据信息以及停止信息等 并行通信 数据各个位同时传输 xff0c 速度快 xff0c
  • C语言的艺术之——头文件

    好记性不如烂笔头o o 系列的文章 xff1a C语言的艺术之 头文件 C语言的艺术之 函数 C语言的艺术之 标识符命令与定义 C语言的艺术之 变量 C语言的艺术之 注释 C语言的艺术之 排版与格式 C语言的艺术之 安全性 编码原则 xff
  • 图像高斯分布生成

    给定一些标记点的坐标 xff0c 希望生成其在图像中的高斯分布图 首先 xff0c 上公式 xff1a 不造怎么上公式 嗯稍后学习学习再补充 span class hljs keyword import span numpy span cl
  • 编译原理----词法分析设计

    程序设计实验1 词法分析 一 实验目的 xff1a 通过设计编制调试一个具体的词法分析程序 xff0c 加深对词法分析原理的理解 并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法 二 实验内容 编制一个单词获取程序
  • wwwwwwwwwwwwwwwwwww

    wwwwwwwwwwwwwwwwwwwww
  • C++成员变量的初始化

    类对象的构造顺序是这样的 xff1a 1 分配内存 xff0c 调用构造函数时 xff0c 隐式 xff0f 显示的初始化各数据成员 2 进入构造函数后在构造函数中执行一般计算 1 类里面的任何成员变量在定义时是不能初始化的 2 一般的数据
  • 【BUG解决】使用body-parser失效的实例解决

    前言 最近在使用express框架写Node代码 xff0c 遇到一个问题使用body parser模块失效 整整困在这里一天时间 xff01 xff01 xff01 res send req body 返回结果一直为空 但是代码的书写又看
  • BOCHS问题总结篇

    在官网上下载的bochs 2 4 5 win32版 bochs启动时会读bochsrc bxrc里的配置 xff0c 而bochsrc sample txt则是个sample xff0c 可以在这个sample里阅读相关参数的设置 1 RO
  • 关于Access的左连接

    这篇随笔没有什么深奥的技术要讨论 xff0c 只是自己一个知识上的盲点 xff1a 不知道在Access中如何进行左连接的操作 通过在网上搜索 xff0c 最后在CSDN上找到了自己要的答案 xff0c 因此觉得有必要记录下来 xff1a
  • ubuntu下安装Calibre

    Calibre是电子书管理软件 xff0c 支持Amazon Apple Bookeen Ectaco Endless Ideas Google HTC Hanlin Song设备及格式 xff0c 功能十分强大 ubuntu 有很多包都可
  • 编译Linux内核数

    本文是参考了网上多篇帖子而写的算不上什么原创 唯一值得欣慰的只不过在本机上实现罢了 因为毕竟失败了几次 也因为本人是初学驱动编程 很多简单的问题在我来说是相当的困难的 望有识之士不要笑话 最后 xff0c 希望本文能给刚学驱动而还没开头的人
  • 构造内核源码树

    编写驱动程序时 xff0c 需要内核源码树的支持 内核源码树时从内核源代码编译得到的 下面开始构造内核源代码的步骤 以Ubuntu为例子 1 下载内源代码 xff0c 位置www kernel org 注意 xff1a 源码树内核的版本要和
  • 裁剪图像中感兴趣区域python

    题外话 xff1a 比较全面的缩略图及相应源码 http matplotlib org gallery html http www cnblogs com wei li archive 2012 05 23 2506940 html 题外外
  • Linux设备驱动程序(LDD)中snull的编译问题

    对LDD中snull程序 xff0c 编译的时候会有许多问题 xff0c 鉴于网上还没有合适的解决办法 xff0c 做此总结 xff0c 整理知识 本文在debian6 0上运行通过 xff0c 内核版本为2 6 32 学习LDD中网络驱动
  • 认识(大端--小端)端模式

    span style color 000000 端模式 xff08 Endian xff09 的这个词出自Jonathan Swift书写的 格列佛游记 这本书根据将鸡蛋敲开的方法不同将所有的人分为两类 xff0c 从圆头开始将鸡蛋敲开的人
  • HOW TO install nam for ns2 on debian

    Debian is convinent to install software packages for the tool aptl Like many other packages we can use apt get install n
  • c++ #pragma once和 #ifndef 优缺点对比分析

    pragma once ifndef方式为了避免同一个头文件被包含 xff08 include xff09 多次 pragma once 声明 定义语句 ifndef SOMEFILE H define SOMEFILE H 声明 定义语句
  • roslaunch找不到packge

    roslaunch找不到packge 尝试下面几种做法 1 source bashrc 2 source catkin ws devel setup bash 3 rospack profile 为确保ROS能找到新包 xff0c 常常在发

随机推荐

  • DSP:TMS320C6657 之 UART波特率问题

    6657 设置串口波特率 以614400为例 xff08 1 xff09 根据公式计算分频系数 xff08 2 xff09 1GHz 主频下 UART 输入频率 166666666Hz xff08 1 6 xff09 xff08 3 xff
  • 手写httpServer Demo案例

    相信每一个java程序猿在学习javaWeb的时候 xff0c 或多或少接触了Servlet 或者说通过Servlet来完成页面发送的请求 今天 xff0c 模仿Servlet接受和处理请求实现一个简单的httpServer 该Server
  • ubuntu18.04 查看在用串口

    1 终端输入cutecom 打开串口助手 xff0c 可能没有下载 xff0c 可根据提示下载安装 sudo cutecom 2 点击device旁边的下拉按钮即可查询当前在用的串口
  • Linux解决未定义的引用过程记录

    Linux解决未定义的引用过程记录 在摸索vscode使用的过程中 xff0c 编写的代码出现了为定义的引用错误 csdn上搜索了很多 xff0c 代码小白看完觉得写的非常的简略 xff0c 完全无从下手 xff08 应该是我太菜了 xff
  • 十一种室内定位传感器方案汇总介绍与对比(机器人、物联网领域)

    室内定位传感器方案汇总 目录 室内定位传感器方案汇总 1 定位方案概述 1 1 内定位系统有最基本的5种算法 xff1a 1 2 常用的室内定位技术主要包括以下几种 xff1a 1 3 定位理论 1 4 不同的定位方案对比 2 各种定位方案
  • C++中的unique函数

    STL中的unique函数的头文件 xff1a span class hljs preprocessor include lt iostream gt span unique 的作用是 去掉 容器中相邻元素的重复元素 xff0c 这里所说的
  • 单片机开发入门---从零开始玩转FRDM-KL25Z

    一 背景介绍 最近需要开发一个程序 xff0c 使用飞思卡尔的开发板FRDM KL25Z xff0c 来设计一款 西蒙游戏 的改进版 xff0c 下面我们先来了解一下西蒙游戏 西蒙游戏 是一款益智休闲类小游戏 xff0c 它的游戏规则是 x
  • SSD---系统架构

    SSD主要由两大模块构成 主控和闪存介质 另外可选的还有Cache缓存单元 主控是SSD的大脑 xff0c 承担着指挥 运算和协调的作用 xff0c 具体表现在 xff1a 前端实现标准主机接口与主机通信 xff0c 接口包括SATA SA
  • SSD核心技术---FTL

    FTL算法的优劣与否 xff0c 直接决定了SSD在性能 xff08 Performance xff09 可靠性 xff08 Reliability xff09 耐用性 xff08 Endurance xff09 等方面的好坏 xff0c
  • SSD---PCIe介绍

    SSD已经大跨步迈入PCIe时代 作为SSD的一项重要技术 xff0c 我们有必要对PCIe有个基本的了解
  • SSD---NVMe介绍

    何为NVMe xff1f NVMe即Non Volatile Memory Express xff0c 是非易失性存储器标准 xff0c 是跑在PCIe接口上的协议标准 NVMe的设计之初就有充分利用了PCIe SSD的低延时以及并行性 x
  • SSD---ECC原理

    我们知道 xff0c 所有型号的闪存都无法保证存储的数据会永久稳定 xff0c 这时候就需要ECC xff08 纠错码 xff09 去给闪存纠错 ECC能力的强弱直接影响到SSD的使用寿命和可靠性 本章将简单介绍ECC的基本原理和目前最主流
  • 音响发烧友---HiFi音频功放

    最近一直想做个开源的电子项目 xff0c 思考许久还是选择做个HiFi音频功放 作为一个音响发烧友 xff0c 带大家DIY一台属于自己的功放 聆听一下 xff0c 纯正的音乐之美 首选需要了解一下功放的类型 xff1a 纯甲类功率放大器乙
  • Altium Designer20常用使用快捷键

    一 AD20常用快捷键 PCB布线常使用 xff1a ctrl 43 m 测量长度 Q 单位切换 shift 43 ctrl 43 r 取消显示标注 shift 43 S 显示层切换 ctrl 43 右击 高亮显示一条线 ctrl 43 D
  • Altium Designer20 交叉选择模式

    在使用Altium Designer进行PCB布局时 xff0c 首先我们需要将原理图元器件更新到PCB中 xff0c 所有的元件封装都会汇集到PCB中 xff0c 但并没有根据电路模块进行分类聚集 xff1b 我们可以使用AD的交叉选择模
  • Altium Designer20 批量修改元件丝印大小和位置

    在进行PCB布线时 xff0c 我们经常需要调整元件丝印的大小和位置 有了丝印才能在PCB焊接和调试板子的时候得心应手 xff0c 下面介绍一种便捷的方法 xff0c 来实现批量修改元件丝印和位置 1 修改元件丝印大小 xff08 1 xf
  • 图像重叠区域

    http www cnblogs com dwdxdy archive 2013 08 02 3232331 html
  • bat批处理---实现输入指定拷贝文件

    在windows平台下 xff0c 平常的给芯片下载程序过程中 xff0c 经常遇到需要在多个文件夹下面拷贝bin文件的情况 xff0c 为了实现能够通过输入参数 xff0c 来选择需要拷贝的问下 xff0c 写了一个 bat批处理文件 只
  • Altium Designer20 PCB规则设置

    我们在进行PCB布线之前 xff0c 需要对PCB布线进行规则设置 xff0c 如果大家只是DIY爱好者 xff0c 那我们将设置价格最经济的PCB规则 xff0c 我们可以以捷配官网的PCB工艺信息作为参考 xff1b 下面我将介绍常用的
  • 入门到放弃之 NVMe-MI --- 协议简介

    在学习NVMe MI协议之前 xff0c 感觉协议是如此的枯燥 xff0c 通过短时间的阅读Spec发现协议规范定义的精妙绝伦 xff1b 协议中各种细节处理的相当到位 xff0c 最有趣的是消息服务模型的状态机设计 xff0c 希望大家一