持久内存 - 我们继续对 NVMe 2.0b 第 368 页内容 进行中文深入解析与教学讲解。本页聚焦于: (第379页)
NVME2.0协议解读 1 min read

持久内存 - 我们继续对 NVMe 2.0b 第 368 页内容 进行中文深入解析与教学讲解。本页聚焦于: (第379页)

Blog Author

我们继续对 NVMe 2.0b 第 368 页内容 进行中文深入解析与教学讲解。本页聚焦于:


📘 第 8.10.6 ~ 8.11 节:All Paths Down 条件 + Namespace 管理能力


一、All Paths Down(APD)条件定义与主机判断逻辑


🧩 什么是 All Paths Down?

All Paths Down(APD) 是指主机在访问某个 ANA Group 所包含命名空间时,“所有可达路径都不可用了”。

也就是说:

  • 该 ANA Group 下所有命名空间都不可访问
  • 原因是:无任何控制器处于 Optimized 或 Non-Optimized 状态
  • 排除掉 ANA Persistent Loss 状态 路径,仅检查那些“可能还可用”的路径

🛠️ 主机如何判断发生了 All Paths Down?

主机应执行如下判断逻辑:

  1. 遍历该 ANA Group 所关联的所有控制器;
  2. 从每个控制器读取 ANA Log Page;
  3. 如果:
  4. 所有控制器都报告该 ANA Group 为 Inaccessible 状态
  5. 且在 ANATT 时间内没有任何控制器转变为 Optimized 或 Non-Optimized
  6. 那么就确认发生了 APD 条件。

🎯 APD 意义

  • 常用于告警、故障检测、容灾策略触发等系统行为;
  • APD 可能是设备异常、网络断链、路径失效或内部重构等造成。

二、Namespace Management(命名空间管理能力)


🔍 能力组成

Namespace 管理包含两个命令:

命令 用途
Namespace Management 创建 / 删除命名空间
Namespace Attachment 控制器 attach / detach 命名空间

该功能面向 制造商系统管理员,用于配置、部署、调整命名空间结构。


🧱 条件判断:控制器是否支持 Namespace Management?

控制器必须满足以下条件:

条件 说明
必须支持 Namespace ManagementNamespace Attachment 命令
Identify Controller 中 OACS.bit[3] = 1 表示支持该功能
应支持 Namespace Attribute Changed 异步事件 用于通知命名空间状态变更
可选支持 Namespace Granularity 定义命名空间粒度分配单位(详见 I/O Command Set)

🔁 删除 / 解绑后的 NSID 状态变化

操作 结果
Detach 命名空间 NSID 在该控制器上变为 inactive NSID(非激活命名空间)
Delete 命名空间 NSID 在整个 NVM Subsystem 上变为 unallocated NSID(未分配编号)
  • 任何发往已变为 inactive 的 NSID 的命令将被认为是非法访问。

📦 命名空间容量与分配逻辑

  • 命名空间的大小由以下因素决定:
  • 用户指定的请求容量
  • 命名空间 Format 格式(例如 LBA 格式)
  • 命名空间的特性(如 endurance、用途)

  • 控制器决定实际分配的物理容量,具体规则 不在规范范围内,为供应商实现细节。


🧩 Endurance Group / NVM Set 选择逻辑

在创建命名空间时,可以指定其属于哪个 Endurance Group 和 NVM Set。不同字段设置下的行为如下:

Endurance Group Identifier NVM Set Identifier 控制器行为
= 0h = 0h 控制器自动选择 EG + NS
≠ 0h = 0h 控制器在指定 EG 中选择一个 NS
= 0h ≠ 0h ⚠️ 命令非法,控制器返回 Invalid Field in Command
≠ 0h ≠ 0h 命名空间分配到指定 EG + NS 中

📝 补充知识点:EG 和 NS 是什么?

  • EG(Endurance Group):基于介质耐久性或隔离性对物理资源的逻辑分组;
  • NS(NVM Set):逻辑分配单元,用于分离性能/容量特性,支持 namespace 建立;

🔚 总结图示:Namespace 创建逻辑

                 +---------------------------+
Create NS 命令 → | EG Identifier | NS Identifier | → 控制器行为
                 +---------------------------+
                       0h            0h       → 自动分配 EG + NS
                      ≠0h            0h       → 在指定 EG 中分配 NS
                       0h           ≠0h       → ❌ 非法命令,返回错误
                      ≠0h           ≠0h       → 分配到指定 EG + NS

需要我继续讲解第 8.12 节“命名空间写保护状态(Write Protection State)”吗?或者你是否希望我帮你画一张完整的 命名空间生命周期状态转换图(创建 ➜ 附加 ➜ 删除 ➜ 清空)?欢迎告诉我你的下一步目标!