持久内存 - 我们继续对 NVMe 2.0b 第 368 页内容 进行中文深入解析与教学讲解。本页聚焦于: (第379页)
我们继续对 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?
主机应执行如下判断逻辑:
- 遍历该 ANA Group 所关联的所有控制器;
- 从每个控制器读取 ANA Log Page;
- 如果:
- 所有控制器都报告该 ANA Group 为 Inaccessible 状态
- 且在 ANATT 时间内没有任何控制器转变为 Optimized 或 Non-Optimized
- 那么就确认发生了 APD 条件。
🎯 APD 意义
- 常用于告警、故障检测、容灾策略触发等系统行为;
- APD 可能是设备异常、网络断链、路径失效或内部重构等造成。
✅ 二、Namespace Management(命名空间管理能力)
🔍 能力组成
Namespace 管理包含两个命令:
| 命令 | 用途 |
|---|---|
Namespace Management |
创建 / 删除命名空间 |
Namespace Attachment |
控制器 attach / detach 命名空间 |
该功能面向 制造商 或 系统管理员,用于配置、部署、调整命名空间结构。
🧱 条件判断:控制器是否支持 Namespace Management?
控制器必须满足以下条件:
| 条件 | 说明 |
|---|---|
必须支持 Namespace Management 和 Namespace 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)”吗?或者你是否希望我帮你画一张完整的 命名空间生命周期状态转换图(创建 ➜ 附加 ➜ 删除 ➜ 清空)?欢迎告诉我你的下一步目标!