NVM子系统与控制器架构 - 第31页
你正在阅读的是 《NVM Express® Base Specification 2.0b》第 2.3 节及部分 2.4 节内容,本节深入描述了:
✅ 一、NVM Subsystem Port 与多端口多协议支持
🔍 1. 什么是 NVM Subsystem Port?
一个 Subsystem Port 是连接到“Fabric(网络结构)”的 协议接口
- 它可以由多个物理端口(如多个 Ethernet 口)聚合形成一个逻辑端口
- 在逻辑上,它是 NVMe over Fabrics 通信的“对外入口”
🧩 举例说明:多端口聚合
[ Fabric Side ]
┌──────┬──────┐
│ ETH0 │ ETH1 │ ← 聚合为一个 Subsystem Port
└──────┴──────┘
↓
[NVM Subsystem Port A]
- 多个物理 Fabric 接口 → 一个 Port(通过 LACP/聚合绑定)
- 每个 Port 有一个唯一的 Port ID(16-bit)
🧠 2. Subsystem Port 与 Transport 关系
情况 | 描述 |
---|---|
单 Transport | 如仅支持 RoCEv2,该 Port 绑定一个协议 |
多 Transport | 支持多个 Transport(如 iWARP + RoCE)通过同一个 Port ID |
📝 Port 标识方式:
<NQN> + <Port ID>
⚠️ 控制器与 Port 的关系:
- 控制器(Controller)一旦建立连接,就固定绑定一个 Subsystem Port
- 子系统可以选择将特定控制器 静态绑定到特定 Port,或动态灵活分配
- 每个 Controller 只能与 一个主机绑定(1:1 host/controller 映射)
✅ 二、Discovery Service:NVMe-oF 的“寻路系统”
Discovery Service 是 NVMe-oF 专属的发现机制,用于发现可用的 Subsystem 和 Path
🚪 使用场景
主机初次进入 Fabric 网络,不知道存在哪些 Subsystem、有哪些路径连接:
🔍 通过 Discovery 服务,主机可以:
- 获取可访问的 NVM Subsystem 列表
- 获取每个 Subsystem 的路径(多路径)
- 发现静态配置的控制器(如预设的 target)
- 选择性保持持久连接(Persistent Connection)
- 接收 Discovery Controller 的 异步事件通知(AEN)
🔐 Discovery Controller 的限制:
特性 | 说明 |
---|---|
仅支持 Discovery Controller | 不支持 Admin 或 I/O Controller |
不支持命名空间访问 | 仅用于信息查询,不用于读写数据 |
可建立长连接 | 可配置为常驻连接,便于持续监控变化 |
📘 定义见:§3.1.2.3(Discovery Controller 类型定义)
🧭 如何启动 Discovery?
- 由主机侧实现决定,不是 NVMe-oF 强制标准
- 启动方式可能包括:
- OS 或 Hypervisor 提供的配置项
- 配置文件(config.json)
- DHCP 或 DNS 机制下发
✅ 三、Capsule(封装单元)与数据传输机制(重点)
✳️ Capsule 是 NVMe-oF 的核心消息单位
类型 | 描述 |
---|---|
Command Capsule | 承载 命令(SQE) + 可选 SGL/Data |
Response Capsule | 承载 响应(CQE) + 可选返回数据 |
🧱 Capsule 的内容:
内容 | 来源 | 最小大小 |
---|---|---|
SQ Entry(命令) | Admin / I/O / Fabrics 命令 | 至少 64 Byte(由 NVMe Transport binding 定义) |
SGL 或数据块 | 可选 | 支持多片段或链式描述 |
Header/Footer | 由传输协议承载(例如 TCP Packet) | 不属于 Capsule 本体 |
💡 Capsule 是“逻辑结构”,与“具体的数据包结构”无关,可以跨越多个 packet/frame 实现。
🛠 Capsule 工作流程示意图:
[ Host Side ] [ Controller Side ]
────────────── ─────────────────────
Command Capsule ──────────────▶ 包含:
- 64B 命令 (SQE)
- 可选 SGL/Data
◀─────────── Response Capsule
- 完成响应(CQE)
- 可选返回数据
✅ 总结速查表
概念 | 中文解释 | 说明 |
---|---|---|
Subsystem Port | 子系统对外接口 | 一个 Port 可由多个物理接口聚合 |
Port ID | 16 位标识 | 与 NQN 组合形成唯一端口标识 |
多 Transport 支持 | 一端口支持多个协议 | 如 iWARP + RoCE |
Discovery Service | NVMe-oF 的发现机制 | 提供可访问路径、控制器列表等 |
Discovery Controller | 不参与 I/O 操作,仅做发现 | 不支持命名空间挂载或读写命令 |
Capsule | 命令/响应的逻辑封装体 | 包含命令、SGL、数据 |
Command Capsule | 命令封装体(主机→控制器) | 至少 64B |
Response Capsule | 响应封装体(控制器→主机) | 返回完成项和数据 |
SGL | Scatter-Gather List | 数据描述机制,替代 PRP |
Transport Binding Spec | 协议适配规范 | 将命令集适配到具体传输协议 |
✅ 下一步建议深入阅读:
节 | 内容 | 理由 |
---|---|---|
§4.2 | Command Capsule Format(Figure 9) | Capsule 的具体结构图解 |
§5.3 | Connect 命令结构 | 通过 Capsule 发起的连接过程 |
§6.3 | Fabrics Connect Command 实例 | 消息传输链中的核心命令之一 |
§8.13 | In-Band Authentication | 与 Discovery 控制器密切相关的安全机制 |
需要我现在帮你画出:
- Subsystem Port + Fabric 多接口绑定示意图?
- Discovery 流程全图?
- Capsule 内部结构图(Command Capsule & Response Capsule)?
告诉我你希望继续深入哪一部分,我马上开始分析!