持久内存与安全机制 - 第380页
NVME2.0协议解读 1 min read

持久内存与安全机制 - 第380页

Blog Author

我们继续对 NVMe 2.0b 第 369 页内容 进行中文深度解析,重点是命名空间的 创建、分配、挂载与删除流程,以及其中涉及的字段约束。


📘 第 8.11 节续:Namespace 创建/附加/移除 操作细节讲解


✅ 一、创建命名空间时的参数合法性判断(字段组合校验)


🎯 情况 1:EG 和 NS 都为非零

  • 条件:你明确指定了 Endurance Group 和 NVM Set
  • 控制器行为:
  • ✅ 如果指定的 NS 存在于该 EG 中 → 成功分配
  • ❌ 如果 NS 不存在于该 EG 中 → 命令失败,返回 Invalid Field in Command

✅ 二、关于命名空间实际容量与请求容量的“对齐差异”


🧮 请求 vs 实际分配

  • 控制器的实际分配单位是“分配单元”而非逻辑块数精确乘积
  • 示例说明:

请求: - 32 个 LBA × 4 KiB = 128 KiB

实现: - 若控制器按 1 MiB 为分配单位 → 实际占用 = 1 MiB

📝 报告字段

  • 命名空间占用的实际 NVM 容量:
  • Identify Namespace 数据结构 中的容量字段报告
  • 分配单元粒度:
  • 若支持,将通过 Namespace Granularity List 报告(需查看 I/O Command Set)

✅ 三、ANA Group ID 分配逻辑(ANAGRPID)

  • ANAGRPID 表示命名空间属于哪个 ANA 访问状态分组(用于 ANA 状态汇报与多路径策略)
  • 若 Host 设置 ANAGRPID = 0h:
  • 控制器自动分配该命名空间所属的 ANA Group
  • ANAGRPID 分配机制为厂商自定义,规范不强制定义

✅ 四、完整命名空间生命周期操作流程


🏗️ 1. 创建命名空间(Create Namespace)

步骤一:获取命名空间能力
    → Identify 命令 (NSID = FFFFFFFFh, CNS = 0h)


步骤二:(可选)获取 I/O Command Set 特定管理能力
    → 比如 Namespace Granularity(粒度列表)


步骤三:查询剩余可用容量
    → 参考第 3.8 节


步骤四:构建命名空间创建请求结构(Figure 300)


步骤五:发出 Namespace Management 命令(Create 操作)
    → 成功后,返回新命名空间的 NSID
    → 此时该命名空间“尚未附加至任何控制器”


步骤六:使用 Identify Namespace 获取该命名空间的具体属性

🔗 2. 附加命名空间(Attach Namespace)

步骤一:发出 Namespace Attachment 命令(Attach 操作)
    → 指定 NSID 和需要附加的 Controller ID


步骤二:(可选)接收异步事件
    → 如果启用了 Namespace Attribute Changed 通知
    → 控制器将向主机发送 Asynchronous Event(AE)

🔌 3. 卸载命名空间(Detach Namespace)

步骤一:发出 Namespace Attachment 命令(Detach 操作)
    → 指定 NSID 和 Controller ID


步骤二:(可选)接收异步事件通知

❌ 4. 删除命名空间(Delete Namespace)

步骤一:建议先将命名空间从所有控制器 Detach


步骤二:发出 Namespace Management 命令(Delete 操作)
    → 删除成功后,该命名空间的 NSID 将变为“未分配”

🧠 补充知识:为什么 Delete 前要先 Detach?

  • Detach 是 控制器级别的命名空间移除
  • Delete 是 NVM Subsystem 全局移除该 NSID 实体
  • 先 Detach 可避免控制器处理未完成的命令或异常状态

🔚 总结:创建命名空间字段组合合法性图解

EG Identifier NS Identifier 控制器行为
= 0h = 0h 控制器自动选择 EG 和 NS
≠ 0h = 0h 控制器在指定 EG 中选择 NS
= 0h ≠ 0h ❌ 命令非法,返回错误
≠ 0h ≠ 0h(匹配) ✅ 在指定 EG + NS 中分配命名空间
≠ 0h ≠ 0h(不匹配) ❌ 命令非法,返回 Invalid Field in Command

需要我继续讲解 8.12 节 Namespace Write Protection 吗?还是帮你梳理一份“命名空间管理命令+字段使用汇总表”方便快速查阅?随时告诉我你想要怎么继续。