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

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

Blog Author

你刚刚阅读的是 NVMe Base Specification 2.0b 第 2.1 和 2.2 节 的衔接内容,涉及两个重要概念:

  1. Figure 7 图解:n:1 的 Submission/Completion Queue 映射结构
  2. 消息传输模型(Message-Based Transport Model) 的行为特性(NVMe-oF 专属)

✅ 一、图解 Figure 7:n:1 Mapping(多个 SQ 对应一个 CQ)

多个 I/O Submission Queue → 一个 I/O Completion Queue(在 Core B)

📌 场景说明:

           Core A               Core B
        ┌──────────┐         ┌──────────┐
        │  SQ X    │         │          │
        │  SQ Y    │ ──────▶ │   CQ W   │
        │  SQ Z    │         │          │
        └──────────┘         └──────────┘
  • 各核心可独立提交命令(每核一个 SQ);
  • 但响应统一写入 CQ W,便于统一处理或节省 CQ 数量;
  • 常用于 响应集中处理线程池模式Host 核心资源紧张场景

📦 补充知识:队列结构与 Doorbell 工作原理

元素 描述
SQ(Submission Queue) 主机写命令(64 字节)结构的循环缓冲区
CQ(Completion Queue) 控制器写完成状态的循环缓冲区
SQ Tail Doorbell 主机写入,通知控制器有新命令
CQ Head Doorbell 主机读取并处理后写回,告诉控制器哪些位置可以重用
Phase Tag 每轮翻转,帮助主机识别哪些 CQ 条目是“新提交的”

🧠 PRP vs. SGL 简要说明:

描述
PRP(Physical Region Page) 用于 描述连续或简单链式的物理内存
SGL(Scatter-Gather List) 用于 更复杂的数据段描述,可支持链式结构(段指针嵌套)
使用场景 PRP 简单高效,适合连续内存;SGL 灵活复杂,适合非连续或设备直通

📘 命令结构内只能填: - 最多两个 PRP(PRP1、PRP2); - 或一个 SGL 段入口(Segment Descriptor)。


✅ 二、消息传输模型(NVMe-oF 专用)

Section 2.2: Message-Based Transport Model

🚀 对比 Memory Model,有以下特性差异:

特性 Memory Model Message Model (NVMe-oF)
队列映射 支持多 SQ 对一个 CQ 只支持 1:1(每对独立)
中断 控制器可直接发中断 控制器不发,需由 HBA/网络接口 负责触发
队列创建机制 Create I/O SQ/CQ 命令 使用 Connect 命令过程
元数据传输 支持单独 Metadata Buffer 不支持独立 Metadata,需内联
命令/响应结构 使用内存结构(doorbell 驱动) 使用 Capsule 封装,以消息方式传送

🎯 Host ↔ Controller 通信机制比较图:

✅ Memory-Based (PCIe)

[Host]               [Controller]
  │  SQ Tail Doorbell ───────────────▶
  │  (写 MMIO 通知新命令)            
  
  │  ◀────────── CQ Entries         
  │  (主机轮询 or 中断读 CQ)        

✅ Message-Based (NVMe/TCP)

[Host]               [Controller]
  │  Send Capsule (TCP) ─────────▶
  
  │  ◀──────── Response Capsule (TCP)
  
  ⚠ 中断由主机 NIC 触发而非控制器

✅ 总结对比整理

项目 Memory Model Message Model
常见接口 PCIe TCP、RDMA、FC
队列映射 SQ:N → CQ:1 支持 固定 1:1
命令结构 共享内存中的 64B 结构 Capsule 封装命令
Doorbell 有寄存器 doorbell 无需 doorbell,使用消息
中断来源 控制器生成 MSI/MSI-X Host NIC 发起
队列创建命令 Admin 命令 Create I/O Queue Connect 命令
元数据传输 支持 Metadata Buffer 不支持分离元数据

✅ 建议下一步阅读章节:

内容 理由
§3.5 NVMe-oF 队列建立流程详解 对应 Message-Based 模型
§4.2 Capsule 格式 NVMe-oF 的命令和响应封装格式
§5.3 Connect 命令 NVMe-oF 核心命令,取代 PCIe 下的 Create SQ/CQ
§6.3 Fabrics Command Set:Connect Command 实战操作层细节
§8.24 Telemetry 日志收集 跨协议可靠日志传输机制

如果你需要,我可以:

  • 帮你画出 Figure 7 图示(n:1 映射队列结构)
  • 构建 Memory vs Message 模型下的交互流程对比图
  • 展示 PRP / SGL 的实际内存布局结构
  • 演示完整一个命令的“从投递到完成”的生命周期(PCIe 与 TCP 对比)

你想继续深入哪一块?我可以立即为你展开分析!