1.什么是NVME-MI?
nvme management interface(NVME-MI)定义了一套新的完整的NVMe SSD管理方式,并支持以oob带外管理方式,对NVMe设备进行一些基本的管理、设备监控及升级等工作,图1是Driver和带外管理的关系。

2.带内管理和带外管理
out-of-band与in-band,带内管理使用由操作系统控制的硬件资源和组件进行操作的管理,带外管理是使用独立于操作系统控制的资源。

图片中通道1:NVMe 驱动程序根据 NVMe 规范通过 PCIe 与 NVMe 控制器通信,通道2: 两种OOB通信方式, PCIe VDM和SMBus。
(1)带内管理
• 支持多种操作系统(Windows、Linux、VMWare 等)
• 每种操作系统有几种不同发行版
• 为每个操作系统开发、维护、验证管理应用程序的资源成本过高
• 随着时间的推移,会发布新版本的操作系统和 NVMe 驱动程序
• 持续消耗 CPU cycle
• 安全隐患
• 管理功能因操作系统而异
(2)带外管理
• 在一个操作环境中开发管理应用程序,在任何主机操作系统上都一样工作
• 可在没有操作系统的情况下工作(pre-boot, deployment)
• 不需要消耗主机 CPU cycle

3. 带外管理
NVM Express® Management Interface Revision 1.2定义了一种通过MCTP传输协议管理 NVMe 存储设备和 NVMe 机箱的带外机制 。它的协议分层如下图所示。

协议层包括对应每个management controller的NVMe-MI接口,该接口和nvme子系统的management endpoint相协调来执行管理任务;传输层包含MCTP协议,以及与各实体层之间的绑定(PCIe与SMBus/I2C);物理层则是信息传输层接收资料所需的输出输入口。相关的流量控制和异常处理 在MCTP上。
完整的MI命令交互过程:Host(Requester)发送消息为MI报文 -> 封装为MCTP报文 -> 通过I2C/pcie链路发给SSD(Responser) -> 解析为MI报文 -> 回复数据组成MI -> 封装为MCTP报文 -> 通过I2C/pcie链路发给Requester

(1) NVMe-MI Message Types

MI报文的交互过程中涉及到主机发送的 request message和 设备回复的 response message,又可以根据发送消息的作用将message近一步进行划分,如图。

command message
(i)nvme-mi command (定义了获取NVMe SSD设备状态命令)
(ii)nvme admin command (用MI协议规范模拟封装NVMe命令)
(iii)pcie command (用MI协议规范模拟封装PCIe报文)

control primitive (控制MI命令执行)

success response(成功返回MI消息,通常带数据返回,每个命令的返回都不一样,见具体命令)
error response(失败返回MI消息,无数据,只有错误类型)

request message的格式:
offset
03:00 : header
04 : opcode
07:05 : reserved
11:08 : nvme management dword0
15:12 : nvme management dword1
N-1:16 : request data(optional)
N+3:N : message integrity check(使用的是CRC-32C算法)
response message的格式:
offset
03:00 : header
04 : status (page46 figure26)
07:05 : nvme management response
N-1:08 : response data(optional)
N+3:N : message integrity check(使用的是CRC-32C算法)

(2)command message —— nvme-mi command

• Discover Capabilities
• Optimized Health Monitoring/polling
• Initialize & troubleshoot NVMe-MI
• Efficiently manage NVMe at the FRU level
• Sub-system level

(3)command message —— nvme admin command
request 格式:
03:00 : header
04 : opcode
05 : cmd flag
07:06 : controller IO
11:08 : SQ entry dword1
15:12 : SQ entry dword2
19:16 : SQ entry dword3
23:20 : SQ entry dword4
27:24 : SQ entry dword5
31:28 : data offset
35:32 : data length
43:36 : reserved
47:44 : SQ entry dword10
51:48 : SQ entry dword11
55:52 : SQ entry dword12
59:56 : SQ entry dword13
63:60 : SQ entry dword14
67:64 : SQ entry dword15
N-1:68 : request data(optional)
N+3:N : message integrity check
response 格式:
03:00 : header
04 : status
07:05 : reserved
11:08 :CQ entry Dword0
15:12 :CQ entry Dword1
19:16 :CQ entry Dword3
N-1:20 : response data(optional)
N+3:N : message integrity check

• NVMe-MI defines mechanism to send existing NVMe Admin Commands out-of-band
• Admin Commands target a controller in the NVM subsystem

(4)command message —— pcie command
request 格式:
03:00 : header
04 : opcode
05 : reserved
07:06 : controller IO
11:08 : pcie request dword0
15:12 : pcie request dword1
19:16 : pcie request dword2
N-1:20 : request data(optional)
N+3:N : message integrity check
response 格式:
03:00 : header
04 : status
07:05 : reserved
N-1:08 : response data(optional)
N+3:N : message integrity check

PCIe Commands provide optional functionality to read and modify PCIe memory

(5) control primitive
request 格式:
03:00 : header
04 : opcode
05 : Tag
07:06 : controller primitive specific parameter
11:08 : message integrity check
response 格式:
03:00 : header
04 : status
05 : Tag
11:08 : message integrity check


• Control Primitives enable a Management Controller to utilize flow control and to detect and recover from errors
• Control Primitives fit into a single packet and do not require message assembly

reference
NVM-Express-Management-Interface-1.2
NVMe-MI SDC India.pdf
https://blog.csdn.net/Fuji_Shikamaru/article/details/107287613
https://blog.csdn.net/weixin_44006670/article/details/120008678

NVME-MI 学习记录_1 框架相关推荐

  1. Java学习记录_1:MOOC《零基础学Java语言》课后习题解

    Hey,我是寒水,一名大二学生,电子商务专业在读,正在学习Java中.我试图将在Java学习中遇到的一些困惑和最终的解答发在这个账号上,希望以此来激励我不要放弃学习! 在学习记录这个专题中,我收藏一些 ...

  2. 微信小程序学习记录——4.框架-视图层

    文章目录 1.WXML 数据绑定 简单绑定 运算 组合 列表渲染 wx:for block wx:for wx:key 条件渲染 wx:if block wx:if wx:if vs hidden 模 ...

  3. 微信小程序学习记录——3.框架-逻辑层

    文章目录 1.逻辑层简介 2.注册程序 App() onLaunch,onShow参数 getApp() 3.场景值 4.注册页面 Page() 生命周期 生命周期中的函数 初始化数据 页面相关事件处 ...

  4. Latex学习记录2

    文章目录 Latex学习记录2 框架 命令和环境 公式 列表 代码 算法 表格 画图 浮动 目录 BIB texdoc 参考 Latex学习记录2 框架 \include \input 自己写的文件 ...

  5. SSM框架入门学习记录

    SSM框架入门学习记录 //项目结构 在这里插入图片描述 在这里插入图片描述 包名多种多样,命名习惯问题. 流程:Controller(接受请求)-->Service(biz)(bl)(写业务函 ...

  6. scrapy框架菜鸟学习记录

    scrapy框架菜鸟学习记录 scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架.其可以应用在数据挖掘,信息处理或储存历史数据等一系列的程序中.其最初是为了页面抓取(更确切的说,网络抓 ...

  7. Spring学习记录

    Spring相关 目录 文章目录 Spring相关 目录 前言 工厂设计模式 静态工厂模式 通用工厂模式 ApplicationContext ClassPathXmlApplicationConte ...

  8. 【超简短的独立游戏开发教学】学习记录

    [超简短的独立游戏开发教学]学习记录 一.游戏开发是什么 二.工欲善其事,必先利其器(工具) 三.关于编程 七.Unity常用组件 八.UI还能长什么样? 九.草履虫也能看得懂的乐理入门 十.为了讲故 ...

  9. ASP.NETCore学习记录(一)

    ASP.NETCore学习记录(一) asp.net core介绍  Startup.cs  ConfigureServices  Configure  0. ASP.NETCore 介绍 ASP.N ...

最新文章

  1. hdu3549(又是最大流模板题)
  2. Linux读写缓存Page Cache
  3. (62)Verilog HDL模块例化system Verilog模块
  4. 《写给程序员的数据挖掘实践指南》——5.2. 10折交叉验证的例子
  5. 小学生应该学习编程语言
  6. 零基础学python-2.17 文件、open()、file()
  7. Springboot 整合 RabbitMQ「三种模式使用」
  8. PID控制KP.KI.KD用法
  9. Simulink中scope变为白色背景
  10. matlab模拟硅中的点缺陷,硅中的杂质和缺陷.pdf
  11. iOS系统逆向工程之神探侯佩智破量子矩阵
  12. 高新科技企业税收优惠有多少
  13. 休眠(Hibernate)和睡眠(Sleep)的区别
  14. 汇编跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
  15. smm mysql自增_SMM框架详解
  16. 信息系统项目管理-项目采购管理-十二
  17. 利用fsolve函数求解Stewart平台运动学正解
  18. 用Altium Designer,AD不专业-EDA工具的选择-PCB系列教程1-2
  19. linux alsa-lib 播放pcm文件
  20. CentOS Cpu性能优化

热门文章

  1. FPGA驱动RGB灯带WS2812B
  2. 山东畜牧兽医职业学院计算机考试,山东畜牧兽医职业学院计算机自编word15套试题11Word模拟试题(1-15)...
  3. 金链盟成员纷纷“自立山头”,中国联盟式区块链开源平台路在何方
  4. Sitecore学习总结(1)
  5. ​华为NTP配置命令
  6. 管理运筹学的一些知识点
  7. 建行与爱赏合作推出建行爱赏卡 刷卡消费“抢红包”
  8. python pdf与图片互转
  9. android应用和苹果,同一款软件,在安卓和苹果间差别原来这么大
  10. JZOJ3426. 封印一击