NVMe-MI --- Message Transport(消息传输)

2023-05-16

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

NVMe-MI --- Message Transport(消息传输) 的相关文章

  • 检查消息类型时避免使用instanceof

    我遇到以下情况 客户端类根据它收到的消息类型执行不同的行为 我想知道是否有更好的方法来做到这一点 因为我不喜欢 instanceof 和 if 语句 我想做的一件事是将方法从客户端类中取出并将它们放入消息中 我会将类似 process 的方
  • 如何在odoo中弹出成功消息?

    我通过单击按钮发送邀请 在单击按钮并成功发送邀请后 会弹出邀请发送成功的消息 但问题是弹出消息的主标题是Odoo Server Error 那是因为我正在使用 raise osv except osv Success Invitation
  • Inno Setup - 更改 MessageBox 语言

    我有这个问题 我做了一个个人消息框 我以一种非常有趣的方式输入了英语和西班牙语 但我希望我的安装程序只显示一种语言 就像 当我在菜单选择器西班牙语 在该消息框中显示西班牙语 如果在菜单选择器中选择意大利语 让该消息框显示意大利语 code
  • 观察新的系统通知 OSX

    是否可以监听 观察 macOS 收到的新通知 我的意思是当收到新的 iMessage 或 Slack 消息时 所以基本上导致通知中心显示通知的所有内容 简短回答 这是不可能的 除非应用程序提供特定的 API 否则您无法观察应用程序发送的用户
  • Python 中的一维 Wasserstein 距离

    下面的公式是 Wasserstein 距离 最优传输的特例 当源和目标分布为x and y 也称为边际分布 是一维的 即向量 where F 1 是边际累积分布的逆概率分布函数u and v 源自称为x and y 均由正态分布生成 imp
  • pjsip接收短信

    任何人都知道有关如何设置 pjsip 客户端来接收消息的任何好例子 我可以使用以下方式从客户端发送消息 pjsua im send sip acc id to NULL msgbody NULL NULL 到任何数字 但我不知道如何才能将消
  • 没有提交消息的 Git 提交

    如何在不指定提交消息的情况下提交更改 为什么默认需要它 git 通常需要非空消息 因为提供有意义的提交消息是良好开发实践和良好存储库管理的一部分 提交消息的第一行在 git 中随处可见 欲了解更多信息 请阅读 关于 Git 提交消息的注释
  • 如何通过iOS模拟器发送邮件?

    我想知道是否可以通过 iPhone 模拟器发送电子邮件 我见过 通过iphone发送邮件的教程如下 http www edumobile org iphone iphone programming tutorials compose mai
  • MySQL:大型 VARCHAR 与 TEXT?

    我在 MySQL 中有一个消息表 用于记录用户之间的消息 除了典型的 ID 和消息类型 所有整数类型 之外 我还需要将实际消息文本保存为 VARCHAR 或 TEXT 我将前端限制设置为 3000 个字符 这意味着消息永远不会插入数据库中的
  • jQuery 验证插件中组的自定义错误消息

    我正在使用 jQuery 验证插件 并且我已经开始将一些字段分组在一起 groups fullName myFirstName myLastName 我还将这些字段添加到规则部分 以便对它们进行验证 rules myFirstName re
  • 无法重新分配$this?

    我的服务器上有一个 php 版本 4 的脚本 现在它已更改为 php5 并且该脚本不再起作用 我收到此错误 致命错误 无法在 URL database php 第 88 行中重新分配 this 该文件中有一个具有函数的类 里面是88行 th
  • 在 kohana v3 中显示“闪现消息”的最佳方式是什么?

    我想知道最好的展示方式闪讯在 Kohana v3 中 一些教程或示例会很有帮助 你的意思是像 Kohana 2 x 的 flash 会话变量吗 最新的 Kohana 支持get once https github com kohana co
  • 在无锁设置中是否可以实现多生产者、单消费者?

    我有一堆线程相互之间进行大量通信 我希望这是无锁的 对于每个线程 我希望有一个邮箱 其他线程可以在其中向其发送消息 但只有所有者可以删除消息 这是多生产者单消费者的情况 我可以在无锁 高性能的情况下做到这一点吗 这是一个巨大模拟的内循环 无
  • Magento:如何在管理面板中使用 JS 显示标准错误/成功消息?

    我可以从服务器端将错误 成功消息添加到 Magento 管理面板 例如 Mage getSingleton core session gt addError 但是如何使用 JS 在客户端显示相同的消息呢 我的意思是标准方式 当然我可以创建相
  • Erlang 进程和消息传递架构

    我手头的任务是读取大文件的行 处理它们 并返回有序结果 我的算法是 从评估工作负载的主进程开始 写在文件的第一行 生成工作进程 每个工作进程将使用 pread 3 读取文件的一部分 处理这部分 并将结果发送给 master master接收
  • 如何使用 python smtplib 向多个收件人发送电子邮件?

    经过大量搜索后 我无法找到如何使用 smtplib sendmail 发送给多个收件人 问题是每次发送邮件时 邮件标头都会显示包含多个地址 但实际上只有第一个收件人会收到电子邮件 问题似乎在于email Message http docs
  • 消息循环如何使用线程?

    我有点困惑 想知道我是否被误导了 在另一篇文章中 我被告知 只有当你显式创建新线程时才会创建它们 C 程序默认是单线程的 当我打开未在 ollydbg 中显式创建新线程的程序时 我多次注意到通常有 2 个线程在运行 我想了解消息循环如何在不
  • Elasticsearch TransportClient NetworkPlugin NoClassDefFoundError

    我期待将 Elasticsearch 集成到 Spring Boot Web 应用程序中 这是创建传输客户端的配置 Configuration public class ElasticsearchConfig private Transpo
  • 捕获由纯 C++ dll 中的 MFC 应用程序生成的 Windows 消息

    首先 这可能吗 我有一个与某些硬件接口的第三方 dll 它是用MFC编写的 我 从 dll 供应商处 收到了一个示例 Visual Studio 2010 解决方案 该解决方案只有一个项目 调用相关第三方 dll 的 MFC 应用程序 ex
  • 如何在 C# 中从工作线程发布 UI 消息

    我正在用 C 编写一个简单的 winforms 应用程序 我创建了一个工作线程 我希望主窗口响应线程完成其工作 只需更改文本字段中的一些文本 testField Text Ready 我尝试了事件和回调 但它们都在调用线程的上下文中执行 并

随机推荐

  • 手写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 希望大家一
  • NVMe-MI --- Message Transport(消息传输)

    3 消息传输 该规范定义了一个支持多种消息传输的接口 消息格式与带外机制和带内隧道机制相同 3 1 NVMe MI消息 NVMe MI消息在带外机制和带内隧道机制中都有使用 NVMe MI消息的格式如图17和图18所示 在带外机制中 xff