第4章 消息服务模型与控制原语 - 页码68
NVMe-MI 1 min read

第4章 消息服务模型与控制原语 - 页码68

Blog Author

我们继续深入分析 NVMe-MI 2.0 规范第 69 页内容,这页包含三个关键部分:

  1. Figure 51:将 NVMe-MI 响应消息映射到 NVMe Completion Queue Entry (CQE) 的表格
  2. Figure 52:解释 CQE 的 Dword 0 中具体 bit 字段的结构和含义
  3. NVMe-MI Send 命令的服务模型介绍(开始于第 53 阶段)

✅ 一、Figure 51:响应消息字段映射到 CQE(表格形式)

这是对上一页 Figure 50 图解的文字补充,以更明确说明每个 NVMe-MI 响应字段与 CQE 字段的对应关系。


🔹 字段映射总览

NVMe-MI 响应字段 SQE 映射字段 说明
00 – MCTP Data (MCTPD) n/a MCTP 封装相关字段,带内机制中不使用
01 – NVMe-MI Message Parameters (NMP) n/a 带内机制不需要,字段被省略
02–03 – Reserved n/a 无对应字段
04 – Status (STATUS) CQE DW0 Byte 0 映射到 Tunneled Status (TSTAT) 字段
05–07 – NVMe Management Response (NMRESP) CQE DW0 Bytes 1–3 映射到 Tunneled NVMe Management Response (TNMRESP)
08–N – Response Data n/a 不作为 CQE 的一部分,存于数据缓冲区(Data Buffer)中
MIC n/a 带内机制不使用 MIC

✅ 二、Figure 52:CQE Dword 0 字段定义(NSCQED0)

这个字段位于 CQE 的 DW0(前 32 位) 中,封装了两个重要字段:

Bits 字段名 描述
31:08 TNMRESP (Tunneled NVMe Management Response) NVMe-MI 命令的响应数据(如结构体 ID、版本等)
07:00 TSTAT (Tunneled Status) NVMe-MI 命令处理状态码(如 Success、Invalid Parameter)

📌 如果 NVMe Context 中出现错误(如 CDW0~9 格式错误),则: - TSTAT 与 TNMRESP 都被置为 0h - NVMe CQE 中的通用状态码会返回错误(例如 Invalid Field)


🧠 理解重点:

CQE 字段 说明
Status Code (SC) 返回通用 NVMe 状态,如命令解析错误、字段无效等
DW0 的 TSTAT/TNMRESP 承载来自 NVMe-MI 的状态反馈和业务数据

也就是说,CQE 的 DW0 封装了隧道中原始 NVMe-MI 响应的核心信息,而普通的 CQE 状态字段用于标识 Admin Command 是否本身执行成功。


✅ 三、NVMe-MI Send 命令的服务模型简介(开始阶段)

本节为 Figure 53 服务模型流程图的文字说明部分


🎯 服务模型阶段 1:NVMe 层处理(NVMe Context)

  • 检查命令 Dword0 ~ Dword9(CDW0~CDW9)
  • 如果存在错误(字段无效、不支持的命令等):
  • NVMe-MI Send 命令失败
  • CQE.Status 返回错误状态码
  • CQE.DW0 的 TNMRESP 与 TSTAT 全部清零

📌 常见检查内容包括:

字段 检查内容
CDW0 Opcode 合法性(必须为 NVMe-MI Send)
NSID 应为 0
DPTR 指针合法性及对齐
CID、SQID、QSIZE NVMe 规范中定义的标准 Admin 命令参数

🧩 若 CDW0–CDW9 无错误 → 进入 Phase 2

  • 检查 CDW10~15(也就是 NVMe-MI Request Message 的主体部分)
  • 若没有携带数据(Request Data),那么 CDW10~15 就是完整命令
  • 错误示例:无效 Opcode、字段超界等
  • 若有错误,同样返回 NVMe 错误状态,且 TNMRESP/TSTAT 清零

📌 小结:CQE 响应字段与状态传递机制

响应结果 CQE 中表现 NVMe-MI 结果 说明
NVMe-MI 成功 CQE.Status = Success
CQE.DW0.TSTAT = 00h
CQE.DW0.TNMRESP = 响应内容
正常完成
NVMe-MI 失败 CQE.Status = Success
CQE.DW0.TSTAT ≠ 00h
(如参数错误)
逻辑失败 管理控制器仍能读取响应内容
NVMe 层失败 CQE.Status ≠ Success
CQE.DW0 全部为 0
协议结构错误 主控无法获得 NVMe-MI 结果

✅ 下一步建议

下一页将进入 Figure 53:NVMe-MI Send Command Servicing Model 流程图,详细展示从 NVMe 处理到 NVMe-MI 指令执行的完整链路。

是否继续解析这部分?或者你希望我为整个 Send + CQE 响应模型绘制一个完整的数据流图帮助记忆?