NVMe架构与操作理论 - 第20页
你阅读到的是 NVMe Base 2.0b 规范第 1.5 节术语定义 的第 3 页内容,这一部分继续定义了 固件管理、主机与控制器的内存关系、Identify 命令相关的数据结构、I/O 队列体系、介质单位、元数据等关键概念。
这些术语在后续章节(特别是第 5 章 Admin 命令、第 7 章 I/O 命令、第 8 章扩展能力)中将频繁出现,因此掌握它们对你解析协议整体结构和具体命令非常关键。
✅ 一、固件更新与存储
🔹 firmware slot(固件槽)
用于在域(Domain)中存储固件映像(firmware image)的位置。
| 特性 | 说明 |
|---|---|
| 每个 domain 最多存储 7 个固件镜像 | |
| 同一 domain 中所有控制器共享固件槽 | |
与 Firmware Commit 命令相关(CDW10 定义固件槽号) |
📘 示例场景: - 设备支持 A/B 分区冗余引导; - 主机下载新固件 → 写入槽位 2 → 提交生效。
✅ 二、主机与内存的关系
🔹 host(主机)
主机是与 NVM 子系统交互的实体,主要功能是:
- 提交命令到 SQ(Submission Queue)
- 从 CQ(Completion Queue)中获取命令执行结果
📘 可以是物理主机(如 x86 服务器),也可以是虚拟化中的 hypervisor 实体。
🔹 host-accessible memory(主机可访问内存)
所有主机可读写的内存区域,包括但不限于:
| 类型 | 说明 |
|---|---|
| 主机自身内存 | Host RAM |
| CMB | Controller Memory Buffer(控制器暴露出来的一段缓冲区) |
| PMR | Persistent Memory Region(持久性内存区域) |
🔹 host memory(主机内存)
可被主机和控制器访问、但不被控制器暴露给主机的共享内存区域。
📘 示例: - 一段 DMA 共享区域; - 在设备之外但同时被控制器与主机访问的寄存器映射内存; - 与 Host Memory Buffer 功能配合使用(参见 Features FID 0Dh)。
✅ 三、Identify 命令相关数据结构
🔹 Identify Controller Data Structures
包括以下两类结构,皆可通过
Identify命令获取:
| CNS 值 | 含义 |
|---|---|
| 01h | 标准控制器识别结构(Identify Controller) |
| 06h | 各个 I/O Command Set 专属的控制器结构 |
📘 在解析 Identify Controller 响应时非常重要,参见规范第 5.17 节。
🔹 Identify Namespace Data Structures
涵盖所有 namespace 级别的信息结构体,可通过
Identify命令读取:
| CNS 值 | 说明 |
|---|---|
| 00h | 标准 Identify Namespace |
| 08h | I/O Command Set 独立的 Identify Namespace |
| 05h | 各 I/O Command Set 专属结构 |
📘 常用于获取 LBA 大小、命名空间容量、支持的元数据等信息。
✅ 四、I/O 命令与队列机制
🔹 I/O Command
提交至 I/O Submission Queue 的命令,如: -
Read-Write-Compare-Flush-Reservation等
📘 区别于 Admin 命令(仅提交到 Admin SQ)。
🔹 I/O Submission Queue(I/O 提交队列)
控制器用于接收 I/O 命令 的队列。每个队列有唯一的 Queue ID,主机需显式创建(非 ID=0)。
🔹 I/O Completion Queue(I/O 完成队列)
与一个或多个 I/O SQ 关联,用于向主机返回执行结果。
📘 队列配对形式如: - SQ1 → CQ1 - SQ2, SQ3 → CQ2(可多对一)
🔹 I/O Controller(I/O 控制器)
实现 I/O 队列并允许访问用户数据的控制器。
📘 与 Administrative Controller / Discovery Controller 区分:
| 类型 | 是否支持 I/O Queue | 是否访问用户数据 |
|---|---|---|
| I/O Controller ✅ | ✅ | |
| Admin Controller ❌ | ❌ | |
| Discovery Controller ❌ | ❌ |
✅ 五、物理存储与元数据
🔹 Media Unit(介质单元)
NVM 子系统中基本的物理介质组成单元。
- Endurance Group 是由多个 Media Unit 构成的;
- 每个 Media Unit 可能对应一块 NAND Die、一个存储通道等。
📘 见第 3.2.3 节与第 8.19 Endurance 分区管理。
🔹 Metadata(元数据)
与用户数据相关的上下文信息,可被主机提交给控制器存储,或由控制器自动附加。
| 类型 | 示例 |
|---|---|
| 元数据内容 | CRC、校验值、数据版本、快照标识等 |
| 使用方式 | SGL 描述符或 PRP 描述符之后紧跟 metadata buffer |
| 说明位置 | 每种 I/O Command Set 规范会定义具体格式与支持方式(如 NVM、ZNS) |
📘 通常通过 Identify Namespace 返回的 FLBAS、MS、MC 字段定义。
✅ 总结复习表
| 概念 | 中文解释 | 应用场景 |
|---|---|---|
| Firmware Slot | 固件映像存储槽位 | 固件更新流程 |
| Host | 与控制器通信的主机实体 | NVMe 主机 |
| Host-accessible Memory | 主机可访问的所有内存区域 | DMA、CMB、PMR |
| Host Memory | 主机与控制器可共享的非暴露内存 | HMB 机制 |
| Identify Controller Data Structures | CNS=01h/06h 的响应结构 | 查询控制器能力 |
| Identify Namespace Data Structures | CNS=00h/05h/08h 的响应结构 | 获取命名空间属性 |
| I/O Command | 提交到 I/O SQ 的命令 | 数据读写等操作 |
| I/O SQ / CQ | 用于数据命令的提交和完成 | 普通 I/O 操作路径 |
| Media Unit | 最小物理存储单元 | 构成 Endurance Group |
| Metadata | 用户数据相关的上下文信息 | 用于校验、标识等 |
你现在已经具备了解析 Identify 结构、命令通路、内存结构、元数据机制 的全部关键术语。如果你接下来想进入:
- Identify Namespace / Controller 响应字段图解
- Get Log Page 的结构字段解析
- I/O 命令数据路径(含 PRP / SGL / Metadata)
我可以为你逐步引导构建结构图或流程图,配合规范内容帮你吃透每个命令。你想从哪个命令或结构开始?我们立刻进入实战讲解!