NVME-MI 学习记录_1 框架
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 框架相关推荐
- Java学习记录_1:MOOC《零基础学Java语言》课后习题解
Hey,我是寒水,一名大二学生,电子商务专业在读,正在学习Java中.我试图将在Java学习中遇到的一些困惑和最终的解答发在这个账号上,希望以此来激励我不要放弃学习! 在学习记录这个专题中,我收藏一些 ...
- 微信小程序学习记录——4.框架-视图层
文章目录 1.WXML 数据绑定 简单绑定 运算 组合 列表渲染 wx:for block wx:for wx:key 条件渲染 wx:if block wx:if wx:if vs hidden 模 ...
- 微信小程序学习记录——3.框架-逻辑层
文章目录 1.逻辑层简介 2.注册程序 App() onLaunch,onShow参数 getApp() 3.场景值 4.注册页面 Page() 生命周期 生命周期中的函数 初始化数据 页面相关事件处 ...
- Latex学习记录2
文章目录 Latex学习记录2 框架 命令和环境 公式 列表 代码 算法 表格 画图 浮动 目录 BIB texdoc 参考 Latex学习记录2 框架 \include \input 自己写的文件 ...
- SSM框架入门学习记录
SSM框架入门学习记录 //项目结构 在这里插入图片描述 在这里插入图片描述 包名多种多样,命名习惯问题. 流程:Controller(接受请求)-->Service(biz)(bl)(写业务函 ...
- scrapy框架菜鸟学习记录
scrapy框架菜鸟学习记录 scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架.其可以应用在数据挖掘,信息处理或储存历史数据等一系列的程序中.其最初是为了页面抓取(更确切的说,网络抓 ...
- Spring学习记录
Spring相关 目录 文章目录 Spring相关 目录 前言 工厂设计模式 静态工厂模式 通用工厂模式 ApplicationContext ClassPathXmlApplicationConte ...
- 【超简短的独立游戏开发教学】学习记录
[超简短的独立游戏开发教学]学习记录 一.游戏开发是什么 二.工欲善其事,必先利其器(工具) 三.关于编程 七.Unity常用组件 八.UI还能长什么样? 九.草履虫也能看得懂的乐理入门 十.为了讲故 ...
- ASP.NETCore学习记录(一)
ASP.NETCore学习记录(一) asp.net core介绍 Startup.cs ConfigureServices Configure 0. ASP.NETCore 介绍 ASP.N ...
最新文章
- hdu3549(又是最大流模板题)
- Linux读写缓存Page Cache
- (62)Verilog HDL模块例化system Verilog模块
- 《写给程序员的数据挖掘实践指南》——5.2. 10折交叉验证的例子
- 小学生应该学习编程语言
- 零基础学python-2.17 文件、open()、file()
- Springboot 整合 RabbitMQ「三种模式使用」
- PID控制KP.KI.KD用法
- Simulink中scope变为白色背景
- matlab模拟硅中的点缺陷,硅中的杂质和缺陷.pdf
- iOS系统逆向工程之神探侯佩智破量子矩阵
- 高新科技企业税收优惠有多少
- 休眠(Hibernate)和睡眠(Sleep)的区别
- 汇编跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
- smm mysql自增_SMM框架详解
- 信息系统项目管理-项目采购管理-十二
- 利用fsolve函数求解Stewart平台运动学正解
- 用Altium Designer,AD不专业-EDA工具的选择-PCB系列教程1-2
- linux alsa-lib 播放pcm文件
- CentOS Cpu性能优化
热门文章
- FPGA驱动RGB灯带WS2812B
- 山东畜牧兽医职业学院计算机考试,山东畜牧兽医职业学院计算机自编word15套试题11Word模拟试题(1-15)...
- 金链盟成员纷纷“自立山头”,中国联盟式区块链开源平台路在何方
- Sitecore学习总结(1)
- ​华为NTP配置命令
- 管理运筹学的一些知识点
- 建行与爱赏合作推出建行爱赏卡 刷卡消费“抢红包”
- python pdf与图片互转
- android应用和苹果,同一款软件,在安卓和苹果间差别原来这么大
- JZOJ3426. 封印一击