news 2026/4/23 20:12:24

从零到一:手把手教你用Mellanox ConnectX-6和Ubuntu 22.04搭建RDMA开发环境

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零到一:手把手教你用Mellanox ConnectX-6和Ubuntu 22.04搭建RDMA开发环境

从零到一:手把手教你用Mellanox ConnectX-6和Ubuntu 22.04搭建RDMA开发环境

RDMA(远程直接内存访问)技术正在重塑现代数据中心和高性能计算的网络架构。相比传统TCP/IP协议栈,RDMA通过绕过操作系统内核直接访问远程内存,将延迟降低到微秒级,同时显著提升吞吐量。本文将带您从硬件安装开始,逐步构建完整的RDMA开发环境。

1. 硬件准备与系统检查

在开始软件配置前,确保硬件环境就绪至关重要。ConnectX-6系列网卡提供200Gb/s的带宽,是当前性能最强的商用RDMA解决方案之一。

首先检查PCIe设备识别情况:

lspci | grep Mellanox

正常应显示类似输出:

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

内核版本兼容性是常见痛点。Ubuntu 22.04默认使用5.15 LTS内核,需确认是否在MLNX_OFED支持列表:

uname -r

若使用非标准内核,可能需要手动编译驱动或更换为官方支持版本。

提示:建议准备备用网络连接,因为驱动安装过程可能导致临时网络中断

硬件环境确认项:

  • 服务器具备PCIe 3.0 x16或更高规格插槽
  • 网卡正确安装并固定(检查散热情况)
  • 使用兼容的DAC线缆或光纤模块连接交换机
  • BIOS中启用PCIe AER和ACS支持

2. MLNX_OFED驱动套件安装

Mellanox官方提供的MLNX_OFED(OpenFabrics企业版分发)包含完整的RDMA协议栈。以下是针对Ubuntu 22.04的安装流程:

2.1 依赖项准备

sudo apt update sudo apt install -y dkms libnl-3-dev libnl-route-3-dev python3-distutils

2.2 下载并安装驱动

从NVIDIA官网获取最新MLNX_OFED包(当前推荐5.8-3.0.7.0版本):

wget https://content.mellanox.com/ofed/MLNX_OFED-5.8-3.0.7.0/mlnx-ofed-5.8-3.0.7.0-ubuntu22.04-x86_64.tgz tar -xzvf mlnx-ofed-5.8-3.0.7.0-ubuntu22.04-x86_64.tgz cd mlnx-ofed-5.8-3.0.7.0-ubuntu22.04-x86_64 sudo ./mlnxofedinstall --without-fw-update --force

安装后执行:

sudo /etc/init.d/openibd restart sudo /etc/init.d/opensmd restart

2.3 验证安装

检查驱动模块加载:

lsmod | grep mlx

应看到mlx5_coreib_umad等关键模块。

关键工具链确认:

ibstat # 查看网卡状态 ibv_devinfo # 验证verbs设备

3. 网络协议与模式配置

ConnectX-6支持多种RDMA传输模式,需根据网络环境选择:

模式协议适用场景配置复杂度
IBInfiniBand专用IB网络
RoCEv2以太网标准数据中心
iWARPTCP/IP广域网兼容

3.1 RoCEv2推荐配置

sudo mlxconfig -d /dev/mst/mt4119_pciconf0 set ROCE_EN=1 sudo ethtool -K ens1f0np0 gro off lro off sudo sysctl -w net.ipv4.tcp_ecn=1

设置服务质量(QoS)和流量类别:

sudo mlnx_qos -i ens1f0np0 --trust=dscp sudo cma_roce_mode -d mlx5_0 -p 1 -m 2

3.2 防火墙规则

允许RDMA通信端口:

sudo ufw allow 4791/tcp # RoCEv2默认端口 sudo ufw allow 7471/tcp

4. 开发环境搭建与测试

4.1 安装开发工具包

sudo apt install -y librdmacm-dev libibverbs-dev ibverbs-utils rdmacm-utils

4.2 编译perftest基准工具

git clone https://github.com/linux-rdma/perftest.git cd perftest ./autogen.sh ./configure make

4.3 运行pingpong测试

单机回环测试:

./ib_send_lat -d mlx5_0

双机测试(在另一台主机运行服务端):

# 服务端 ./ib_send_lat -d mlx5_0 # 客户端 ./ib_send_lat -d mlx5_0 <server_ip>

预期看到类似输出:

--------------------------------------------------------------------------------------- Send Latency Test Dual-port : OFF Device : mlx5_0 Number of qps : 1 Transport type : IB Connection type : RC Using SRQ : OFF CQ Moderation : 100 Mtu : 4096[B] Link type : Ethernet GID index : 3 Max inline data : 0[B] rdma_cm QPs : OFF Data ex. method : Ethernet --------------------------------------------------------------------------------------- local address: LID 0000 QPN 0x01b1 PSN 0xf6fcb7 remote address: LID 0000 QPN 0x01b2 PSN 0xcb0f1b --------------------------------------------------------------------------------------- #bytes #iterations t_min[usec] t_max[usec] t_typical[usec] t_avg[usec] 2 1000 1.35 2.67 1.36 1.36

4.4 性能调优建议

通过修改设备参数提升性能:

# 增大SQ/RQ深度 sudo mlx5tool -d /dev/mst/mt4119_pciconf0 -c -p 0 set_sq_size=1024 sudo mlx5tool -d /dev/mst/mt4119_pciconf0 -c -p 0 set_rq_size=1024 # 启用内存注册缓存 echo 4096 | sudo tee /sys/class/infiniband/mlx5_0/mr_cache/mr_cache_size

5. 常见问题排查指南

5.1 驱动加载失败

症状:ibstat显示"Couldn't open HCA" 解决方法:

sudo modprobe -rv mlx5_core sudo modprobe -v mlx5_core sudo /etc/init.d/openibd restart

5.2 网络不通

检查物理连接状态:

sudo ethtool ens1f0np0 | grep "Link detected"

验证IPoIB配置:

sudo ip link set ib0 up sudo ip addr add 192.168.1.100/24 dev ib0

5.3 性能不达预期

检查中断亲和性:

cat /proc/interrupts | grep mlx

调整CPU绑定:

sudo set_irq_affinity.sh ens1f0np0

6. 进阶开发准备

6.1 编程环境配置

CMake项目示例配置:

find_package(Threads REQUIRED) find_package(rdma REQUIRED) add_executable(rdma_demo main.cpp) target_link_libraries(rdma_demo PRIVATE rdma::rdmacm rdma::ibverbs)

6.2 Verbs API基础示例

#include <rdma/rdma_cma.h> struct rdma_event_channel *ec = rdma_create_event_channel(); struct rdma_cm_id *id; rdma_create_id(ec, &id, NULL, RDMA_PS_TCP); struct rdma_addrinfo hints = {}; hints.ai_port_space = RDMA_PS_TCP; struct rdma_addrinfo *res; rdma_getaddrinfo("192.168.1.100", "7471", &hints, &res); rdma_resolve_addr(id, NULL, res->ai_dst_addr, 2000);

6.3 性能分析工具

  • ibv_rc_pingpong: 基础延迟测试
  • qperf: 全面性能评估
  • perf工具跟踪内核事件:
sudo perf stat -e 'mlx5:*' ./ib_send_bw
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 20:11:25

上海交通大学LaTeX论文模板:告别格式焦虑的学术写作终极指南

上海交通大学LaTeX论文模板&#xff1a;告别格式焦虑的学术写作终极指南 【免费下载链接】SJTUThesis 上海交通大学 LaTeX 论文模板 | Shanghai Jiao Tong University LaTeX Thesis Template 项目地址: https://gitcode.com/gh_mirrors/sj/SJTUThesis 你是否曾在深夜为论…

作者头像 李华
网站建设 2026/4/23 20:07:02

从/dev/ttyS0到SIGIO信号:一份给Linux串口新手的保姆级避坑指南

从/dev/ttyS0到SIGIO信号&#xff1a;一份给Linux串口新手的保姆级避坑指南 第一次在Linux下操作串口设备时&#xff0c;那种既兴奋又忐忑的心情我至今记忆犹新。看着命令行里冷冰冰的/dev/ttyS0&#xff0c;再对比Windows下亲切的"COM3"&#xff0c;突然意识到自己正…

作者头像 李华
网站建设 2026/4/23 20:06:48

DC-5靶机渗透复盘:我是如何从Nginx日志里拿到Shell的?

DC-5靶机渗透实战&#xff1a;从异常时间戳到Root权限的完整攻击链剖析 去年在某个深夜的CTF训练中&#xff0c;我遇到了DC-5这个看似简单却暗藏玄机的靶机。整个渗透过程最令人难忘的&#xff0c;是那个不断变化的页脚时间戳——这个微小细节最终成为了突破防线的关键入口。本…

作者头像 李华