InfiniBand 专题【左扬精讲】—— InfiniBand 物理层:五层架构与数据包结构入门

InfiniBand 专题【左扬精讲】—— InfiniBand 物理层:五层架构与数据包结构入门

InfiniBand(简称 IB)是一种为 HPC 和 AI 训练集群设计的高速互连网络,相比传统以太网,它能提供 微秒级甚至亚微秒级 的端到端延迟。

本篇是 InfiniBand 架构的入门奠基篇,目标是建立完整的概念框架,为后续理解 RDMA 操作语义、拥塞控制算法打下基础。

本篇不涉及物理层电气特性(SerDes 速率/光模块型号)、QoS 信用计数器机制、子网初始化 FSM 状态机、RDMA verbs 源码分析。阅读本篇前,建议了解以太网 OSI 七层模型(至少知道物理层/链路层/网络层的概念)。

InfiniBand 五层架构
+------------------+
|    上层协议层     |  

InfiniBand 物理层 HCA OFED GUID 五层架构 数据包结构 链路速率

学习重点提示

本文涵盖 InfiniBand 物理层的核心知识,内容深度依次递进。建议读者根据自身背景选择性深入:

  • 必须掌握(面试/工程基准线):
    • InfiniBand 五层架构:理解物理层/链路层/网络层/传输层/上层协议的各自职责,以及为什么 IB 采用分层设计(与以太网 OSI 模型对比,管理层是显式存在而非隐式淹没在 SNMP 里)。
    • 数据包头部结构:LRH(链路层路由头)/ GRH(全局路由头)/ BTH(传输层头)三个头部的功能差异,以及"什么场景下哪个头会出现"——同子网通信只需 LRH+BTH,跨子网需要 LRH+GRH+BTH。
    • HCA 基础:主机通道适配器是连接计算节点与 IB 网络的核心组件,GUID 分配规则(单端口卡 GUID 一致,多端口卡连续递增)。
    • 链路速率体系:链路宽度(1x/4x/8x/12x)与速率分级(EDR/HDR/NDR/XDR)的关系,能计算实际带宽。
  • 需要理解(深度优化/系统设计):
    • 链路训练机制:物理链路建立过程(媒体类型检测/衰减检测)、状态轮询(Polling/Disabled/Link Up/LinkErrorRecovery)。
    • 光纤 vs 铜缆选型:DAC(直接连接铜缆)和 AOC(有源光缆)的物理结构差异、传输距离限制、EMI 抗扰度对比。
    • 误码率 BER:BER = 错误接收比特数 / 总接收比特数,理解信噪比、失真、抖动对信号完整性的影响。
  • 了解即可(进阶专题,可后续深入):
    • 物理层电气规范:SerDes 速率、编码方式、背板连接器热插拔特性。
    • 符号编码与帧结构:起始定界符、数据符号、结束定界符的格式规范。

一、InfiniBand 五层架构总览

What — 五层架构是什么?

InfiniBand 采用分层设计,从下到上依次是:物理层(Physical)链路层(Link)网络层(Network)传输层(Transport)上层协议层(Upper Layer)。每一层都有明确的职责分工和标准化的协议头部。

InfiniBand 与 OSI 七层模型对比
+------------------------+------------------------+
|      上层协议层         |   应用层 / RDMA 操作    |
+------------------------+------------------------+
|      传输层            |      传输层            |
|   (BTH - Base         |  (TCP/UDP)            |
|    Transport Header)   |                        |
+------------------------+------------------------+
|      网络层            |      网络层            |
|   (GRH - Global       |      (IP)             |
|    Routing Header)     |                        |
+------------------------+------------------------+
|      链路层            |      数据链路层        |
|   (LRH - Link         |   (Ethernet MAC)      |
|    Routing Header)     |                        |
+------------------------+------------------------+
|      物理层            |      物理层            |
+------------------------+------------------------+
|      管理平面           |      SNMP(隐式)      |
+------------------------+------------------------+

关键差异:IB 的管理平面是显式存在的(子网管理器 SM),
         而以太网的管理平面隐式淹没在 SNMP 里。

Why — 为什么需要分层设计?

问题一:为什么不能把所有功能塞进一层?

分层设计实现了关注点分离:物理层负责比特同步和信号传输,链路层负责本地帧的正确交付,网络层负责跨子网路由,传输层负责端到端的可靠传输。上层协议层则承载 RDMA 操作语义(如 Send/Recv、RDMA Read/Write)。

问题二:InfiniBand 和以太网的管理差异是什么?

以太网的管理平面是"隐式"的——交换机配置通过 SNMP 或 CLI 下发,但网络本身不依赖管理进程运行。而 InfiniBand 的管理平面是"显式"的:子网管理器 SM(Subnet Manager)是整个网络正常运行的必要条件。没有 SM,IB 网络寸步难行。

没有 SM 会发生什么?

    • LID(本地标识)无法分配,设备之间无法互相寻址
    • 路径信息无法编程,交换机不知道如何转发数据包
    • 设备加入/离开网络时,拓扑变化无法被感知
How — 五层架构对应的硬件与协议

每层都有对应的硬件设备和协议头部:

+----------+------------------+------------------+------------------+
|   层级   |      硬件        |    协议头部      |      职责        |
+----------+------------------+------------------+------------------+
| 物理层   | HCA、交换机端口   |    无            | 比特同步、符号编码 |
| 链路层   | 交换机           | LRH (12 字节)    | 本地帧交付、VL    |
| 网络层   | 路由器           | GRH (40 字节)    | 跨子网路由       |
| 传输层   | HCA              | BTH (12 字节)    | 端到端传输、PSN   |
| 上层协议 | 用户空间         | ETH / IETH       | RDMA 操作语义    |
+----------+------------------+------------------+------------------+

理解这个对应关系后,你可以知道:当 ibtracert 追踪路径时,每一跳交换机处理的是 LRH;跨子网通信时,路由器会检查 GRH;端到端的可靠性由 BTH 中的 PSN(Packet Sequence Number)保证。

本节小结

    • 五层架构:物理层 / 链路层 / 网络层 / 传输层 / 上层协议层,每层职责明确
    • 关键差异:IB 的管理平面是显式的(SM),以太网是隐式的(SNMP)
    • Why 核心:没有 SM,IB 网络无法运行;没有管理进程,以太网仍可通信

二、数据包头部结构:LRH / GRH / BTH

What — 三个头部各自的功能是什么?

  • LRH(Link Routing Header):链路层路由头,12 字节,负责子网内的本地交付。关键字段包括 SL(Service Level)、DLID(Destination LID)、VL(Virtual Lane)。
  • GRH(Global Routing Header):全局路由头,40 字节,用于跨子网通信。关键字段是 SGID(Source GID)和 DGID(Destination GID),GID 基于 IPv6 地址格式。
  • BTH(Base Transport Header):传输层头,12 字节,负责端到端的传输控制。关键字段包括 PSN(Packet Sequence Number,用于可靠性)、Opcode(操作码,区分 Send/Recv/RDMA Read/RDMA Write)。
数据包封装顺序(从上到下,从外到内)
+------------------------------------------+
|              上层数据(Payload)           |
+------------------------------------------+
|         BTH(传输层头,12 字节)            |
|    PSN / Opcode / Dest QP / ...          |
+------------------------------------------+
|         ETH/IETH(扩展传输头,可选)        |
+------------------------------------------+
|         GRH(网络层头,40 字节,仅跨子网)  |
|    SGID(16B) / DGID(16B) / ...           |
+------------------------------------------+
|         LRH(链路层头,12 字节)           |
|    DLID / SL / VL / ...                  |
+------------------------------------------+

场景判断:
+-------------------------------+------------------------+
|           场景                |         头部组合        |
+-------------------------------+------------------------+
| 同子网通信(本地)             | LRH + BTH + Payload    |
| 跨子网通信(全局)            | LRH + GRH + BTH + Payload |
+-------------------------------+------------------------+

Why — 为什么需要这些头部?

问题一:为什么同子网和跨子网需要不同的头部组合?

同子网通信时,交换机只需要根据 LID(Local Identifier) 就能完成转发,LID 是 16 位的本地标识,由子网管理器 SM 分配。跨子网通信时,数据包需要经过路由器,而路由器不认识 LID——它需要 GID(Global Identifier) 来进行路由决策。GID 是 128 位的全局标识,格式兼容 IPv6。

问题二:LRH 中的 VL(Virtual Lane)是什么?

VL 是虚拟通道,用于 QoS 质量服务。不同优先级的流量可以走不同的 VL,避免高优先级流量被低优先级流量阻塞。这与以太网的 PCP/DSCP 字段功能类似,但实现机制不同。

没有这些头部会发生什么?

  • 没有 LRH:交换机无法知道数据包该从哪个端口发出,本地转发失败
  • 没有 GRH:路由器无法判断数据包的源和目的地址,跨子网通信不可能
  • 没有 BTH:端到端的可靠性无法保证,丢包无法检测和重传
How — 头部的关键字段速查

理解每个头部的关键字段,可以帮助你后续排查网络问题:

LRH(链路层路由头,12 字节):
  - DLID(16 bit):目的 LID,交换机据此转发
  - SL(3 bit):Service Level,QoS 优先级
  - VL(4 bit):Virtual Lane,虚拟通道号
  - 长度字段(8 bit):整个数据包的长度

GRH(全局路由头,40 字节):
  - SGID(128 bit):源 GID,基于 EUI-64 格式
  - DGID(128 bit):目的 GID
  - 版本号(4 bit):固定为 6

BTH(传输层头,12 字节):
  - Opcode(8 bit):操作码,0x00=Send, 0x06=RDMA Read Request
  - DestQP(24 bit):目的队列对编号
  - PSN(24 bit):Packet Sequence Number,用于可靠传输

当你使用 ibtracert 追踪路径时,每个交换机打印的其实就是 LRH 中的 DLID。跨子网时,路由器会解析 GRH 中的 DGID。

本节小结

  • LRH:子网内本地交付,依赖 SM 分配的 LID
  • GRH:跨子网全局路由,基于 IPv6 格式的 GID
  • BTH:端到端传输控制,PSN 保证可靠性
  • 场景判断:同子网只需要 LRH+BTH,跨子网才需要 GRH

三、主机通道适配器 HCA

What — HCA 是什么?

主机通道适配器(Host Channel Adapter,简称 HCA)是连接计算节点与 InfiniBand 网络的硬件设备。它相当于以太网卡(NIC)的角色,但专门为 RDMA 设计,支持 CPU 卸载——将传输操作从 CPU 卸载到硬件,降低延迟并释放 CPU 资源。

HCA 在 InfiniBand 网络中的位置
                    +-----------------+
                    |   计算节点      |
                    |  +-----------+  |
                    |  |   应用     |  |
                    |  +-----------+  |
                    |  |  用户空间  |  |
                    |  +-----------+  |
                    |  |   HCA     |  |  

Why — 为什么 HCA 比普通以太网卡更适合 HPC/AI?

问题一:CPU 卸载解决了什么问题?

在传统的 TCP/IP 堆栈中,数据传输需要经过内核协议栈,多次内存拷贝和上下文切换,延迟高且占用大量 CPU 资源。HCA 通过 RDMA(Remote Direct Memory Access) 技术,允许应用直接读写远程内存,无需 CPU 介入,实现零拷贝和低延迟。

问题二:HCA 和 TCA 的区别是什么?

HCA 用于主机端(服务器),TCA(Target Channel Adapter)用于目标端(存储设备)。两者功能类似,但应用场景不同。

没有 HCA 会发生什么?

    • 无法接入 InfiniBand 网络
    • 无法使用 RDMA 功能,延迟会退化为传统 TCP/IP 水平
    • 在大规模 GPU 集群中,GPU 间通信带宽成为瓶颈
How — HCA 的 GUID 分配规则

每张 HCA 卡都有一个全局唯一标识符(GUID),由厂商烧录到硬件中,64 位长度。GUID 分配规则如下:

单端口 HCA:
  - 系统镜像 GUID = 端口 GUID(两者相同)
  - 示例:0x0002c90300002f7b

多端口 HCA:
  - 端口 1 的 GUID = X
  - 端口 2 的 GUID = X + 1
  - 端口 N 的 GUID = X + (N - 1)
  - 示例:端口 1 = 0x0002c90300002f79,端口 2 = 0x0002c90300002f7a

模块化交换机场景:
  - 每个交换机模块有独立的节点 GUID
  - 所有模块共享同一个系统镜像 GUID
  - 示例:6 个模块的机箱有 7 个 GUID(1 个系统 + 6 个节点)

理解 GUID 分配规则,可以帮助你解读 ibhosts 命令的输出,识别多端口设备。

本节小结

    • HCA 定义:连接计算节点与 IB 网络的硬件,等效于以太网卡但支持 RDMA
    • 核心优势:CPU 卸载 + 低延迟 + 高带宽
    • GUID 规则:单端口卡 GUID 一致,多端口卡连续递增

四、链路速率与物理连接器

What — 链路速率是如何计算的?

InfiniBand 的链路速率由两个因素决定:链路速度(每条通道的速率)和 链路宽度(通道数量)。公式为:链路速率 = 链路速度 x 链路宽度

链路宽度类型(每条通道 = 4 线串行差分)
+----------+------------------------+
|  宽度     |        通道数          |
+----------+------------------------+
|  1x      |    1 条通道 (4 线)     |
|  4x      |    4 条通道 (16 线)    |
|  8x      |    8 条通道 (32 线)    |
|  12x     |   12 条通道 (48 线)    |
+----------+------------------------+

速率分级(单通道速度)
+----------+---------------+----------------+
|   代际   |  单通道速度    | 4x 带宽         |
+----------+---------------+----------------+
| EDR      |  25 Gbps      |  100 Gbps      |
| HDR      |  50 Gbps      |  200 Gbps      |
| NDR      | 100 Gbps      |  400 Gbps      |
| XDR      | 200 Gbps      |  800 Gbps      |
+----------+---------------+----------------+

Why — 为什么需要多种链路宽度?

问题一:4x 比 1x 有什么优势?

更宽的链路提供更高的聚合带宽,但成本也更高。在实际部署中,交换机间的骨干链路通常使用 4x 或更宽,而服务器到交换机的接入链路可以使用 1x 以降低成本。

问题二:EDR/HDR/NDR/XDR 有什么区别?

这是 InfiniBand 的几代速率标准,反映了物理层技术的进步。每一代都在单通道速度和编码效率上有所提升。

没有速率标准会发生什么?

    • 不同厂商的设备无法互联互通
    • 网络升级时需要整体替换,无法平滑演进
    • 性能评估缺乏统一基准
How — 物理连接器类型

InfiniBand 支持多种物理连接器,根据传输距离和成本选择:

铜缆(DAC - Direct Attach Copper)
  - 结构:每条通道 2 根 TX + 2 根 RX,共 16 根导线(4x 配置)
  - 优点:成本低,功耗低
  - 缺点:传输距离短(EDR ≤ 5m,HDR ≤ 2m,NDR ≤ 4m)
  - 典型场景:机柜内服务器到交换机

光纤(AOC - Active Optical Cable)
  - 结构:每条通道 1 根接收光纤 + 1 根发送光纤,共 8 根(4x 配置)
  - 优点:传输距离长(可达 100-300m),无 EMI 干扰
  - 缺点:成本高于铜缆
  - 典型场景:跨机柜、跨行连接

背板连接器
  - 用于刀片服务器内部
  - 支持热插拔

选择连接器时,需要综合考虑:传输距离需求、网络解决方案成本、部署简易性。

本节小结

    • 链路宽度:1x/4x/8x/12x,宽度越大带宽越高
    • 速率分级:EDR(25G) / HDR(50G) / NDR(100G) / XDR(200G)
    • 连接器选择:短距离用 DAC,长距离用 AOC

五、光纤 vs 铜缆选型指南

What — 铜缆和光纤的核心差异是什么?

    • 铜缆(DAC)使用电信号传输,导体是铜线
    • 光纤(AOC)使用光信号传输,导体是石英玻璃

两者在传输距离、带宽、抗干扰性、成本等方面有显著差异。

对比维度铜缆(DAC)光纤(AOC)
传输距离 EDR ≤ 5m,HDR ≤ 2m,NDR ≤ 4m 可达 100-300m
带宽 相对较低 光纤带宽是铜缆的 1000 倍以上
直径 光纤的 4 倍 约等于人类头发粗细
EMI 抗扰 易受电磁干扰 完全免疫 EMI/RFI
安全 传输电力,可能导致短路 不导电,无射频泄漏
成本 较低 较高(需要激光系统)
典型场景 机柜内 跨机柜、跨行

Why — 为什么光纤在大规模集群中更受欢迎?

问题一:AI 训练集群为什么需要光纤?

在大规模 AI/HPC 集群中,服务器之间的互联距离往往超过铜缆的限制。InfiniBand 支持高达 400Gbps(NDR 4x)的聚合带宽,跨机柜、跨行部署时必须使用 AOC 光纤,否则距离限制会导致无法组网。DAC 铜缆仅适用于机柜内的服务器到交换机短距离连接。

问题二:铜缆的 EMI 问题有多严重?

在数据中心环境中,大量铜缆并行会产生电磁场相互干扰。此外,铜缆可能吸收附近高功率发射器的能量,导致数据干扰甚至过热。

没有正确选型会发生什么?

    • 铜缆用于长距离:信号衰减严重,BER 飙升
    • 密集部署铜缆:EMI 干扰导致间歇性通信故障
    • 光纤用于短距离:成本浪费,不必要的支出

选型决策树

    • 传输距离 ≤ 5m? → 优先考虑 DAC(成本低、功耗低)
    • 传输距离 > 5m? → 必须使用 AOC
    • 高密度部署? → 优先考虑光纤(节省空间、改善气流)
    • 预算敏感? → 评估综合成本(线缆成本 + 维护成本 + 故障成本)

本节小结

    • 距离决定:短距离用 DAC,长距离用 AOC
    • 密度优先:高密度场景优先选光纤
    • 综合评估:考虑距离、成本、维护、可靠性

六、物理层职责:链路管理与信号完整性

What — 物理层的四大职责是什么?

    • 建立物理链路:链路训练检测媒体类型、衰减和速度
    • 监控链路状态:定期轮询检测链路是否正常
    • 通知链路层:将链路状态变化上报给上层
    • 保证信号完整性:通过 BER(误码率)监控质量
链路状态机(物理层到链路层的状态转换)
+---------------------+
|      Polling        |  

Why — 为什么需要链路训练?

问题一:链路训练解决了什么问题?

当主机适配器和交换机端口之间连接物理电缆时,两端需要协商确定:媒体类型(光纤/铜缆)、衰减程度、物理通道速度。这些参数直接影响信号完整性。链路训练通过握手过程完成协商,确保双方工作在最优参数下。

问题二:BER(Bit Error Rate)为什么重要?

BER 是衡量数字传输系统质量的关键指标。InfiniBand 的 BER 目标值非常低(约 10^-12),因为任何误码都会导致 RDMA 操作失败。

BER 计算公式:BER = 错误接收比特数 / 总接收比特数

没有链路监控会发生什么?

    • 链路故障无法被及时发现,导致通信超时
    • 误码累积导致数据损坏,RDMA 操作返回错误
    • 网络拥塞无法被感知,QoS 机制失效
How — 使用 ibstat 诊断链路状态

ibstat 是 OFED 工具集中最常用的诊断命令,可以查看 HCA 状态和端口信息:

# 查看 HCA 状态和端口信息
$ ibstat

# 示例输出解读
CA type: MT2893 Family
Number of ports: 2
Port 1:
  State: Active                              # 链路状态
  Physical state: LinkUp                     # 物理状态
  Rate: 100                                  # 实际速率 (Gbps)
  Width: 4x                                  # 链路宽度
  Base lid: 1                                # 分配的 LID
  LMC: 0
  SM lid: 1                                  # 子网管理器 SM 的 LID
  Capmask: 0x20000000
  GID[  0]: fe80:0000:0000:0000:0002:c903:0000:2f79  # 本地 GID

关键字段:State=Active 表示链路正常,Physical state=LinkUp 表示物理连接就绪。如果 State=Polling,说明电缆未连接;如果 State=Disabled,说明端口被手动禁用。

本节小结

    • 链路训练:协商媒体类型、衰减、速度
    • 状态监控:Polling / Disabled / LinkUp / LinkErrorRecovery
    • BER 公式:错误比特 / 总比特
    • 诊断工具:ibstat 查看链路状态

七、GUID 体系:三层地址详解

What — 为什么需要三层地址?

InfiniBand 采用三层地址体系:GUID / LID / GID,每层地址有不同的作用范围和用途。这种设计是为了在保持唯一性的同时,实现高效的本地和全局路由。

三层地址体系对比
+----------+--------+------------------+------------------------+
|  地址类型 |  长度  |    分配方式       |        用途            |
+----------+--------+------------------+------------------------+
| GUID     | 64 bit | 厂商烧录(固定)  | 设备唯一标识(不可路由)|
| LID      | 16 bit | SM 动态分配      | 子网内本地路由         |
| GID      |128 bit | SM 基于 GUID 生成 | 跨子网全局路由(IPv6) |
+----------+--------+------------------+------------------------+

地址转换流程
厂商烧录 GUID
      |
      v
设备上电,SM 初始化
      |
      v
SM 分配 LID(基于 GUID)
      |
      v
SM 生成 GID(64bit prefix + 64bit EUI-64)
      |
      v
通信时使用 LID(同子网)或 GID(跨子网)

GID 与 IPv6 的关系:
- GID 基于 IPv6 地址格式
- 前 64 位是子网前缀(由 SM 配置)
- 后 64 位是 EUI-64(由 GUID 转换而来)
- EUI-64 转换:GUID 前 24 位 + FFFE + GUID 后 40 位

Why — 为什么需要三层地址而不是只用一种?

问题一:GUID 为什么不能直接用于路由?

GUID 是 64 位,厂商烧录后固定不变。虽然唯一性保证了每个设备可识别,但它不适合路由:没有层次结构,全局广播开销大。如果全网用 GUID 路由,每个交换机都需要维护数百万条条目。

问题二:LID 为什么不能跨子网?

LID 是 16 位,由 SM 在子网内分配。但不同子网的 SM 独立运行,可能分配相同的 LID。如果跨子网使用 LID,路由器无法区分"子网 A 的 LID 5"和"子网 B 的 LID 5"。

问题三:GID 如何解决跨子网问题?

GID 的前 64 位是子网前缀(Subnet Prefix),由 SM 配置。路由器可以根据子网前缀判断数据包属于哪个子网,实现正确的路由决策。

没有分层地址会发生什么?

    • 没有 GUID:设备无法唯一标识,克隆设备会冲突
    • 没有 LID:子网内无法高效路由
    • 没有 GID:跨子网通信不可能

三层地址的协作流程

设备通信时,源和目的地址的选择取决于通信范围:

    • 同子网通信:源地址用源 LID,目的地址用目的 LID(交换机只需解析 LRH)
    • 跨子网通信:源地址用源 GID,目的地址用目的 GID(路由器需要解析 GRH)
    • 工具输出:ibstat 显示 LID 和 GID,ibping 使用 LID 测试连通性

本节小结

    • GUID:64 位,厂商烧录,设备唯一标识,不可路由
    • LID:16 位,SM 分配,子网内高效路由
    • GID:128 位,SM 生成,兼容 IPv6,支持跨子网
    • 协作原则:同子网用 LID,跨子网用 GID

八、OFED 工具集实战

What — OFED 是什么?

OFED(OpenFabrics Enterprise Distribution)是 Mellanox/NVIDIA 提供的一套开源软件栈,包含驱动、协议栈和管理工具。它支持 RDMA 和内核旁路应用,为 HPC 站点和企业数据中心提供灵活的高速互连解决方案。

OFED 核心命令速查表
+------------------+------------------------------------------+
|     命令         |            功能                          |
+------------------+------------------------------------------+
| ibstat           | 查看 HCA 状态和端口信息(LID/GID/State) |
| ibping           | 测试子网内连通性(使用 LID)             |
| ibtracert        | 追踪数据包路径(逐跳显示 LID)           |
| ibportstate      | 查询逻辑和物理端口状态                   |
| ibswitches       | 列出子网内所有交换机                     |
| ibhosts          | 列出子网内所有 HCA                       |
| ibnodes          | 整合视图(交换机+HCA)                   |
+------------------+------------------------------------------+

ibswitches 示例输出:
# ibswitches
Switch : 0x0002c90200001a2c ports 36 "Voltaire 4036"
Switch : 0x0002c90200001b3d ports 36 "Voltaire 4036"
Switch : 0x0002c90200001c4e ports 36 "Voltaire 4036"
Switch : 0x0002c90200001d5f ports 36 "Voltaire 4036"

ibhosts 示例输出:
# ibhosts
Ca : 0x0002c90300002f78 ports 2 "mt2893 Family HCA"
Ca : 0x0002c9030000308b ports 1 "mt2893 Family HCA"

Why — 为什么需要 OFED 工具集?

问题一:ibping 和普通 ping 有什么区别?

普通 ping 使用 ICMP 协议,经过操作系统的网络协议栈。

ibping 使用 InfiniBand 传输层,直接通过 HCA 硬件发送数据包,延迟更低,更能反映 RDMA 通信的真实性能。

问题二:ibtracert 和 traceroute 有什么区别?

traceroute 使用 TTL 机制探测 IP 路由路径。ibtracert 通过追踪 PSN(Packet Sequence Number)显示 IB 数据包经过的每一跳交换机,返回每一跳的 LID。

没有 OFED 工具会发生什么?

    • 无法诊断 IB 网络故障
    • 无法验证 SM 是否成功分配 LID
    • 无法排查丢包、路径问题
How — 实战诊断流程

当 IB 网络出现故障时,推荐的排查顺序:

# 第 1 步:检查 HCA 状态
$ ibstat
# 确认 State=Active, Physical state=LinkUp, Rate=预期值

# 第 2 步:检查端口状态
$ ibportstate 1  # 查询端口 1 的详细状态
# 确认链路速度、宽度、扩展链路速度

# 第 3 步:发现子网节点
$ ibswitches   # 列出所有交换机
$ ibhosts      # 列出所有 HCA
$ ibnodes      # 整合视图

# 第 4 步:测试连通性
$ ibping -L 5 -C 1  # 向 LID=5 的节点发送 5 次 ping
# 确认能收到响应

# 第 5 步:追踪路径
$ ibtracert -G 0xfe800000000000000002c90300002f79  # 使用 GID 追踪

通过这个流程,你可以快速定位故障点:HCA 故障、链路速率不匹配、交换机配置问题、还是 SM 未正确分配 LID。

本节小结

    • OFED 定义:Mellanox/NVIDIA 提供的 IB 软件栈
    • 核心工具:ibstat / ibping / ibtracert / ibswitches / ibhosts
    • 诊断价值:验证 LID 分配、测试连通性、追踪路径

FAQ(20 组)

以下是关于 InfiniBand 物理层的常见问题,每个问题都附有一句话结论和详细展开。

Q1. InfiniBand 和以太网的核心区别是什么?

一句话结论:IB 是"管理先行"的高速网络,以太网是"尽力而为"的通用网络。InfiniBand 的子网管理器 SM 是网络正常运行的必要条件,交换机配置丢失时网络完全瘫痪。而以太网即使没有 SNMP 管理,物理链路仍可通信。IB 的端到端延迟可达亚微秒级,以太网TCP/IP通常在几十到几百微秒。

Q2. 为什么 InfiniBand 采用五层架构而不是七层?

一句话结论:IB 的分层更精简,合并了 OSI 模型中重复的功能。例如,IB 的链路层同时承担了 OSI 数据链路层和网络层的部分功能(本地路由通过 LID 实现),避免重复解析。管理层在 IB 中是显式的(SM),而以太网中隐式淹没在 SNMP 里。

Q3. LRH 和 GRH 的区别是什么?

一句话结论:LRH 用于子网内本地路由,GRH 用于跨子网全局路由。同子网通信时,交换机只解析 LRH 中的 DLID(16 位本地标识)。跨子网通信时,路由器必须解析 GRH 中的 DGID(128 位全局标识,基于 IPv6 格式)。

Q4. HCA 和网卡(NIC)有什么本质区别?

一句话结论:HCA 支持 RDMA(CPU 卸载),普通网卡不支持。HCA 可以在没有 CPU 参与的情况下,直接读写远程内存。普通网卡的数据传输必须经过内核协议栈,多次内存拷贝和上下文切换导致高延迟。

Q5. 为什么 HCA 需要 GUID/LID/GID 三层地址?

一句话结论:三层地址在不同场景下各有优势,实现唯一性+高效路由的平衡。GUID 是厂商烧录的固定标识,用于设备识别但不可路由。LID 是 SM 分配的 16 位本地标识,高效但仅限子网内。GID 是 128 位的全局标识,兼容 IPv6,支持跨子网路由。

Q6. ibping 和 ping 的区别是什么?

一句话结论:ibping 通过 HCA 硬件发送数据包,延迟更低。普通 ping 使用 ICMP 协议,经过操作系统的 TCP/IP 协议栈。ibping 直接通过 InfiniBand 传输层,不经过内核,更能反映 RDMA 通信的真实性能。

Q7. 链路宽度 1x/4x/8x/12x 是什么意思?

一句话结论:链路宽度指并行通道数量,宽度越大带宽越高。每条通道是 4 线串行差分连接(2 根 TX + 2 根 RX)。4x 配置有 4 条通道,共 16 根导线。带宽计算公式:链路速率 = 单通道速度 x 通道数。例如 HDR 4x = 50Gbps x 4 = 200Gbps。

Q8. EDR/HDR/NDR/XDR 代表什么?

一句话结论:这是 InfiniBand 的几代速率标准,反映物理层技术的进步。EDR(Enhanced Data Rate)单通道 25Gbps;HDR(High Data Rate)单通道 50Gbps;NDR(Next Data Rate)单通道 100Gbps;XDR(Extreme Data Rate)单通道 200Gbps。

Q9. DAC 和 AOC 的区别是什么?

一句话结论:DAC 是铜缆(短距离、低成本),AOC 是光纤(长距离、高带宽)。DAC(Direct Attach Copper)使用电信号,EDR 最大 5m,HDR 最大 2m。AOC(Active Optical Cable)使用光信号,可达 100-300m。光纤完全免疫 EMI,但成本更高。

Q10. 为什么 AI 训练集群优先使用 InfiniBand?

一句话结论:IB 的低延迟和高带宽是 GPU 集群通信的关键需求。现代 AI 训练需要大量 GPU 同步通信(如 AllReduce 操作)。IB 的亚微秒级延迟和 200-400Gbps 带宽,可以避免 GPU 等待网络 I/O,成为 GPU 集群互联的事实标准。

Q11. 链路训练(Link Training)是什么?

一句话结论:链路训练是两端设备协商最优参数的过程。当 HCA 和交换机端口连接后,双方会交换信号,检测媒体类型(光纤/铜缆)、衰减程度、物理通道速度。协商完成后,链路状态从 Polling 变为 LinkUp。

Q12. BER(Bit Error Rate)是什么?为什么重要?

一句话结论:BER 是误码率,用于衡量信号传输质量。计算公式:BER = 错误接收比特数 / 总接收比特数。InfiniBand 的 BER 目标值约 10^-12。BER 过高会导致 RDMA 操作失败,数据包需要重传。

Q13. 为什么光纤比铜缆更适合高密度部署?

一句话结论:光纤直径小、不导电、免疫力强,节省空间并改善数据中心气流。光纤直径约等于头发粗细,铜缆是其 4 倍。高密度环境下,光纤可以大幅减少线缆占用的空间,改善冷却气流的循环效率。

Q14. Virtual Lane(VL)是什么?

一句话结论:VL 是虚拟通道,用于 QoS 质量服务。不同优先级的流量可以走不同的 VL,避免高优先级流量被阻塞。VL 字段在 LRH 中,共 4 位,可以支持 16 个虚拟通道。

Q15. PSN(Packet Sequence Number)的作用是什么?

一句话结论:PSN 用于可靠传输,检测丢包并触发重传。PSN 是 BTH(传输层头)中的 24 位字段。每个发送的包都有唯一的 PSN,接收端根据 PSN 判断是否有丢包。如果 PSN 不连续,说明有包丢失,需要重传。

Q16. 为什么 GID 格式兼容 IPv6?

一句话结论:IB 诞生时 IPv6 正在兴起,GID 格式可以与 IPv6 网络无缝集成。GID 的前 64 位是子网前缀(Subnet Prefix),后 64 位是 EUI-64(由 GUID 转换)。这种设计允许 IB 网络通过路由器与纯 IPv6 网络互通。

Q17. SM(子网管理器)为什么不可或缺?

一句话结论:没有 SM,IB 网络寸步难行——LID 无法分配,路由无法建立。SM 负责初始化网络拓扑、分配 LID、编程交换机路由表、监控链路健康。设备加入/离开网络时,SM 需要重新计算拓扑。

Q18. 如何判断同子网通信和跨子网通信?

一句话结论:看是否需要 GRH 头部——同子网只需要 LRH+BTH,跨子网需要 LRH+GRH+BTH。同子网通信时,交换机根据 LRH 中的 DLID(本地标识)转发。跨子网通信时,路由器必须解析 GRH 中的 DGID(全局标识,基于 IPv6 格式)。

Q19. ibtracert 和 traceroute 有什么区别?

一句话结论:traceroute 探测 IP 路由路径,ibtracert 追踪 IB 数据包的 PSN 路径。traceroute 使用 TTL 递减机制,每一跳返回 IP 地址。ibtracert 通过追踪 PSN(Packet Sequence Number),显示数据包经过的每一跳交换机的 LID,返回的是 IB 网络拓扑信息。

Q20. 为什么 InfiniBand 延迟比以太网低?

一句话结论:端到端无交换机 arbitration 争用 + 传输层硬件卸载。IB 采用 cut-through 转发模式,交换机在收到完整头部后立即转发,无需存储转发延迟。RDMA 操作在 HCA 硬件上执行,不经过内核协议栈,避免了上下文切换和内存拷贝的开销。

全篇总纲

本篇围绕 InfiniBand 物理层 建立了完整的概念框架:

  • 五层架构:物理层/链路层/网络层/传输层/上层协议层,每层职责明确,管理层是显式存在
  • 数据包结构:LRH(本地路由)、GRH(全局路由)、BTH(传输控制),场景决定头部组合
  • HCA 基础:连接计算节点与 IB 网络的核心硬件,支持 RDMA CPU 卸载
  • 链路速率:链路宽度 x 速率分级,理解带宽计算公式
  • 三层地址:GUID(固定标识)、LID(本地路由)、GID(全局路由),协作支撑 IB 网络
  • OFED 工具:ibstat/ibping/ibtracert 是排查 IB 网络故障的利器

学完本篇后,你能看懂 ibstat / ibping / ibtracert 的输出,能回答"InfiniBand 为什么比以太网延迟低"——答案是"端到端无交换机 arbitration 争用 + 传输层硬件卸载"。


Roadmap 预告

后续延伸学习路径

本篇是 InfiniBand 架构的入门奠基篇,后续内容将依次深入:

  • 物理层信号完整性:深入理解 BER、符号编码、帧同步
  • 链路层架构:VL 机制、QoS 信用计数器、流控原理
  • 子网初始化流程:SM 选举机制、LID 分配算法、路径编程
  • 传输层语义:RDMA Read/Write/Send/Recv 操作语义
  • 拥塞控制算法:PFC(Priority Flow Control)、ECN 机制

建议读者在掌握本篇内容后,继续学习链路层和子网初始化,这将为你理解 RDMA 操作语义打下坚实基础。

posted @ 2026-08-04 16:05  左扬  阅读(13)  评论(0)    收藏  举报