原力注入

InfiniBand 网络理论与实践

InfiniBand 网络理论与实践

Image

术语定义

在深入了解 InfiniBand 技术之前,我们先列举一些关键术语:

术语
英文全称
中文含义
说明
IB
InfiniBand
无限带宽
高性能计算网络架构标准
RDMA
Remote Direct Memory Access
远程直接内存访问
绕过 CPU 直接访问远程内存的技术
HCA
Host Channel Adapter
主机通道适配器
InfiniBand 网卡的正式名称
SM
Subnet Manager
子网管理器
管理 IB 子网拓扑和路由的软件
QP
Queue Pair
队列对
IB 通信的基本单元,包含发送和接收队列
VL
Virtual Lane
虚拟通道
在物理链路上创建的逻辑通道
SL
Service Level
服务级别
用于 QoS 和路由的流量分类
P_Key
Partition Key
分区密钥
用于网络分区和安全隔离
LID
Local Identifier
本地标识符
子网内设备的唯一地址
GUID
Globally Unique Identifier
全局唯一标识符
设备的全球唯一标识
MTU
Maximum Transmission Unit
最大传输单元
单次传输的最大数据包大小
FEC
Forward Error Correction
前向纠错
自动检测和纠正传输错误的技术
RoCE
RDMA over Converged Ethernet
融合以太网上的 RDMA
在以太网上实现 RDMA 的技术
OFED
OpenFabrics Enterprise Distribution
开放架构企业发行版
InfiniBand 和 RDMA 的开源软件栈

目录

  • • InfiniBand 网络理论与实践
    • • 术语定义
    • • 目录
    • • 1. InfiniBand 原理
      • • 1.1 InfiniBand 概述
      • • 1.2 核心技术特性
        • • 1.2.1 性能指标
        • • 1.2.2 带宽演进历史
      • • 1.3 架构原理
        • • 1.3.1 InfiniBand 分层协议模型
        • • 1.3.2 RDMA 技术
        • • 1.3.3 虚拟通道 (Virtual Lanes)
      • • 1.4 网络拓扑
        • • 1.4.1 支持的拓扑结构
        • • 1.4.2 子网管理
      • • 1.5 与以太网和 RoCE 的对比
      • • 1.6 高可用与容错机制
    • • 2. InfiniBand 网卡
      • • 2.1 主要厂商和产品
        • • 2.1.1 NVIDIA (原 Mellanox)
        • • 2.1.2 Intel
        • • 2.1.3 其他厂商
      • • 2.2 网卡架构
        • • 2.2.1 硬件组件
        • • 2.2.2 软件栈
      • • 2.3 VPI 技术
        • • 2.3.1 Virtual Protocol Interconnect
        • • 2.3.2 协议切换
      • • 2.4 性能特性
        • • 2.4.1 延迟优化
        • • 2.4.2 带宽优化
    • • 3. InfiniBand 网卡配置
      • • 3.1 驱动程序安装
        • • 3.1.1 Ubuntu/Debian 系统
        • • 3.1.2 CentOS/RHEL 系统
      • • 3.2 网络接口配置
        • • 3.2.1 IPoIB 配置
        • • 3.2.2 RoCE 配置
      • • 3.3 性能优化配置
        • • 3.3.1 系统参数优化
        • • 3.3.2 CPU 亲和性配置
        • • 3.3.3 内存大页配置
      • • 3.4 安全配置
        • • 3.4.1 防火墙配置
        • • 3.4.2 访问控制
    • • 4. InfiniBand 网卡相关命令
      • • 4.1 基础诊断命令
        • • 4.1.1 设备发现和状态查询
        • • 4.1.2 网络拓扑发现
        • • 4.1.3 连通性测试
      • • 4.2 性能监控命令
        • • 4.2.1 性能计数器
        • • 4.2.2 错误检查
        • • 4.2.3 链路状态和性能分析
      • • 4.3 配置管理命令
        • • 4.3.1 子网管理
        • • 4.3.2 虚拟化配置
        • • 4.3.3 固件管理
      • • 4.4 性能测试工具详解
        • • 4.4.1 带宽测试 (ib_write_bw)
        • • 4.4.2 延迟测试 (ib_send_lat)
        • • 4.4.3 RDMA 性能测试
        • • 4.4.4 多连接并发测试
        • • 4.4.5 性能基准和调优建议
      • • 4.5 故障排查命令
        • • 4.5.1 诊断脚本
        • • 4.5.2 日志分析
    • • 5. GPU 场景下 InfiniBand 网卡检查和测试
      • • 5.1 GPU 与 InfiniBand 集成
        • • 5.1.1 GPUDirect RDMA
        • • 5.1.2 系统要求
      • • 5.2 环境检查和配置
        • • 5.2.1 GPU 环境检查
        • • 5.2.2 NCCL 环境配置
        • • 5.2.3 自动化检查脚本
      • • 5.3 性能测试
        • • 5.3.1 基础性能测试
        • • 5.3.2 NCCL 性能测试
        • • 5.3.3 自定义 NCCL 测试脚本
      • • 5.4 故障排查
        • • 5.4.1 常见问题和解决方案
        • • 5.4.2 性能调优建议
      • • 5.5 监控和维护
        • • 5.5.1 实时监控脚本
        • • 5.5.2 定期健康检查
    • • 6. 总结
      • • 6.1 关键要点
      • • 6.2 最佳实践建议
    • • 7. 推荐参考资料
      • • 7.1 官方文档和标准
      • • 7.2 开源社区资源
      • • 7.3 技术白皮书和研究论文
      • • 7.4 实用工具和脚本
      • • 7.5 培训和认证
      • • 7.6 社区支持

1. InfiniBand 原理

1.1 InfiniBand 概述

InfiniBand (IB) 是一种高性能、低延迟的网络互连技术,专为高性能计算 (HPC)、数据中心和企业级应用设计。InfiniBand 架构由 InfiniBand Trade Association (IBTA) 标准化,提供了比传统以太网更优越的性能特性。

1.2 核心技术特性

1.2.1 性能指标

根据 IBTA 规范,InfiniBand 提供以下性能特性:

  • • 高带宽: 支持从 2.5 Gbps (SDR) 到 600 Gbps (NDR) 的数据传输速率
  • • 超低延迟: 端到端延迟低至 0.5 微秒
  • • 高可靠性: 硬件级别的错误检测和纠正机制
  • • 可扩展性: 支持数万个节点的大规模集群部署

1.2.2 带宽演进历史

标准
单通道速率
x4 链路速率
有效带宽 (x4)
发布年份
编码效率
SDR
2.5 Gbps
10 Gbps
8 Gbps
2001
8b/10b
DDR
5 Gbps
20 Gbps
16 Gbps
2005
8b/10b
QDR
10 Gbps
40 Gbps
32 Gbps
2007
8b/10b
FDR
14.0625 Gbps
56.25 Gbps
54.54 Gbps
2011
64b/66b
EDR
25.78125 Gbps
103.125 Gbps
100 Gbps
2014
64b/66b
HDR
53.125 Gbps
212.5 Gbps
200 Gbps
2018
64b/66b
NDR
106.25 Gbps
425 Gbps
400 Gbps
2022
64b/66b
XDR
265.625 Gbps
1062.5 Gbps
1000 Gbps
2024+
64b/66b

说明:

  • • 单通道速率: 每个物理通道的原始数据速率
  • • x4 链路: InfiniBand 标准链路配置,使用 4 个物理通道
  • • 有效带宽: 扣除编码开销后的实际可用带宽
  • • 编码效率: 8b/10b 编码效率为 80%,64b/66b 编码效率为 96.97%

数据来源: InfiniBand Trade Association (IBTA) 官方规范 v1.4/v1.5

1.3 架构原理

1.3.1 InfiniBand 分层协议模型

根据 InfiniBand Trade Association (IBTA) 架构规范,InfiniBand 采用分层架构设计,包含以下层次:

  1. 1. 物理层 (Physical Layer)
  • • 信号传输: 负责电气信号的编码、调制和传输
  • • 连接介质: 支持铜缆 (DAC/AOC) 和光纤 (SR4/LR4) 连接
  • • 链路训练: 自动协商速率、FEC (Forward Error Correction) 和通道参数
  • • 错误检测: 硬件级别的 BER (Bit Error Rate) 监控和纠正
  • 2. 链路层 (Link Layer)
    • • 可靠传输: 基于 ACK/NAK 机制的数据包确认和重传
    • • 流量控制: 基于信用 (Credit) 的端到端流控机制
    • • 虚拟通道: 支持最多 16 个 VL (Virtual Lanes) 实现 QoS 隔离
    • • 拥塞管理: 硬件级别的拥塞控制和避免机制
  • 3. 网络层 (Network Layer)
    • • 路由功能: 基于 LID (Local Identifier) 的包转发
    • • 子网管理: 通过 SMP (Subnet Management Packets) 进行拓扑发现
    • • 分区管理: 基于 P_Key (Partition Key) 的网络隔离
    • • 服务级别: SL (Service Level) 到 VL 的映射管理
  • 4. 传输层 (Transport Layer)
    • • 队列对管理: QP (Queue Pairs) 的创建、连接和销毁
    • • RDMA 操作: 支持 Send/Receive、Read、Write、Atomic 操作
    • • 消息排序: 保证同一 QP 内消息的有序传输
    • • 错误恢复: 传输级别的超时和重传机制

    1.3.2 RDMA 技术

    Remote Direct Memory Access (RDMA) 是 InfiniBand 的核心特性,实现了应用程序间的直接内存访问:

    核心特性:

    • • 零拷贝传输 (Zero Copy): 数据直接在应用程序内存间传输,无需内核缓冲区拷贝
    • • 内核旁路 (Kernel Bypass): 绕过操作系统内核,减少上下文切换开销
    • • 硬件卸载 (Hardware Offload): 网络协议处理由硬件完成,释放 CPU 资源
    • • 用户空间操作: 应用程序可直接操作网络硬件,无需系统调用

    RDMA 操作类型:

    1. 1. Send/Receive: 双边操作,需要接收方预先准备接收缓冲区
    2. 2. RDMA Read: 单边操作,直接读取远程内存内容
    3. 3. RDMA Write: 单边操作,直接写入远程内存
    4. 4. Atomic Operations: 原子操作,支持 Compare-and-Swap、Fetch-and-Add 等

    性能优势:

    • • 超低延迟: 端到端延迟可低至 0.5 微秒
    • • 高带宽利用率: 可达到理论带宽的 95% 以上
    • • 低 CPU 开销: CPU 利用率通常低于 5%

    1.3.3 虚拟通道 (Virtual Lanes)

    InfiniBand 支持多达 16 个虚拟通道,提供:

    • • 服务质量保证: 不同优先级的流量隔离
    • • 死锁避免: 通过虚拟通道避免网络死锁
    • • 带宽分配: 灵活的带宽管理和分配

    1.4 网络拓扑

    1.4.1 支持的拓扑结构

    1. 1. 点对点连接 (Point-to-Point)
    • • 直接连接两个设备,无需交换机
    • • 适用于小规模双节点配置
    • • 延迟最低,但扩展性有限
  • 2. 交换机网络 (Switched Network)
    • • 通过交换机连接多个设备
    • • 支持星型、环型等基础拓扑
    • • 适用于中小规模集群
  • 3. Fat Tree 拓扑

    典型 Fat Tree 配置示例:

    Spine 层 (核心交换机)
         ├── Leaf 交换机 1 ── 服务器 1-18
         ├── Leaf 交换机 2 ── 服务器 19-36
         └── Leaf 交换机 3 ── 服务器 37-54

    配置: 36 端口 Leaf + 36 端口 Spine
    Over-subscription: 2:1 (18 上行端口 vs 36 下行端口)
    • • 高带宽、无阻塞的树形结构
    • • 1:1 Over-subscription: 上行带宽等于下行带宽,无阻塞
    • • 2:1 Over-subscription: 上行带宽为下行带宽的一半,常见配置
    • • 3:1 Over-subscription: 上行带宽为下行带宽的三分之一,经济型配置
  • 4. Torus/Mesh 拓扑
    • • 多维网格拓扑,常用于超级计算机
    • • 2D Torus: 每个节点连接 4 个邻居
    • • 3D Torus: 每个节点连接 6 个邻居
    • • 提供多条路径,具备良好的容错性

    1.4.2 子网管理

    InfiniBand 网络需要子网管理器 (Subnet Manager, SM) 进行集中管理,OpenSM 是最常用的开源实现:

    核心功能:

    • • 拓扑发现: 自动发现网络中的所有节点和链路
    • • LID 分配: 为每个端口分配唯一的 Local Identifier
    • • 路由计算: 计算最优路径并配置转发表
    • • P_Key 管理: 配置分区密钥实现网络隔离
    • • VL 映射: 配置服务级别到虚拟通道的映射
    • • 故障处理: 检测链路故障并重新计算路由

    OpenSM 部署模式:

    1. 1. 单 SM 模式
      # 启动主 SM
      sudo opensm -D 0x2c903000a0b1c
    2. 2. 主备 SM 模式 (Master/Standby)
      # 主 SM (优先级 15)
      sudo opensm -p 15 -D 0x2c903000a0b1c

      # 备 SM (优先级 10)
      sudo opensm -p 10 -D 0x2c903000a0b1d
    3. 3. 多 SM 高可用模式
    • • 支持多个 SM 同时运行
    • • 自动选举机制确定 Master SM
    • • 故障时自动切换,RTO < 30 秒

    SM Failover 机制:

    • • 心跳检测: SM 之间定期交换心跳消息
    • • 优先级选举: 基于配置优先级选择 Master SM
    • • 状态同步: Standby SM 保持网络状态同步
    • • 快速切换: 故障检测后 10-30 秒内完成切换

    1.5 与以太网和 RoCE 的对比

    特性
    InfiniBand
    以太网
    RoCE v2
    延迟
    0.5-1 μs
    5-50 μs
    1-3 μs
    CPU 开销
    < 5%
    15-30%
    5-10%
    带宽利用率
    > 95%
    60-80%
    85-90%
    错误率
    < 10^-15
    10^-12
    10^-13
    流量控制
    硬件级别
    软件实现
    PFC (Priority Flow Control)
    RDMA 支持
    原生支持
    不支持
    原生支持
    网络管理
    集中式 SM
    分布式
    分布式
    部署复杂度
    中等
    简单
    复杂
    成本
    高
    低
    中等

    RoCE (RDMA over Converged Ethernet) 特点:

    • • RoCE v1: 基于以太网 Layer 2,不可路由
    • • RoCE v2: 基于 UDP/IP,支持路由,应用更广泛
    • • 优势: 利用现有以太网基础设施,成本较低
    • • 劣势: 需要无损以太网,配置复杂,性能略低于原生 IB

    数据来源: NVIDIA 技术白皮书和 IBTA 性能测试报告

    1.6 高可用与容错机制

    InfiniBand 网络提供多种容错机制确保高可用性:

    自适应路由 (Adaptive Routing):

    • • 动态负载均衡: 根据链路负载自动选择最优路径
    • • 拥塞避免: 检测到拥塞时自动切换到备用路径
    • • 故障绕行: 链路故障时自动重新路由流量

    冗余路径 (Redundant Paths):

    • • 多路径设计: Fat Tree 等拓扑提供多条等价路径
    • • 链路聚合: 多条物理链路聚合提高带宽和可靠性
    • • 故障隔离: 单点故障不影响整体网络连通性

    虚拟通道容错:

    • • 死锁避免: 通过 VL 分配避免网络死锁
    • • 优先级保证: 关键流量使用专用 VL 确保服务质量
    • • 流量隔离: 不同应用使用不同 VL 避免相互影响

    硬件级别容错:

    • • FEC (Forward Error Correction): 自动纠正传输错误
    • • 重传机制: 链路层自动重传丢失的数据包
    • • 信号完整性: 硬件级别的信号质量监控和调整

    2. InfiniBand 网卡

    2.1 主要厂商和产品

    2.1.1 NVIDIA (原 Mellanox)

    NVIDIA 是 InfiniBand 市场的领导者,占据约 80% 的市场份额:

    ConnectX 系列:

    • • ConnectX-3: 支持 FDR (56 Gbps)
    • • ConnectX-4: 支持 EDR (100 Gbps)
    • • ConnectX-5: 支持 EDR,增强的 RDMA 功能
    • • ConnectX-6: 支持 HDR (200 Gbps)
    • • ConnectX-7: 支持 NDR (400 Gbps)

    BlueField DPU 系列:

    • • 集成 ARM 处理器的数据处理单元
    • • 支持网络、存储和安全卸载
    • • 适用于云原生和边缘计算场景

    2.1.2 Intel

    Intel 主要提供 Omni-Path Architecture (OPA) 解决方案:

    • • Omni-Path HFI: 100 Gbps 主机接口卡
    • • True Scale: 早期的 InfiniBand 产品线
    • • 主要面向 HPC 市场

    2.1.3 其他厂商

    • • Marvell (原 QLogic): InfiniPath 系列
    • • Chelsio: iWARP 和 RoCE 解决方案

    2.2 网卡架构

    2.2.1 硬件组件

    1. 1. Host Channel Adapter (HCA)
    • • InfiniBand 网卡的核心组件
    • • 负责协议处理和 RDMA 操作
    • • 包含队列对 (Queue Pairs) 管理
  • 2. PCIe 接口
    • • 连接主机系统的标准接口
    • • 支持 PCIe 3.0/4.0/5.0
    • • 通常使用 x8 或 x16 通道
  • 3. 内存控制器
    • • 管理板载内存和缓存
    • • 支持内存注册和保护
    • • 提供 DMA 引擎功能

    2.2.2 软件栈

    1. 1. 固件 (Firmware)
    • • 低级别的硬件控制
    • • 协议栈实现
    • • 性能优化和错误处理
  • 2. 驱动程序
    • • 内核空间驱动
    • • 用户空间库 (libibverbs)
    • • 管理工具和实用程序

    2.3 VPI 技术

    2.3.1 Virtual Protocol Interconnect

    VPI 技术允许单一网卡支持多种协议:

    • • InfiniBand: 原生 IB 协议
    • • Ethernet: 标准以太网协议
    • • RoCE: RDMA over Converged Ethernet

    2.3.2 协议切换

    VPI 网卡可以根据网络环境动态切换协议:

    # 查看当前协议
    ibv_devinfo | grep link_layer

    # 切换到以太网模式 (需要重启)
    echo eth > /sys/class/infiniband/mlx5_0/ports/1/link_layer

    2.4 性能特性

    2.4.1 延迟优化

    • • 硬件时间戳: 精确的延迟测量
    • • 零拷贝 DMA: 减少内存拷贝开销
    • • 中断合并: 优化中断处理

    2.4.2 带宽优化

    • • 多队列支持: 并行处理多个连接
    • • 自适应路由: 动态负载均衡
    • • 拥塞控制: 硬件级别的流量管理

    3. InfiniBand 网卡配置

    3.1 驱动程序安装

    3.1.1 Ubuntu/Debian 系统

    方法一: 使用官方软件源:

    # 更新软件包列表
    sudo apt update

    # 安装基础 InfiniBand 支持
    sudo apt install -y infiniband-diags ibverbs-utils
    sudo apt install -y libmlx5-1 libmlx4-1
    sudo apt install -y libibverbs-dev librdmacm-dev

    # 安装性能测试工具
    sudo apt install -y perftest

    方法二: 安装 NVIDIA MLNX_OFED:

    # 下载 MLNX_OFED (以 Ubuntu 22.04 为例)
    wget https://www.mellanox.com/downloads/ofed/MLNX_OFED-5.8-1.0.1.1/MLNX_OFED_LINUX-5.8-1.0.1.1-ubuntu22.04-x86_64.tgz

    # 解压安装包
    tar -xzf MLNX_OFED_LINUX-5.8-1.0.1.1-ubuntu22.04-x86_64.tgz
    cd MLNX_OFED_LINUX-5.8-1.0.1.1-ubuntu22.04-x86_64

    # 安装所有组件
    sudo ./mlnxofedinstall --all

    # 重启系统使驱动生效
    sudo reboot

    3.1.2 CentOS/RHEL 系统

    # 安装基础软件包
    sudo yum install -y infiniband-diags libibverbs-utils
    sudo yum install -y perftest rdma-core

    # 或使用 dnf (较新版本)
    sudo dnf install -y infiniband-diags libibverbs-utils
    sudo dnf install -y perftest rdma-core

    3.2 网络接口配置

    3.2.1 IPoIB 配置

    使用 Netplan (Ubuntu 18.04+):

    # /etc/netplan/01-ib-config.yaml
    network:
    version:2
    renderer:networkd
    ethernets:
    ib0:
    addresses:
    -192.168.100.10/24
    gateway4:192.168.100.1
    nameservers:
    addresses:
    -8.8.8.8
    -8.8.4.4
    mtu:65520
    optional:true
    # 应用配置
    sudo netplan apply

    # 验证配置
    ip addr show ib0
    ping -I ib0 192.168.100.1

    传统网络配置:

    # 手动配置 IB 接口
    sudo ip linkset ib0 up
    sudo ip addr add 192.168.100.10/24 dev ib0
    sudo ip linkset ib0 mtu 65520

    # 添加路由
    sudo ip route add 192.168.100.0/24 dev ib0

    3.2.2 RoCE 配置

    当网卡工作在以太网模式时,需要配置 RoCE:

    # 检查 Link Layer 类型
    ibv_devinfo | grep link_layer

    # 配置 RoCE v2 (推荐)
    echo"RoCEv2" | sudotee /sys/class/infiniband/mlx5_0/ports/1/gid_attrs/types/3

    # 启用流量控制
    sudo ethtool -A eth0 rx on tx on

    # 设置 Jumbo Frame
    sudo ip linkset eth0 mtu 9000

    3.3 性能优化配置

    3.3.1 系统参数优化

    # 网络缓冲区优化
    echo'net.core.rmem_max = 134217728' | sudotee -a /etc/sysctl.conf
    echo'net.core.wmem_max = 134217728' | sudotee -a /etc/sysctl.conf
    echo'net.core.rmem_default = 67108864' | sudotee -a /etc/sysctl.conf
    echo'net.core.wmem_default = 67108864' | sudotee -a /etc/sysctl.conf

    # TCP 参数优化
    echo'net.ipv4.tcp_rmem = 4096 87380 134217728' | sudotee -a /etc/sysctl.conf
    echo'net.ipv4.tcp_wmem = 4096 65536 134217728' | sudotee -a /etc/sysctl.conf

    # 应用配置
    sudo sysctl -p

    3.3.2 CPU 亲和性配置

    # 查看网卡的 NUMA 节点
    cat /sys/class/infiniband/mlx5_0/device/numa_node

    # 设置中断亲和性
    echo 2 | sudotee /proc/irq/24/smp_affinity

    # 绑定应用程序到特定 CPU
    numactl --cpunodebind=0 --membind=0 your_application

    3.3.3 内存大页配置

    # 配置大页内存
    echo 1024 | sudotee /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

    # 永久配置
    echo'vm.nr_hugepages = 1024' | sudotee -a /etc/sysctl.conf

    # 挂载大页文件系统
    sudomkdir -p /mnt/huge
    sudo mount -t hugetlbfs nodev /mnt/huge

    3.4 安全配置

    3.4.1 防火墙配置

    # 允许 InfiniBand 子网管理流量
    sudo ufw allow from 192.168.100.0/24 to any port 4789

    # 允许 RDMA 通信端口
    sudo ufw allow from 192.168.100.0/24 to any port 18515:18516

    3.4.2 访问控制

    # 配置 IB 分区
    echo"0x8001" | sudotee /sys/class/infiniband/mlx5_0/ports/1/pkeys/1

    # 设置设备权限
    sudochown root:rdma /dev/infiniband/*
    sudochmod 660 /dev/infiniband/*

    4. InfiniBand 网卡相关命令

    4.1 基础诊断命令

    4.1.1 设备发现和状态查询

    # 列出所有 IB 设备
    ibv_devices

    # 显示设备详细信息
    ibv_devinfo

    # 显示设备状态摘要
    ibstat

    # 查看特定设备信息
    ibv_devinfo -d mlx5_0

    # 显示端口状态
    ibportstate

    示例输出解析:

    $ ibstat
    CA 'mlx5_0'
        CA type: MT4129
        Number of ports: 1
        Firmware version: 28.39.5050
        Hardware version: 0
        Node GUID: 0xa088c20300863a34
        System image GUID: 0xa088c20300863a34
        Port 1:
            State: Active
            Physical state: LinkUp
            Rate: 200
            Base lid: 113
            LMC: 0
            SM lid: 92
            Capability mask: 0x2651e848
            Port GUID: 0xa088c20300863a34
            Link layer: InfiniBand