NVMe架构与操作理论 - 第28页
NVME2.0协议解读 1 min read

NVMe架构与操作理论 - 第28页

Blog Author

你阅读的是 NVMe Base Specification 2.0b 第 2.1 节:Memory-Based Transport Model(基于内存的传输模型) 的起始部分。

这一节围绕两个重点展开讲解:


✅ 一、三种命令集在不同 Queue 上的使用规范

📌 Admin Command Set

  • 用途:控制器管理(创建 I/O Queue、识别设备、设置特性等)
  • 发送位置:只能通过 Admin Submission Queue
  • 包括命令Identify, Set Features, Create I/O Submission Queue, Delete I/O Queue, Abort, 等

📌 I/O Command Set

  • 用途:用于具体的数据操作,如读写、顺序写(ZNS)、键值存取(KV)等
  • 发送位置I/O Submission Queue
  • 子集
  • 标准 NVM Command Set(Read/Write)
  • Zoned Namespace Command Set(ZNS)
  • Key Value Command Set(KV)

📌 Fabrics Command Set

  • 用于 NVMe over Fabrics(远程访问)
  • 可被发送到:
  • Admin Submission Queue ✅
  • I/O Submission Queue (仅部分 Fabric 命令)
  • 特点:
  • 即使控制器未启用(CC.EN = 0),仍可处理 Fabrics 命令
  • 用于 建立连接、认证、属性设置(Property Get/Set)

✅ 二、基于内存的队列模型介绍(Memory-Based Transport)

➤ 本质机制:使用共享内存中的 Submission 和 Completion Queue 实现命令传递

  • 所有命令和响应通过 host/controller 共享的 DRAM 区域传输
  • 只有 Doorbell 是 MMIO 寄存器(用于“敲门”通知控制器)

➤ 队列结构回顾:

  • Submission Queue(SQ):主机将命令写入此处
  • Completion Queue(CQ):控制器将完成信息写入此处
  • 每对 SQ 和 CQ 称为一个 Queue Pair(QP)

➤ Admin Queue 是固定结构:

Queue 类型 Queue ID 特殊说明
Admin Submission Queue 0 管理命令专用
Admin Completion Queue 0 仅接收 Admin 命令响应
I/O Queue 1 ~ 65,535 主机可根据核心并发灵活配置

✅ 三、Figure 6 图解:Queue Pair 一对一映射(1:1)

Core 0           I/O SQ1 <--> CQ1  Controller
Core 1           I/O SQ2 <--> CQ2  Controller
Core N-1         I/O SQN <--> CQN  Controller
                 Admin SQ0 <--> CQ0  Controller Mgmt

✨ 场景说明:

  • 在一个多核系统中,每个核心维护自己的 I/O 队列对(避免锁竞争)
  • Admin Queue 固定一对(队列 ID 为 0)
  • 每个 I/O SQ 与 CQ 成对绑定(此图为典型 1:1 绑定结构)

📘 优点: - 数据本地性强(cache hit 高) - 不同核心可以并发提交/完成命令而互不干扰


✅ 四、后续内容预告:Figure 7

  • 展示 n:1 的映射结构:多个 SQ 共享同一个 CQ
  • 常用于:
  • 节省 CQ 空间
  • 将多个 SQ 的响应归入一个核处理

✅ 关键术语速查表

术语 中文解释 作用
Admin SQ / CQ 管理命令队列 控制器初始化/识别配置命令
I/O SQ / CQ 数据命令队列 读写等操作命令
Queue Pair 一组绑定的 SQ 与 CQ 命令投递与完成响应机制
Doorbell 命令通知机制 主机敲门告诉控制器“我写好了”
CC.EN 控制器启用位 为 0 时只有 Fabric 命令可执行
Capsule 封装命令的消息单元 NVMe-oF 中用得多

✅ 小结与建议

你目前已经掌握:

  • 三类命令集的使用机制及限制
  • Memory-Based Transport 中的 SQ/CQ 结构
  • 多核系统下如何高效构建 Queue Pair(1:1 绑定)

🔍 建议下一步深入阅读:

内容 理由
§2.2 消息模型的队列实现(Capsule、In-Capsule Data) 对比消息传输和内存传输机制
§3.4.4 Arbitration 机制 多队列如何调度顺序
§4.2 Command Capsule 的结构 理解 64B 命令结构及其投递方式
§5.2 Create I/O Submission Queue 命令 如何实际创建这些队列
§5.27 Set Features(例如 Arbitration、Queue Depth) 实际配置 Queue 行为和优先级

如果你需要,我可以:

  • 为你画出图 6 和图 7 的完整示意图;
  • 演示一个典型系统中如何动态创建多个 Queue;
  • 展示一个完整的 I/O 提交过程(从 SQ 投递到 CQ 返回)流程图。

你想继续看图 7 的 Queue 多对一结构,还是进入命令结构与 Doorbell 实战流程?我可以立即带你深入。