IB 协议与传输:层次、QP、RDMA 与子网管理器
InfiniBand 从一开始就被设计为让计算机之间直接访问彼此内存的网络,而不是在陌生节点之间传送数据包。它的层级、寻址和管理方式对以太网工程师来说显得陌生,但一旦掌握了词汇就很简单——这也解释了为什么物理层要遵循如此严格的标准。本页是协议视角;光模块内容见 InfiniBand 光模块。
层
| 层 | 内容 | 说明 |
|---|---|---|
| 物理层 | 通道(1x、4x、8x、12x)、每通道信号(从 NRZ 到 HDR 的 PAM4……参见 速率)、编码(QDR 及之前为 8B/10B,FDR 起为 64B/66B)、FEC(FDR 起可选,HDR/NDR 采用 RS-FEC) | 光模块的世界 |
| 链路层 | 带 LID 的本地路由头(LRH)、虚拟通道(VL0–VL14 为数据,VL15 为管理)、按 VL 划分的基于信用的流量控制、链路层 CRC(ICRC/VCRC) | 天生无损 |
| 网络层 | 带 128 位 GID 的全局路由头(GRH),用于多子网路由 | 在单个集群内较少使用 |
| 传输层 | 带发送/接收队列的队列对(QP)、服务类型 RC/UC/UD/XRC、按 MTU 分段、用于可靠服务的 ACK/NAK | RDMA 位于此层 |
| 上层 | verbs API、MPI、NCCL(通过 UCX/SHARP)、存储(SRP、iSER、NVMe/IB)、IPoIB | 应用程序所使用的内容 |
寻址与身份
| 标识符 | 长度 | 分配方 | 含义 |
|---|---|---|---|
| GUID | 64 位 | 制造商 | 端口、节点或系统的永久身份(类似 MAC 地址) |
| LID(本地标识符) | 16 位 | 子网管理器 | 子网内的地址;转发表使用 LID |
| GID | 128 位 | SM(前缀)+ GUID | 子网前缀 + GUID;用于跨子网及 RoCE |
| PKey(分区密钥) | 16 位 | SM | 分区成员关系(类似 VLAN);完全成员/受限成员 |
| QPN | 24 位 | HCA | 队列对编号——端口内的端点 |
队列对与传输服务
队列对是 HCA 中由应用程序拥有的一个发送队列和一个接收队列。提交给它的工作请求由硬件执行;完成事件进入完成队列。服务类型:
| 类型 | 可靠 | 面向连接 | 用途 |
|---|---|---|---|
| RC——可靠连接 | 是(ACK/NAK、重传) | 是,每个对端一个 QP | 大多数 RDMA 流量;MPI、NCCL、存储 |
| UC——不可靠连接 | 否 | 是 | 少见 |
| UD——不可靠数据报 | 否 | 否,所有对端共用一个 QP | 管理、IPoIB、组播 |
| XRC——扩展可靠连接 | 是 | 跨进程共享接收队列 | 用于减少大型 MPI 作业的 QP 数量 |
| RD——可靠数据报 | 是 | 否 | 基本不使用 |
RDMA 操作(READ、WRITE、原子操作)直接在两台主机的应用缓冲区之间搬运数据,无需任一方 CPU 拷贝;SEND/RECEIVE 用于传送消息。内存必须先被注册(锁定并分配密钥),HCA 才能访问它。GPUDirect RDMA 将这一能力扩展到 GPU 内存(GPU 网络)。
流量控制与 MTU
每条链路都运行按虚拟通道划分的基于信用的流量控制:接收方声明缓冲空间,发送方发送的数据永远不超过对方能够接收的量。不会因拥塞而丢帧;相反,反压会向上游传播——这与 Fibre Channel 的信用机制是同样的权衡,也是单条慢速或出错链路会拖慢整个作业的原因。链路 MTU 为 256–4096 字节(典型值 4096);路径 MTU 由端到端协商确定。服务等级(SL)映射到虚拟通道以区分流量类别,自适应路由可以引导流量绕开拥塞链路。
子网管理器
每个子网恰好有一个活动的子网管理器(SM)(其余处于待命状态)。它执行以下工作:
- 通过在网络中发送定向路由管理数据包(VL15/QP0 上的 SMP)来发现拓扑——覆盖每个交换机和 HCA 端口。
- 分配 LID,并配置端口(速率、宽度、MTU、VL 仲裁、PKey)。
- 计算路由——最小跳数、上下(up-down)、胖树、dragonfly+、自适应路由——并将结果编程到每台交换机的线性转发表中。
- 定期以及在收到陷阱通知(端口上/下线)时进行扫描,绕开故障重新路由。
- 运行子网管理代理(SA),为主机的路径查询提供应答。
OpenSM(开源)和厂商的网络管理器(UFM)都实现了这一功能;网络管理器也是全局汇总端口错误、链路速率/宽度协商结果和光模块 DDM 的地方(链路可靠性与监测)。
链路协商
链路启动时,两端会将宽度(1x/2x/4x)和速率(每通道速率)协商到共同支持的最高值。若链路以 2x 或比预期低一代的速率启动,相当于以太网中的“以 10G 而不是 25G 建立链路”:可能是某条通道的光纤或激光器问题、临界电缆,或光模块代际不匹配(速率与速度)。网络管理器会报告协商后的状态;主机上可通过 ibstat / ibportstate 查看。
管理与诊断工具
| 工具 | 用途 |
|---|---|
ibstat、ibstatus | 本地端口状态、速率、宽度、LID |
ibnetdiscover | 拓扑转储 |
ibdiagnet | 全网检查:错误、速率/宽度不匹配、GUID 重复、电缆信息 |
perfquery、ibqueryerrors | 逐端口计数器:符号错误、链路断开、链路恢复、端口接收错误、过量缓冲区溢出、VL15 丢弃、FEC 计数器 |
mlxlink、mlxcables | 逐端口 PHY 详情以及电缆/光模块 EEPROM、DDM、FEC 直方图 |
ibportstate | 强制指定速率/宽度、重置端口 |
符号错误和链路恢复是物理层计数器——相当于以太网的 CRC/FEC,与接收光功率和洁净度相关(网络)。
一段话说清 InfiniBand 与 RoCE 的区别
RoCE v2 在 UDP/IP/以太网之上承载相同的 verbs/RDMA 传输;它用 IP 路由取代子网管理器,用 VLAN 取代 PKey,用 PFC/ECN(DCQCN)取代信用流量控制——而后者必须正确配置才能实现无损(无损以太网、 互连)。光模块在物理上完全相同;不同的只是身份编码和主机策略。
在 CodingBox 中
InfiniBand 模块的读取方式与其他 QSFP/OSFP 相同:身份信息(包括 SFF-8636 字节 164 中的 InfiniBand 速率位,或 CMIS applications 字段)、逐通道 DDM 和校验和,均可在 Check transceiver 和 DDM 中查看。若某端口的协商速率低于额定速率,值得在工作台上读取链路两端的模块。