高级特性 - 🔄 6.4 Disconnect Command(断开连接命令) (第339页)
NVME2.0协议解读 1 min read

高级特性 - 🔄 6.4 Disconnect Command(断开连接命令) (第339页)

Blog Author

我们继续深入分析 NVM Express® Base Specification 2.0b6.4 Disconnect Command(断连命令)6.5 Property Get Command(属性读取命令),帮助你完全理解 NVMe-oF 的连接生命周期管理与寄存器属性读操作机制。


🔄 6.4 Disconnect Command(断开连接命令)


📌 功能概述:

Disconnect 命令用于从 I/O Submission Queue 上发出请求,删除该 I/O Queue
- ⚠️ 不能在 Admin Queue 上发出 Disconnect 命令,否则返回 Invalid Queue Type。 - 命令成功后: - 控制器将 不再处理该 Queue 上的命令。 - Disconnect 命令的 Completion Entry 是该 Queue 的最后一条响应项


🔧 SQE 字段结构 – Figure 384

字节范围 字段名 说明
00 OPC 固定为 7Fh,表示 Fabrics 命令
01 Reserved 保留
03:02 CID 命令标识符
04 FCTYPE 固定为 08h,表示 Disconnect 命令
23:05 Reserved 保留
39:24 SGL1 保留字段,无数据传输
41:40 RECFMT Capsule 结构格式,需设为 0h,否则返回 Incompatible Format
63:48 Reserved 保留

📤 Disconnect Response – Figure 385

字节范围 字段名 说明
07:00 Reserved 保留
09:08 SQHD 当前 Submission Queue 的 Head Pointer
11:10 Reserved 保留
13:12 CID 与响应命令匹配的命令 ID
15:14 STS 命令执行状态码(如成功、Busy、Invalid Queue Type 等)

⚠️ 特别注意事项:

  • Disconnect 命令发出后,主机不得再往该 I/O SQ 提交任何命令,否则行为未定义。
  • Transport 连接并不会立即断开,仅当所有 Queue 被删除后,主机和控制器才可释放相关资源(详见 §3.3.2.4)。

🧾 6.5 Property Get Command(属性读取)


📌 功能概述:

Property Get 用于主机读取控制器上的某个属性值(寄存器),常用于 控制器初始化阶段: - 类似于 MMIO register read。 - 支持读取长度为 4 Bytes 或 8 Bytes 的属性值。


🔧 SQE 字段结构 – Figure 386

字节范围 字段名 说明
00 OPC 固定为 7Fh(Fabrics 命令)
01 Reserved 保留
03:02 CID 命令标识符
04 FCTYPE 固定为 04h,表示 Property Get
39:05 Reserved 保留
40 ATTRIB 属性读取格式:
- bits 2:0: 读取字节长度
000b: 4 bytes
001b: 8 bytes
- bits 7:3: 保留
43:41 Reserved 保留
47:44 OFST 指定要读取的属性的偏移量(单位:Byte)
详见 §3.1.3 中的属性表

🧾 属性读取范围说明(来自 §3.1.3)

在 Fabric 模式下,常用的属性包括但不限于: - CAP(Controller Capabilities) - VS(Version) - CC(Configuration) - CSTS(Controller Status) - …等。

偏移量例子(以字节为单位):

属性 Offset
CAP 00h
VS 08h
CC 14h
CSTS 1Ch

🚦 错误处理:

  • 若指定了 无效属性偏移量,则返回状态码 Invalid Field in Command
  • 返回值(读取数据)由 Completion Queue Entry 和 Data Buffer 返回,后续 §6.5 后半部分将介绍 Response。

📘 总结:命令行为对照表

命令 FCTYPE 用途 数据方向 支持数据传输 典型用途
Disconnect 08h 删除 I/O Queue ❌ 无数据 释放资源
Property Get 04h 读取寄存器 Controller → Host ✅ 读数据 初始化控制器

📌 如你接下来想深入 6.5 Property Get 的 Response 格式 或进入 6.6 Property Set 写寄存器机制,我可以继续逐句解析。如果你对具体 Transport 初始化流程(如 Fabric Init handshake)感兴趣,也可以一起分析。需要的话,也能帮你制作流程图和寄存器偏移速查表。你想继续吗?