管理命令集 - ✅ 一、Capacity Management 命令的特定状态值(Figure 152) (第166页)
NVME2.0协议解读 1 min read

管理命令集 - ✅ 一、Capacity Management 命令的特定状态值(Figure 152) (第166页)

Blog Author

我们继续深入分析 NVM Express® Base Specification, revision 2.0b 中的第 155 页内容,特别是关于 Capacity Management 命令的状态值创建 I/O 完成队列命令(Create I/O Completion Queue Command)的详细解析。


✅ 一、Capacity Management 命令的特定状态值(Figure 152)

1. Insufficient Capacity(容量不足)

  • 状态码26h
  • 描述:当请求的操作所需的容量大于当前可用的空间时,会返回此状态。
  • 错误信息:如果 Error Information log page 被支持,控制器会在 Command Specific Information 字段中指定创建 Endurance GroupNVM Set 所需的总容量(字节数)。

2. Identifier Unavailable(标识符不可用)

  • 状态码2Dh
  • 描述:表示支持的 Endurance GroupsNVM Sets 数量已经超过最大限制。
  • 错误信息:在完成队列项的 Dword 0 中将包含成功创建的 Endurance GroupNVM Set 的标识符(如果有的话)。

✅ 二、Capacity Management 完成队列条目(Figure 153)

Dword 0 的结构:

Bit 区间 字段 描述
31:16 Reserved 保留
15:00 Created Element Identifier 指示 创建的 Endurance GroupNVM Set 的标识符。如果 Create Endurance Group 操作成功,显示 Endurance Group Identifier;如果 Create NVM Set 操作成功,显示 NVM Set Identifier;对于其他操作,此字段保留。

✅ 三、创建 I/O 完成队列命令(Create I/O Completion Queue Command)

功能:该命令用于创建所有 I/O Completion Queues(除了 Admin Completion Queue)。Admin Completion Queue 是通过在 ACQ 属性中指定基地址来创建的。

1. PRP 列表和内存管理

  • PRP List:如果命令中提供了 PRP List 来描述完成队列,主机软件必须将 PRP List 保持在物理内存的相同位置,并且在删除 I/O 完成队列命令执行完成之前,不得修改 PRP List。如果修改了 PRP List,行为是未定义的

2. PRP Entry 1(见 Figure 154)

位区间 字段 描述
63:00 PRP Entry 1 (PRP1) 如果 CDW11.PC = 1,则此字段指定一个 64 位的基内存地址指针,指向物理连续的完成队列。该地址指针需要满足内存页对齐(根据 CC.MPS 的值)。
如果 CDW11.PC = 0,则该字段指定一个 PRP List 指针,描述构成完成队列的内存页列表。每个 PRP 项应有偏移量为 0。
如果在 PRP 列表中发现非零偏移量,则控制器应返回 PRP Offset Invalid 错误。

3. 命令 Dword 10 结构(见 Figure 155)

位区间 字段 描述
31:16 Queue Size (QSIZE) 指定将要创建的完成队列的大小。若大小为 0h 或超出了控制器支持的范围,则控制器应返回 Invalid Queue Size 错误(参见 §3.3.3.3)。
15:00 Queue Identifier (QID) 指定分配给完成队列的标识符。该标识符与 Completion Queue Head Doorbell 相对应(即 CQyHDBL)。此标识符不能超过 Number of Queues 字段报告的最大值,并且如果指定的值为 0h 或超过已支持的队列数,或与已经存在的标识符重复,控制器应返回 Invalid Queue Identifier 错误。

✅ 四、创建 I/O 完成队列命令的状态值与错误处理

命令特定状态值

  • Invalid Queue Size:如果 Queue Size 字段的值无效(如为 0h 或超过控制器支持的最大值),控制器应返回此错误。
  • Invalid Queue Identifier:如果 Queue Identifier 无效(如为 0h、超过最大值或与现有标识符冲突),则返回此错误。

🧠 学习总结

操作类型 关键字段 错误处理 描述
Capacity Management Insufficient Capacity 26h 容量不足时返回,需查看 Error Information Log
Capacity Management Identifier Unavailable 2Dh 已超出最大 Endurance Group 或 NVM Set 支持数
创建 I/O 完成队列 PRP ListPRP Entry PRP Offset Invalid PRP 列表中偏移量无效时返回
创建 I/O 完成队列 Queue SizeQueue Identifier Invalid Queue SizeInvalid Queue Identifier 队列大小或标识符无效时返回

扩展学习建议

如果你希望进一步学习以下内容,欢迎继续提问:

  • Completion Queue 的管理和调度机制
  • PRP List 的内存管理与优化
  • 多个队列的创建与管理(比如 Admin QueueI/O Completion Queue 的配合使用)。

我可以提供更深入的示例和详细解析,帮助你在实践中掌握这些概念。你希望继续探索哪个部分呢?