NVM子系统架构 - ✅ 一、Command Capsule 与 Response Capsule 结构详解 (第32页)
NVME2.0协议解读 1 min read

NVM子系统架构 - ✅ 一、Command Capsule 与 Response Capsule 结构详解 (第32页)

Blog Author

你正在阅读 NVMe Base Specification 2.0b 第 2.2 尾段与 2.3 起始 的内容,我们来系统整理分析本节关键信息,帮助你深入理解 Command Capsule / Response Capsule 格式、SGL 使用、身份验证机制,以及 NVM 存储模型的基础结构


✅ 一、Command Capsule 与 Response Capsule 结构详解


📦 1. Figure 9:Command Capsule 格式

┌────────────────────────────┐
│ Submission Queue Entry     │ ← 固定 64B,NVMe 命令本体
├────────────────────────────┤
│ SGL(s) 或 Data(如存在)   │ ← 可选字段(数据描述符或直接数据)
└────────────────────────────┘
        N Bytes 总长度
  • 命令(SQE):NVMe 通用的 64 字节结构(例如 Read、Write、Identify 等)
  • 可选段:
  • SGLs(描述 Host 侧数据的存储地址和长度)
  • 数据本体(若为小数据,可内嵌 capsule 内)

📨 2. Figure 10:Response Capsule 格式

┌────────────────────────────┐
│ Completion Queue Entry     │ ← 固定 16B,NVMe CQE 响应结构
├────────────────────────────┤
│ Data(如存在)             │ ← 可选,返回结果结构(如 Identify Data)
└────────────────────────────┘
        N Bytes 总长度
  • 完成项(CQE):固定 16B,包含状态码、Command ID、SQ ID 等
  • 可选数据:例如 Get Log Page 的响应数据块

✅ 二、SGL 用法限制与机制(在 NVMe-oF 中)

NVMe over Fabrics 下所有命令都必须使用 SGL(Scatter-Gather List)描述数据缓冲区。

🚫 不支持 PRP!

使用场景 PRP SGL
PCIe ✅ 支持 ✅ 可选
Fabrics ❌ 禁止 ✅ 强制使用

🧱 SGL 的两种用途:

类型 描述
Capsule 内 SGL 指明数据就在 Capsule 中(例如小型命令参数结构体)
Capsule 外 SGL 描述外部数据区域地址 + 长度(需通过 RDMA 或其他 NVMe Transport 机制传输)

📌 每种 NVMe Transport Binding(如 TCP、RDMA)都定义了自己的 SGL 类型和限制


✅ 三、身份验证机制(Authentication)

NVMe over Fabrics 提供两种认证方式,可单独或同时启用:


🧩 1. Fabric Secure Channel(传输层加密认证)

  • 示例协议:TLS(见 §8.13.1)
  • 特点:在建立连接前强制认证
  • 认证后 → 才允许发送 Connect 或 Admin/I/O 命令

🧩 2. NVMe In-band Authentication(协议内认证)

  • 认证过程通过 NVMe Fabrics 命令完成(如 AUTH_Send / AUTH_Receive)
  • 在 Connect 命令成功后执行
  • 认证完成前,仅允许发送认证命令,其它命令会被拒绝

🧾 谁告知你是否需要认证?

阶段 告知方 如何指示
Discovery 阶段 Discovery Controller 指示是否必须建立 Secure Channel
Connect 响应 控制器 指示是否需要 NVMe In-band Authentication

📘 安全控制细节请查阅 §8.13。


✅ 四、NVM 存储模型(开篇)

你刚进入的是 §2.3 NVM Storage Model 的开始部分,本节定义了 NVMe 存储系统的构成元素:


🔖 存储层级结构基础:

NVM Storage Model 包含以下关键实体

  1. NVM Subsystem:最顶层逻辑实体,一个完整的控制器集合,管理命名空间与端口
  2. Domain:域,一个或多个控制器共享资源的最小单位
  3. (后续将介绍)
  4. Endurance Group:寿命管理单元
  5. NVM Set:来自某 Endurance Group 的子集
  6. Namespace:格式化后的存储空间,供主机访问(通过 NSID)

✅ 结构总结图(前半部分)

[NVM Subsystem]

├── [Port 0..N]
│   └─ 面向 Fabric,暴露 NQN + Port ID

├── [Controller 0..N]
│   └─ Admin + I/O + Discovery 类型

└── [Domain 0..M]
    └─ 可包含多个 Namespace、共享一组控制器配置与状态

✅ 下一步推荐阅读章节

理由
§2.3(继续) 详细介绍 Domain、Namespace、Endurance Group 等分层
§3.2 NVM Subsystem 内部结构定义
§4.2 Capsule 结构 + SGL 格式图示
§5.3 Connect 命令结构 + AUTH 流程
§8.13 认证机制实现与事件流程说明

需要我接下来帮你:

  • 图解 Capsule 格式和传输过程?
  • 展示 SGL 描述结构和链式样例?
  • 演示 Connect + AUTH 完整流程图?

你可以指定一部分,我会为你详细讲解与图示。继续深入吗?😎