当前位置: 首页 > news >正文

别光看理论了!手把手带你用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%。

http://www.jsqmd.com/news/778886/

相关文章:

  • 从零开始理解Cortex-M4/M7的栈指针:MSP与PSP在RTOS中的实战配置与避坑指南
  • Qdrant向量数据库与MCP协议集成:AI应用编排新范式
  • 2026濮阳正规医美整形推荐榜:这5家医院你更中意哪家? - 速递信息
  • 从靶场到实战:手把手教你用Metasploitable2复现并理解那些“著名”的CVE漏洞
  • 别再乱勾选了!Anaconda安装时这个选项千万别选(Windows/Mac通用避坑指南)
  • Jetson Xavier NX上编译OpenCV 4.5.3支持CUDA加速,保姆级避坑指南(含libjasper-dev问题解决)
  • 2026年4月建筑加固服务厂商口碑推荐,经验丰富团队开展建筑加固 - 品牌推荐师
  • 金寨艺苗艺术有限公司山美艺术|2026年官方课程体系全面升级上线 - 速递信息
  • 低代码开发浅析
  • 电子投票系统安全漏洞分析与防御实践
  • Flantier开源多模态模型:欧洲AI自主创新的关键技术
  • 企业级应用架构演进:DDD分层与领域事件解耦实战
  • 基于React+Electron+Zustand构建极简本地笔记应用
  • 拒绝馒化、拒绝网红脸:杨芳医生解读“高智脸”背后的两大原创注射体系 - 速递信息
  • 别再死记硬背了!用Python+NumPy动手模拟OFDM调制解调全过程
  • IrisSupportLib线程管理与事件处理机制深度解析
  • Go语言分布式文件系统:MinIO实战
  • 唯品会技术架构一览表
  • 苏州企业创新创业项目申报指南:从准备到提交的全流程解析 - 速递信息
  • 别再只会if-else了!Matlab assert函数让你的代码更健壮(附调试技巧)
  • Photoshop 多图自动拼接工具,支持横向 / 纵向排列,一键自动扩展画布并生成长图
  • 海碧麦克干预自闭症有用吗?上海自闭症干预机构全测评(含主流机构对比) - 速递信息
  • 金寨艺苗艺术有限公司2026年官方指南:山美艺术官网核心信息全解析 - 速递信息
  • 嘉兴装修公司实践分享:2026年推荐榜TOP7案例揭晓 - 速递信息
  • taotoken用量看板如何帮助团队透明管理大模型api成本
  • 2026三亚目的地婚礼好评榜TOP5,这样选不踩坑 - 速递信息
  • 告别配置迷茫!手把手教你用Vector Configurator Pro搞定Autosar Dem的Event与DTC关联
  • 持续学习框架解析:从EWC到回放算法,构建终身学习AI系统
  • AI 大模型推理平台完整测评:7 家主流聚合服务对比分析
  • 2026广东狐臭医生口碑测评:性价比最高的几位实测拆解 - 速递信息