NVMe架构与操作理论 - 第17页
你这部分引用的是 《NVM Express® Base Specification, revision 2.0b》 中第 1.4.3 继续部分和 1.5 开始的内容,涉及两个重点:
- 数据单位之间的关系(Byte, Word, Dword, Qword)及其在内存中的排列结构
- Admin Queue(管理队列)定义及其作用
我们逐个深入分析并配合图形结构讲解,帮你彻底掌握这部分的知识。
✅ 一、Byte, Word, Dword 的关系与排列(图 3)
🔹 基本单位定义:
| 单位 | 大小(Byte) | 结构说明 |
|---|---|---|
| Byte | 1 字节 = 8 bit | 最基本的数据单位 |
| Word | 2 字节 = 16 bit | 包含 Byte 0 和 Byte 1 |
| Dword | 4 字节 = 32 bit | 包含 Word 0(Byte 0~1)和 Word 1(Byte 2~3) |
| Qword | 8 字节 = 64 bit | 包含两个 Dword(共 4 个 word、8 个 byte) |
🔹 图解说明(图 3)补充解释:
虽然图片文字图不易完整渲染,但我们可以结合图示和规范的逻辑文字说明如下构造:
🔸 以一个 32-bit Dword 举例:
+---------+---------+---------+---------+
| Byte 3 | Byte 2 | Byte 1 | Byte 0 | ← 每个 Byte 是 8 bit
+---------+---------+---------+---------+
↑ ↑ ↑ ↑
Word 1 Word 0 ← 每个 Word 是 2 Byte(16 bit)
Dword (4 Byte, 32 bit)
✅ 默认排列顺序:Little Endian(小端序) - 即:低字节存在低地址,高字节存在高地址 - 举例: - 数值
0x12345678h- 存储顺序为:78h 56h 34h 12h(从 Byte 0 到 Byte 3)
🧠 应用场景
- 在解析 寄存器(如 CAP, VS)、Identify Controller 数据结构、Log Page 条目 等时,理解字段从 byte 到 dword 的映射是必须的;
- 在处理传输协议时(如 PCIe 或 NVMe-MI over SMBus),也要正确按字节偏移来解析数据帧。
✅ 二、Admin Queue(管理队列)
🔹 定义(1.5)
Admin Queue 是用于 NVMe 控制器管理指令提交与完成响应的基本通信机制。它包括:
| 类型 | Queue Identifier | 用途 |
|---|---|---|
| Admin Submission Queue | ID = 0 | 提交 Admin 指令(如 Identify, Set Features, Get Log Page 等) |
| Admin Completion Queue | ID = 0 | 接收指令的执行结果(即 Completion Entry) |
🔹 特性说明:
- Admin SQ 和 CQ 是一一绑定的:即 一个 Admin SQ 只能连接到一个 Admin CQ
- 设备上电初始化后,Admin Queue 是第一个初始化的队列,也是管理命令(非数据命令)传输的主要路径
- 使用 Admin Queue 进行:
- 控制器初始化配置(如设置特性、识别信息)
- 日志查询
- 命名空间管理
- 固件更新
- 安全管理 等等
🧩 举例:Identify Controller 命令流程
- 主机构建 Identify 命令(CDW10 = 01h)
- 将命令写入 Admin Submission Queue(ID=0)
- 控制器执行命令,将结果写入 DMA 缓冲区
- 控制器将完成信息写入 Admin Completion Queue(ID=0)
- 主机读取 CQ Entry 确认命令执行状态
✅ 总结与建议
| 项目 | 要点 |
|---|---|
| ✅ 字节关系 | 1 Dword = 2 Word = 4 Byte,默认 Little Endian 排列 |
| ✅ 实现解析 | 字段解码要正确读取对应 Byte 顺序(从 Byte 0 开始) |
| ✅ Admin Queue | ID 固定为 0,是所有管理命令的传输通道 |
| ✅ 小端存储 | 记住:低位数据在低地址(Byte 0) |
🔍 建议深入部分:
- 我可以帮你复刻 Identify Controller 的完整 Admin Queue 提交与 CQ 返回全过程图解(结合寄存器与 DMA 数据结构)。
- 也可以深入讲解后面章节的 Queue Pair 创建机制(如何创建非 Admin 的 I/O Submission Queue 与 Completion Queue)。
你对哪一部分最感兴趣?我们可以立刻深入分析!