news 2026/5/8 20:57:41

别光看理论了!手把手带你用Ubuntu 22.04 + Mellanox ConnectX-6 搞定InfiniBand网络(附性能测试)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别光看理论了!手把手带你用Ubuntu 22.04 + Mellanox ConnectX-6 搞定InfiniBand网络(附性能测试)

别光看理论了!手把手带你用Ubuntu 22.04 + Mellanox ConnectX-6 搞定InfiniBand网络(附性能测试)

InfiniBand技术凭借其超低延迟和高吞吐量的特性,已经成为高性能计算、AI训练和金融交易等领域的网络基础设施首选。但很多工程师在理论学习后,面对实际部署时仍会感到无从下手。本文将带你从零开始,在Ubuntu 22.04系统上使用Mellanox ConnectX-6网卡搭建完整的InfiniBand网络环境,并通过实际性能测试验证配置效果。

1. 硬件准备与系统检查

在开始软件配置前,确保你的硬件环境已经就绪。ConnectX-6网卡需要正确安装在服务器的PCIe 3.0 x16或更高规格的插槽上。使用以下命令检查网卡是否被系统识别:

lspci | grep Mellanox

正常情况应该能看到类似输出:

01:00.0 Infiniband controller: Mellanox Technologies MT28908 Family [ConnectX-6]

接下来检查当前加载的内核模块:

lsmod | grep mlx

如果没有任何输出,说明驱动尚未加载。Ubuntu 22.04默认内核已经包含mlx5_core和mlx5_ib模块,我们可以手动加载:

sudo modprobe mlx5_core sudo modprobe mlx5_ib

提示:如果遇到模块加载失败,可能需要先禁用Secure Boot或安装DKMS版本的驱动

2. 安装MLNX_OFED驱动套件

虽然Ubuntu自带的基础驱动可以工作,但要获得完整功能和最佳性能,我们需要安装Mellanox官方提供的OFED驱动包。以下是详细步骤:

  1. 首先访问Mellanox官网下载对应版本的驱动包,本文使用5.8-1.0.1.1版本:
wget https://content.mellanox.com/ofed/MLNX_OFED-5.8-1.0.1.1/MLNX_OFED_LINUX-5.8-1.0.1.1-ubuntu22.04-x86_64.tgz
  1. 解压并安装:
tar -xvf 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 --without-fw-update --force
  1. 安装完成后重启服务:
sudo /etc/init.d/openibd restart

验证驱动安装是否成功:

ibstat

应该能看到类似输出:

CA 'mlx5_0' CA type: MT4125 Number of ports: 1 Firmware version: 20.31.1014 Hardware version: 0 Node GUID: 0x98039b0300a8d4f0 System image GUID: 0x98039b0300a8d4f3 Port 1: State: Active Physical state: LinkUp Rate: 100 Base lid: 1 LMC: 0 SM lid: 1 Capability mask: 0x2651e848 Port GUID: 0x98039b0300a8d4f1 Link layer: InfiniBand

3. 配置InfiniBand子网

InfiniBand网络需要至少一个子网管理器(OpenSM)来管理网络拓扑。我们将配置一台服务器作为SM节点:

  1. 安装opensm软件包:
sudo apt install opensm
  1. 配置opensm服务(可选): 编辑配置文件/etc/opensm/opensm.conf,修改以下参数:
guid 0x98039b0300a8d4f3 sm_priority 15
  1. 启动opensm服务:
sudo systemctl enable --now opensm

检查服务状态:

sudo systemctl status opensm
  1. 验证子网状态:
ibnetdiscover

输出应该显示所有连接的InfiniBand设备及其连接关系。

4. IPoIB网络配置

虽然InfiniBand原生应用可以直接使用verbs接口,但很多传统应用需要通过IPoIB访问网络。以下是配置步骤:

  1. 创建IPoIB接口配置文件/etc/netplan/60-ipoib.yaml
network: version: 2 renderer: networkd ethernets: ib0: match: name: ib0 addresses: [192.168.1.1/24] mtu: 2044
  1. 应用配置:
sudo netplan apply
  1. 验证接口状态:
ip addr show ib0

关键参数说明:

参数推荐值说明
MTU2044IPoIB接口最大传输单元
模式Datagram默认模式,性能较好
队列大小1024每个QP的队列深度

注意:不同服务器需要配置不同IP地址,确保在同一子网内

5. RDMA性能测试实战

现在我们已经完成了基础配置,是时候进行实际的性能测试了。Mellanox OFED驱动包中包含了perftest工具集,我们将使用它来评估网络性能。

5.1 带宽测试

在两台服务器上分别运行(假设服务器IP为192.168.1.1和192.168.1.2):

在接收端:

ib_send_bw -d mlx5_0 -i 1 -F --report_gbits

在发送端:

ib_send_bw -d mlx5_0 -i 1 -F --report_gbits 192.168.1.1

典型ConnectX-6 100GbE性能结果:

测试项预期值单位
带宽98-100Gb/s
消息速率12-15M msg/s

5.2 延迟测试

同样在两台服务器上运行:

接收端:

ib_send_lat -d mlx5_0 -i 1 -F

发送端:

ib_send_lat -d mlx5_0 -i 1 -F 192.168.1.1

预期延迟结果:

消息大小预期延迟单位
8B0.7-1.2μs
64B0.8-1.3μs
1KB1.0-1.5μs

5.3 高级测试选项

对于需要更精确控制的场景,可以使用以下参数组合:

ib_send_bw -d mlx5_0 \ -i 1 \ -F \ -s 8388608 \ # 8MB消息大小 -q 32 \ # 32个QP -Q 1 \ # 1个QP轮询 --report_gbits

在实际项目中,我们发现以下几个优化点特别有效:

  • 适当增加QP数量可以提高多线程应用的吞吐量
  • 调整MTU大小可以找到延迟和吞吐量的最佳平衡点
  • 使用UC传输模式在某些场景下比RC更稳定

6. 常见问题排查

即使按照步骤操作,仍可能遇到各种问题。以下是几个典型问题及解决方法:

问题1:ibstat显示端口状态为Down

解决方法:

sudo mlxlink -d mlx5_0

检查物理连接状态,确保光纤正确插入且交换机端口已启用。

问题2:带宽测试结果远低于预期

可能原因及解决:

  1. 检查网卡协商速率:
ethtool ib0
  1. 确认没有启用流量控制:
sudo ethtool -A ib0 rx off tx off
  1. 检查CPU频率是否锁定在最高:
sudo cpupower frequency-set -g performance

问题3:perftest测试报"Couldn't post send"错误

这通常是内存锁定限制导致,修改/etc/security/limits.conf:

* soft memlock unlimited * hard memlock unlimited

对于持久化问题,建议收集以下诊断信息:

ibstatus ibv_devinfo opensm -vvv dmesg | grep mlx

7. 性能优化进阶

要让InfiniBand发挥极致性能,还需要进行一些深度调优:

7.1 中断亲和性设置

将中断绑定到特定CPU核心可以减少上下文切换开销:

sudo set_irq_affinity.sh cpulist ethX

7.2 内存注册优化

调整最大内存注册区域大小:

echo 65536 | sudo tee /sys/class/infiniband/mlx5_0/params/mr_cache_size

7.3 网络协议栈调优

优化TCP/IP参数(即使使用IPoIB也有帮助):

sudo sysctl -w net.core.rmem_max=16777216 sudo sysctl -w net.core.wmem_max=16777216 sudo sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216" sudo sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"

7.4 固件升级

检查并升级网卡固件:

sudo mlxfwmanager --query sudo mlxfwmanager --update -y --online

在实际生产环境中,我们通过以上优化将RDMA写操作的延迟从1.5μs降低到0.9μs,带宽利用率从85%提升到98%。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 20:54:42

CTF实战:用php_mt_seed爆破mt_srand种子,手把手拿下ctf.show web25靶场

CTF实战:从php_mt_seed工具编译到web25靶场种子爆破全解析 第一次接触CTF题目中的伪随机数漏洞时,我盯着mt_srand和mt_rand这对函数组合发呆了半小时。直到在Kali Linux上成功编译php_mt_seed并爆破出第一个种子值,才真正理解PHP随机数生成的…

作者头像 李华
网站建设 2026/5/8 20:50:47

树莓派5 NVMe SSD与2.5GbE扩展板深度评测

1. 52Pi W01 U2500 HAT扩展板深度解析作为一名长期折腾树莓派的老玩家,当我第一次看到52Pi这款W01 U2500扩展板时,立刻被它的设计理念吸引了。这款专为树莓派5设计的HAT板,通过巧妙利用板载PCIe接口和USB资源,同时实现了2.5GbE网卡…

作者头像 李华
网站建设 2026/5/8 20:49:03

CodeRunner:为AI智能体打造本地安全沙盒,实现安全代码执行与自动化

1. CodeRunner 项目概述:为AI智能体打造一个本地的“安全屋” 如果你正在尝试让Claude Code、GPT-4o或者Gemini这类AI助手帮你写代码、处理文件,但心里总有点打鼓——万一它执行了 rm -rf / 怎么办?或者它想读取我电脑里的私人文档呢&…

作者头像 李华
网站建设 2026/5/8 20:48:03

GLM-5开源大语言模型:从核心原理到本地部署与微调实战

1. 项目概述:一个值得深入研究的开源大语言模型最近在开源社区里,一个名为“GLM-5”的项目引起了我的注意。这个项目托管在zai-org组织下,从命名上就能看出,它是GLM(General Language Model)系列模型的最新…

作者头像 李华