管理命令集与操作 - 第164页
NVME2.0协议解读 1 min read

管理命令集与操作 - 第164页

Blog Author

我们继续对 NVMe 2.0b 基础规范第 153 页 的内容进行中文逐段深入解读与教学讲解,聚焦于以下三大核心模块:


✅ 一、Capacity Management 命令的容量字段使用规则


📌 条件:

Operation 字段设置为以下两种操作之一时,才使用 CDW11/12 的容量字段

  • 1h → Create Endurance Group
  • 3h → Create NVM Set

在这种情况下:

字段 含义
Capacity Lower(CDW11) 容量的低32位(单位:字节)
Capacity Upper(CDW12) 容量的高32位,组合成64位完整容量值

🛑 如果是其它操作(如 Delete、Select Config 等),则这两个字段保留不得使用


✅ 二、选择固定容量配置(Operation = 0h)机制详解


🔷 场景 1:应用一个新的 Capacity Configuration Descriptor

当满足以下条件:

  • Operation 字段 = 0h(选择容量配置);
  • Element Identifier 为某个支持的配置 ID;
  • 当前配置字段 Selected Configuration(Media Unit Status Log Page 中定义)为 0h(表示尚未选择配置);

🔁 控制器应顺序执行以下操作:

  1. 为每个配置描述符中的 Endurance Group 创建一个新的 Endurance Group
  2. 为每个配置中列出的 NVM Set 创建对应的 NVM Set(如果有);

👉 对应配置结构定义见:
- Supported Capacity Configuration List
- Media Unit Status Log(Figure 248)


🔷 场景 2:清除当前配置(Element Identifier = 0h)

表示主机要求清空当前控制器所在域的所有配置资源,控制器应依次执行:

  1. 删除所在域中的所有命名空间;
  2. 删除该域中的所有 NVM Sets(如有);
  3. 删除该域中的所有 Endurance Groups;
  4. Selected Configuration 字段清零(0h)。

🧠 此机制非常适合工厂重置或配置重置场景


🔷 场景 3:重新选择当前配置(Element Identifier 与 Selected Configuration 相同)

  • 控制器应无错误地完成命令
  • 不做任何修改

👉 表示“重复设置”时是幂等(idempotent)操作。


❌ 错误处理场景:

如果满足以下任一情况:

  • Element Identifier 既不是 0h,也不是支持列表中的合法配置 ID;
  • 当前配置字段 Selected Configuration ≠ 0h(表示已经选过配置);

👉 控制器应返回错误状态:Invalid Field in Command,并且不对当前配置做任何改动


✅ 三、Endurance Group 操作机制(Operation = 1h)


🎯 创建 Endurance Group 时,控制器应:

  • 从指定域中分配一个唯一未使用的非零 Endurance Group Identifier
  • 将分配结果写入 Completion Queue Entry 的 Dword 0(详见 Figure 153);
  • 如果没有可用 ID,则命令失败,返回状态码:Identifier Unavailable

💡 是否支持 Media Units 的差异处理:

  • 支持 Media Units:控制器从域中选择一个或多个 Media Unit 来分配给 EG;
  • 不支持 Media Units:控制器从域中选择 NVM 存储容量直接分配给 EG。

👉 这是为了兼容不同架构的设备(例如具备物理分区能力 vs 纯逻辑容量划分)。


🧱 容量验证机制:

创建 Endurance Group 时,主机通过 CDW11/CDW12 指定目标容量。如果该容量:

  • 超过了 Identify Controller 返回的最大 Endurance Group 容量(MEGCAP 字段)

👉 控制器应拒绝请求,具体后文会有详细错误处理机制(将在后页继续展开说明)。


🧠 学习小结

模块 关键点 行为
CDW11/12 仅在创建操作中有效 指定创建的容量(字节数)
Select Capacity Configuration 三种场景:应用配置、清除配置、重复选择 控制器执行相应创建/删除动作
Endurance Group 创建 控制器选择唯一 ID 并记录至 Dword 0 若无 ID 可用则返回错误
容量验证 与 Identify 返回的 MEGCAP 比较 超过则返回错误

如果你希望我带你继续分析: - Figure 153:Completion Queue Entry 的结构; - Capacity Descriptor 的结构与使用(Figure 251 及其前后); - MEGCAP 的获取方式和使用场景; - 实际构造一个完整的创建命令例子(带命令包格式);

都可以继续问我,我可以一步步帮你整理透彻。你想继续哪个部分?