NVM子系统架构 - ✅ 一、Command Capsule 与 Response Capsule 结构详解 (第32页)
你正在阅读 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 包含以下关键实体:
- NVM Subsystem:最顶层逻辑实体,一个完整的控制器集合,管理命名空间与端口
- Domain:域,一个或多个控制器共享资源的最小单位
- (后续将介绍)
- Endurance Group:寿命管理单元
- NVM Set:来自某 Endurance Group 的子集
- 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 完整流程图?
你可以指定一部分,我会为你详细讲解与图示。继续深入吗?😎