2. InfiniBand 协议栈与分层模型

InfiniBand(IB)不是“更快的以太网”,而是一套从物理介质到上层语义完整定义的互连体系。理解 IB 的关键,是把它看成分层协议栈:每一层只解决一类问题,层与层之间通过明确的接口传递数据单元。只有把分层职责与封装关系看清楚,才能理解后面要讲的子网管理、拥塞控制、RDMA 语义以及 IB 与 RoCE 的边界。

五层职责:从比特到消息

IB 协议栈自上而下通常划分为五层,各层职责如下。

  • 上层协议(ULP):面向应用与中间件,如 MPI、NFS over RDMA、NVMe-oF、SMB Direct。它决定“传什么语义”,例如消息、块、文件操作。
  • 传输层:负责端到端可靠传输,定义队列对(QP)、服务类型(RC/UC/UD)、消息分片与重组、序列号、确认与重传、RDMA 读写原子操作语义。
  • 网络层:负责跨子网寻址与路由,使用全局路由头 GRH,包含 128 位 GID(类似 IP 地址)与 64 位 GUID,支持子网间转发。
  • 链路层:负责单跳(一跳链路)内的可靠交付,包括本地路由头 LRH、链路级流控、CRC 校验、虚拟通道(VL)仲裁、链路状态机与子网内转发。
  • 物理层:定义电气/光信号、编码、速率与介质,如 SDR/DDR/QDR/FDR/EDR/HDR/NDR,以及铜缆、AOC、光模块和连接器形态。

需要特别区分两个“地址”概念:链路层用 16 位 LID 在子网内寻址,网络层用 128 位 GID 跨子网寻址。同一子网内通信通常只需 LRH;跨子网时才需要 GRH。这是 IB 与以太网在寻址模型上最本质的差异之一。

封装关系与数据流

发送端自上而下逐层加头,接收端自下而上逐层剥头。以一次 RC 连接的 RDMA Write 为例:应用提交工作请求(WR)到发送队列,传输层把消息切分为若干包,为每个包加上 BTH(基传输头)等传输头;网络层在需要跨子网时加 GRH;链路层加 LRH 并计算链路 CRC;物理层完成编码后发出。接收端逐层校验、重组,最终把数据直接写入远端注册内存,全程不打扰远端 CPU。

InfiniBand 分层模型与封装/解封装数据流 发送端(自上而下加头) 上层协议 ULP MPI / NVMe-oF / NFS-RDMA 传输层 Transport QP / RC·UC·UD / 分片重组 网络层 Network GRH / GID 128bit / 跨子网路由 链路层 Link LRH / LID 16bit / VL / CRC 物理层 Physical SDR…NDR / 铜缆·AOC·光模块 封装 Encapsulation 物理链路 / 交换网络 交换机按 LRH·DLID 转发 逐跳 CRC 校验与流控 跨子网时由路由器查 GRH·GID 接收端(自下而上剥头) 物理层 Physical 信号恢复 / 解码 链路层 Link CRC 校验 / 去 LRH 网络层 Network 去 GRH / 校验 GID 传输层 Transport 序列号 / 重组 / 确认 上层协议 ULP 数据直接写入注册内存 解封装 Decapsulation 典型 RC 数据包封装结构(自左向右) LRH GRH(可选) BTH RETH/ETH Payload 数据 ICRC VCRC LRH 用于子网内逐跳转发;GRH 仅在跨子网时出现;ICRC 保护端到端,VCRC 保护逐跳链路

IB 与以太网、RoCE 的差异与边界

以太网是“尽力而为”的分组网络,链路层用 MAC 地址,网络层用 IP,传输层用 TCP/UDP,可靠性主要靠上层协议保证。RoCE(RDMA over Converged Ethernet)把 IB 的传输层语义搬到以太网上:它保留 IB 的 Verbs 接口与 RDMA 操作,但底层承载改为以太网/IP/UDP(RoCEv2)。因此 RoCE 能复用现有以太网生态与运维体系,但需要无损以太网(PFC、ECN)来避免丢包导致的重传与性能塌陷。

对比维度InfiniBandRoCEv2传统以太网 TCP
链路层可靠性链路级 CRC 与流控,天然可靠依赖以太网,需 PFC/ECN 构建无损尽力而为,靠 TCP 重传
寻址LID(子网内)+ GID(跨子网)MAC + IP + UDPMAC + IP
拥塞控制基于信用的链路流控 + 拥塞控制ECN + DCQCNTCP 拥塞窗口
典型时延亚微秒级微秒级数十微秒以上
运维与生态专用子网管理器与工具链复用以太网运维通用成熟

选择边界可以这样判断:如果追求极致低时延、大规模 GPU 集群的 AllReduce 与 SHARP 集合通信,且能接受专用网络与运维投入,IB 是首选;如果已有成熟以太网、需要与业务网融合、预算与运维受限,RoCEv2 更合适;如果只是普通业务互联、对时延不敏感,传统以太网 TCP 足够。三者不是替代关系,而是按性能、成本、运维复杂度做权衡。

记忆要点:IB 的“可靠”是链路层与传输层共同保证的;RoCE 的“可靠”是把 IB 传输层架在以太网上,因此以太网的无损能力直接决定 RoCE 的成败。

分层视角下的排障思路

掌握分层模型后,排障可以按层定位。物理层看链路速率与误码,用 ibstat 查看端口状态与速率;链路层看 LID 分配与链路状态,用 iblinkinfo 检查链路宽度与对端;网络层看 GID 与路由,用 ibaddr、ibtracert 确认路径;传输层看 QP 状态与重传计数,用 perfquery 观察 PortXmitDiscards、PortRcvErrors 等计数器;上层则结合 MPI 或应用日志判断语义是否正确。按层排查能避免“一上来就怀疑应用”的盲目性。

# 示例:查看本机 IB 端口状态与速率(示例输出,非实测)
$ ibstat mlx5_0
CA 'mlx5_0'
  CA type: MT4123
  Number of ports: 1
  Port 1:
    State: Active
    Physical state: LinkUp
    Rate: 200          # 200 Gb/s (HDR)
    Base lid: 12
    LMC: 0
    SM lid: 1
    Port GUID: 0x248a070300a1b2c3

这段输出里,State: Active 表示链路层已激活,Rate: 200 表示物理层协商到 HDR 速率,Base lid: 12 是链路层子网内地址,SM lid: 1 指向子网管理器。若 State 长期为 Down 或 Init,应先查物理层与链路层,而不是直接怀疑传输层或应用。

把五层职责、封装关系与 IB/RoCE/以太网的边界放在一起看,后续的子网管理、拥塞控制、RDMA 编程与性能调优才有清晰的落点:每一类问题都能对应到某一层,每一种优化也都能说清它作用在哪一层。