队列模型与管理机制 - 第97页
NVME2.0协议解读 1 min read

队列模型与管理机制 - 第97页

Blog Author

我们现在继续对 NVM Express® Base Specification, revision 2.0b 第 86 页 进行中文深入分析与教学讲解。本页重点内容包括两个核心部分:


📦 一、命令胶囊中的数据传输示例(二)——通过胶囊内部传输数据(Figure 85)

这一节展示了与第 85 页的 内存事务传输数据示例 对应的另一种方式:

将全部数据直接嵌入命令胶囊(In-Capsule)内部进行传输。


✳️ 示例描述:8KiB 数据通过命令胶囊内传输

✅ 使用结构:

  • SGL 类型SGL Data Block Descriptor(非 Keyed)
  • SGL Identifier01h(表示胶囊内数据块传输)
  • Offset20h,即数据从偏移地址 0x20(32 字节)开始
  • ICDOFF = 2hICDOFF × 16 = 0x20 → 数据从 SQE 末尾向后第 32 字节开始
  • 数据大小:8KiB

📘 胶囊结构图解:

命令胶囊内容(Command Capsule of Size N Bytes):


Byte Offset        内容
──────────────     ────────────────────────────────────────
0 ~ 63             Submission Queue Entry(含 SGL 描述符)
64 ~ 95            空间保留(ICDOFF = 2 → 32 字节)
96 ~ N-1           实际数据(Data Block A,大小 8KiB)

SGL 描述符指定:数据块 A 就在胶囊的 offset = 0x20(32字节)处开始,直接携带在命令中。


🧠 核心理解要点:

项目 内容
数据传输方式 使用胶囊内嵌方式(In-Capsule Transfer)
ICDOFF 作用 告知控制器:数据在胶囊中从何处开始(单位:16 字节)
Offset SGL 描述符中的偏移量与 ICDOFF 要匹配,否则出错
SGL Identifier 01h 表示胶囊内数据块传输
控制器处理逻辑 根据 ICDOFF 和 SGL Offset 定位胶囊中数据位置
错误条件 若 offset 设置错误,则返回 SGL Offset Invalid 错误码

🔌 二、消息传输模型中的队列创建机制(§3.3.2.2)

Message-based Transport Queue Model(如 NVMe-oF 中使用)中,使用 Connect 命令来创建队列,而不是使用 PCIe 模型中传统的 Admin 命令(如 Create I/O Queue)。


✅ 1. 创建机制

  • 使用 Connect 命令(详见 §6.3)
  • 可创建 Admin QueueI/O Queue
  • 不使用以下寄存器
  • ASQ: Admin Submission Queue Base Address
  • ACQ: Admin Completion Queue Base Address
  • AQA: Admin Queue Attributes

➡️ 这三项在 Message-based 模式下无效,因为所有必要信息都通过 Connect 命令直接提供


🧑‍💻 2. Connect 命令的作用

用于建立主机与控制器之间的逻辑连接,同时:

  • 指定队列类型(Admin 或 I/O)
  • 提供队列大小和属性
  • 包含主机与控制器的唯一标识信息
字段 描述
Queue ID 要创建的队列编号
Queue Type Admin 或 I/O
Queue Size SQ 与 CQ 的深度
Host NQN 主机唯一名称(NVMe Qualified Name)
Subsystem NQN 控制器所属 NVM Subsystem 的名称
Host Identifier 主机 ID,唯一标识主机设备

📢 注意事项:

  • Connect 命令只能对要创建的队列发送一次,不能重复。
  • Connect 命令本身 通过该队列所绑定的 Transport 连接发送(即:先建立底层连接 → 发送 Connect 命令)。
  • 若连接成功,返回胶囊中会指示是否需要进行带内认证(in-band authentication)

🧠 总结与关键点

项目 内容
胶囊内传输示例(Figure 85) 展示如何使用 SGL 描述符在命令胶囊中内嵌 8KiB 数据块
SGL Offset = 0x20 ICDOFF = 2h 对应,确保数据与描述符对齐
SGL Identifier = 01h 表示 SGL 类型为胶囊内传输
Connect 命令作用 创建消息传输队列(Admin 或 I/O),代替传统 PCIe 模型下的寄存器配置和命令
不使用 AQA/ASQ/ACQ 在 message-based 模式下被 Connect 命令完全替代
身份与认证机制 Connect 命令中可携带 Host NQN、Subsystem NQN、认证标志等关键字段

如果你想继续探索:

  • Connect 命令的具体结构与字段解析(Figure 375、§6.3)
  • ICDOFF 在 Identify Controller 中的具体字段位置与设置方法
  • SGL 描述符结构解析(§4.1.2)
  • NVMe over Fabrics 的连接流程和多通道设计(RDMA / TCP)

我都可以逐步帮你拆解。你接下来想继续分析哪一部分内容?