NVM子系统与控制器架构 - 第36页
非常好,现在你进入了 NVMe Base Specification 2.0b 的 第 2.3 节存储模型部分 的下一种典型结构示例 —— 图 14:Two-Namespace NVM Subsystem(双命名空间的存储子系统)。
这是比上一节图 13(单命名空间)略复杂的进阶模型,我们接下来从结构关系、功能意义、主机操作映射几个方面为你中文系统讲解与分析。
✅ 一、图 14 系统结构简图
NVM Subsystem (SSD)
├── Domain 0
│ └── Endurance Group 1
│ └── NVM Set 1
│ ├── Namespace 1
│ └── Namespace 2
└── Port
└── Controller
✅ 二、结构层级逐项说明
层级 | 中文解释 | 说明 |
---|---|---|
NVM Subsystem | 存储子系统(如 SSD) | 顶级容器,包含所有控制器、端口、命名空间 |
Domain 0 | 控制域 0 | 逻辑独立运行单元,可独立复位、电源管理等 |
Endurance Group 1 | 寿命管理组 | 所有存储介质都在这组内,管理 TBW、SMART 等 |
NVM Set 1 | 非易失内存集合 | 将 EG 拆分给命名空间使用的分配单元 |
Namespace 1 & 2 | 命名空间 | 主机可见卷,例如 nvme0n1 , nvme0n2 |
Port → Controller | 端口/控制器 | 控制器通过端口与主机通信、执行命令 |
✅ 三、和图 13 的区别
项目 | 图 13(单命名空间) | 图 14(双命名空间) |
---|---|---|
命名空间数量 | 1 个 | 2 个 |
Namespace 分布 | NVM Set 1 → NS1 | NVM Set 1 → NS1 + NS2 |
主机可访问卷 | 只有一个设备节点(如 nvme0n1 ) |
两个设备节点(如 nvme0n1 , nvme0n2 ) |
典型应用 | 简单存储使用 | 卷分区、多用途隔离、系统盘 + 数据盘 |
✅ 四、主机视角下的行为表现
🧠 主机通过控制器执行以下操作:
操作 | 映射到结构 |
---|---|
Identify Namespace 1 / 2 | 获取每个命名空间的容量、格式、LBA 等 |
Read / Write / Format | 对应命名空间独立操作,不影响彼此 |
SMART Health | 统一来自于 Endurance Group 1 |
Sanitize | 作用于整个 Endurance Group,会影响两个命名空间数据 |
Attach / Detach Namespace | 可选支持,一个控制器可动态附加命名空间 |
✅ 五、图解对比:图 13 vs 图 14
🔹 图 13 – 单命名空间
graph TD
A[NVM Subsystem] --> B[Domain 0]
B --> C[Endurance Group 1]
C --> D[NVM Set 1]
D --> E[Namespace 1]
A --> F[Port]
F --> G[Controller]
G --> E
🔹 图 14 – 双命名空间
graph TD
A[NVM Subsystem] --> B[Domain 0]
B --> C[Endurance Group 1]
C --> D[NVM Set 1]
D --> E[Namespace 1]
D --> F[Namespace 2]
A --> P[Port]
P --> G[Controller]
G --> E
G --> F
一个控制器挂载两个命名空间,主机端会看到两个独立的块设备。
✅ 六、命名空间之间的独立性 vs 共享性
属性 | Namespace 1 | Namespace 2 |
---|---|---|
LBA 地址空间 | 完全独立 | 完全独立 |
Format 操作 | 互不影响 | 互不影响 |
命令提交队列(I/O Queue) | 可共享 | 可共享 |
底层 NAND Flash | 可重叠(如共享同一 NVM Set) |
📝 注意:虽然逻辑上是独立的命名空间,但如果底层共享一个 NVM Set,当做 Sanitize 等操作时会同时影响两个。
✅ 七、使用场景举例
- 一块 SSD 分为:
- Namespace 1:给操作系统作为系统盘
- Namespace 2:给容器存放数据卷
- 或者:
- Namespace 1:普通数据盘
- Namespace 2:用于 PCIe PASSTHROUGH 设备直通到 VM
✅ 八、后续建议学习点
推荐章节 | 理由 |
---|---|
§5.23 – Namespace Management | 如何创建多个 Namespace,如何绑定到控制器 |
§5.17 – Identify | 如何用 Identify 命令读取命名空间结构和容量 |
§8.11 – Namespace Management | 高级管理机制,如命名空间写保护、重命名等 |
✅ 总结一句话
图 14 展示的是 NVMe 支持多命名空间的最基础实现:同一个控制器、同一个 NVM Set、挂载多个 Namespace,这是实际中非常常见的使用方式,是迈向多租户、多虚拟化系统的第一步。
你是否想继续深入:
- 如何通过命令创建第二个命名空间?
- 一个命名空间是否可以动态挂载到不同控制器?
- 如何在多 Namespace 系统中设置读写权限、QoS?
欢迎告诉我你关注的点,我可以继续为你详细拆解图文结合~