资讯动态

银河麒麟V10安装Mellanox OFED驱动:RDMA与RoCE配置实战指南

发布时间:2026/8/5 16:03:06 来源:尧图企业网站定制
1. 项目概述为什么要在银河麒麟V10上折腾Mellanox驱动如果你正在管理或使用搭载了Mellanox网卡的银河麒麟服务器操作系统V10那么你迟早会碰到驱动问题。这几乎是高性能计算、云计算底层和存储网络领域的“必经之路”。Mellanox现在属于英伟达其InfiniBand和高速以太网如25G、100G网卡性能强悍但官方驱动OFED的安装过程在国产化操作系统上常常不像在主流Linux发行版上那么顺畅。我最近刚在一批新的麒麟V10 SP3服务器上部署了Mellanox ConnectX-5和ConnectX-6网卡目标是为一个AI训练集群搭建RDMA over Converged Ethernet (RoCE)网络。官方文档指向了OFED 23.07-5.8版本。这个组合——国产操作系统 国际顶级硬件厂商的最新驱动——听起来就充满了“挑战”。事实也确实如此从依赖缺失、内核模块编译失败到与系统自带驱动冲突每一步都可能踩坑。这篇文章就是这次实战的完整记录。我会详细拆解在银河麒麟V10包括SP1/SP2/SP3等小版本上从零开始成功安装Mellanox OFED 23.07-5.8驱动的全过程。不止是给出命令更重要的是解释每个步骤背后的原因、可能遇到的“坑”以及如何安全地爬出来。无论你是运维工程师、系统管理员还是负责国产化软硬件适配的技术人员这份指南都能帮你节省大量摸索和排错的时间。2. 核心需求与方案选型解析2.1 为什么需要安装官方OFED驱动银河麒麟V10服务器版自带了大量的硬件驱动其中可能包含较旧版本的mlx4_core和mlx5_core内核模块。对于基础网络连通性这些驱动或许够用但如果你要发挥Mellanox网卡的全部威力特别是以下高级功能就必须安装官方OFED驱动RDMA远程直接内存访问这是核心中的核心。无论是InfiniBand还是RoCERDMA允许数据在网络中直接从一个节点的内存搬到另一个节点的内存完全绕过CPU和操作系统内核极大降低延迟、提升吞吐量。这是高性能计算、分布式存储如Ceph、AI训练框架如TensorFlow PyTorch的分布式训练的关键基石。系统自带的驱动可能不支持或仅部分支持RDMA。GPUDirect技术在AI和科学计算场景数据需要在GPU显存和网卡缓冲区之间直接传输。OFED驱动提供了GPUDirect RDMA和GPUDirect Storage等技术支持能进一步减少数据复制次数释放CPU和PCIe带宽。最新的性能优化与Bug修复官方OFED驱动集成了最新的固件、性能调优参数和稳定性修复。使用旧驱动可能会遇到已知的兼容性问题、性能瓶颈或功能缺失。完整的用户态工具集OFED包不仅包含内核驱动还提供了ibstatibv_devinfoperftest等不可或缺的诊断和性能测试工具。没有这些工具你根本无法验证RDMA是否正常工作也无法进行网络性能基准测试。因此安装OFED驱动不是“可选”而是启用关键生产能力的必要步骤。2.2 版本选择为什么是OFED 23.07-5.8Mellanox OFED的版本号通常格式为MLNX_OFED-主版本号-次版本号-内核版本号-发行版。这里的“23.07-5.8”需要拆解23.07OFED软件包的主版本代表2023年7月发布的特性集合。5.8这个驱动包所预编译针对的内核版本。这是最关键的信息。银河麒麟V10服务器版默认使用的内核版本通常是4.19.90-xxxx或类似的长期支持版本。直接下载针对5.8内核的驱动包显然是无法直接安装的。这里的选择逻辑是方案A寻找麒麟V10专用适配包首选但罕见最理想的情况是Mellanox/英伟达或麒麟官方提供了针对麒麟V10特定内核如4.19.90-25.ky10.x86_64预编译的驱动包。这需要去麒麟软件官网或英伟达企业支持渠道寻找。但根据我的经验这种“开箱即用”的包非常少更新也不及时。方案B使用OFED源码包进行本地编译本文采用方案这是最通用、最可靠的方法。我们下载MLNX_OFED_SRC-23.07-5.8.tgz这样的源码包。安装脚本会在你的服务器上根据你实际运行的内核麒麟的4.19.90自动编译生成内核模块。这确保了驱动与系统内核的绝对兼容。注意永远不要尝试安装内核版本号不匹配的预编译二进制包如MLNX_OFED_LINUX-23.07-5.8-rhel8.8-x86_64.tgz这几乎必然导致系统启动失败或内核崩溃。源码编译是国产化系统适配的黄金法则。2.3 前期准备与风险评估在开始任何操作之前做好以下准备至关重要系统备份与快照如果服务器支持如在VMware、KVM虚拟化环境中务必创建虚拟机快照。如果是物理机确保有完整的系统备份或可用的救援模式。驱动安装会触及内核核心操作失误有导致系统无法启动的风险。获取内核开发包编译内核模块需要kernel-develkernel-headers等开发包且其版本必须与当前运行的内核完全一致。这是后续所有步骤的基础。网络连通性确保服务器能访问互联网或内部软件源以便安装编译所需的依赖包如gcc make perl rpm-build等。确认网卡型号使用lspci | grep -i mellanox命令确认Mellanox网卡的准确型号例如ConnectX-5ConnectX-6以便在官方支持列表核对兼容性。3. 详细安装步骤与实操要点3.1 环境准备内核与依赖的精确匹配这是整个流程中最容易出错也最需要耐心的一步。很多编译失败都源于这里的环境不纯净。第一步精确锁定当前内核版本uname -r输出可能类似于4.19.90-25.ky10.x86_64。请完整、准确地记录这个字符串。第二步安装完全匹配的内核开发包银河麒麟V10的软件源命名方式可能与CentOS/RHEL类似但有自己的前缀。你需要使用yum或dnf取决于系统配置来搜索和安装。# 首先搜索可用的kernel-devel包看是否有完全匹配的版本 yum list available | grep kernel-devel | grep uname -r # 如果上一步没有找到尝试更广泛的搜索可能包名包含‘ky10’ yum list available | grep kernel-devel # 安装找到的完全匹配的包。假设包名为 kernel-devel-4.19.90-25.ky10.x86_64 yum install -y kernel-devel-4.19.90-25.ky10.x86_64 kernel-headers-4.19.90-25.ky10.x86_64实操心得麒麟的软件源有时配置不完整或者镜像不同步可能导致找不到完全匹配的包。如果找不到可以尝试从银河麒麟官方发布的ISO镜像或配套的离线软件仓库中手动查找并安装对应的.rpm包。绝对不要安装版本号不一致的开发包这会导致编译出的模块无法插入当前运行的内核。第三步安装基础编译工具链yum groupinstall -y Development Tools yum install -y rpm-build gcc-gfortran libtool automake autoconf openssl-devel libnl3-devel python3-devel这些是编译OFED驱动及其用户态库所必需的工具。libnl3-devel尤其重要因为RDMA用户态库依赖它。3.2 获取并解压OFED源码驱动前往英伟达官方网站的Mellanox驱动下载页面。你需要注册一个企业账号通常免费。找到MLNX_OFED_SRC-23.07-5.8.tgz这个源码包并下载到服务器上或者先下载到本地再上传。# 假设你将源码包放在了 /root 目录下 cd /root tar -xzvf MLNX_OFED_SRC-23.07-5.8.tgz cd MLNX_OFED_SRC-23.07-5.83.3 执行编译与安装脚本进入解压后的目录你会看到install.pl这个Perl脚本。这就是安装的主入口。./install.pl --basic这里强烈推荐使用--basic参数。这个参数的含义是仅安装驱动和最基本的用户态库跳过大量的MPI库、存储驱动等非必要组件。在国产化系统上全量安装不加--basic极有可能因为复杂的依赖关系而失败。--basic模式能最大程度保证核心驱动内核模块RDMA用户库的成功安装。安装脚本会依次执行以下工作检查依赖自动检查并提示缺失的包。根据上一步的准备这里应该没有问题。编译内核模块针对你的内核4.19.90-25.ky10.x86_64编译mlx5_coremlx5_ibib_core等模块。这是最耗时的步骤。编译用户态库编译并安装libibverbslibrdmacm等核心用户态库。安装工具安装ibstatibv_devinfoibdev2netdev等工具。更新Initramfs自动更新initramfs镜像确保新驱动在系统启动早期就能被加载。这一步非常关键安装过程中的关键交互与选择脚本可能会提示“未发现支持的操作系统”。这是正常的因为麒麟V10不在OFED官方明面支持列表里。脚本会将其识别为“类似RHEL8”的系统并继续通常没问题。脚本可能会询问是否自动卸载旧驱动。建议选择“是”让脚本统一处理避免冲突。在最后脚本会强烈建议你重启系统。请务必遵从。3.4 安装后配置与基础验证系统重启后进行以下验证验证1内核模块是否加载lsmod | grep mlx你应该能看到mlx5_coremlx5_ibib_core等模块。使用dmesg | grep -i mellanox查看内核日志确认没有严重的错误信息。验证2网卡是否被正确识别ibstat这个命令来自infiniband-diags包如果安装成功它会列出所有的InfiniBand设备。对于RoCE网卡也可以用ibv_devinfo这个命令会输出更详细的设备信息包括节点GUID、端口状态、支持的传输类型等。看到设备信息并且状态正常是第一个重大成功信号。验证3网络接口与IP配置Mellanox网卡通常会有两个层面的接口以太网接口例如ens1f0ens1f1。你可以用ip link show看到它们并像普通网卡一样用nmcli或编辑/etc/sysconfig/network-scripts/ifcfg-*文件配置IP地址。InfiniBand/RoCE接口例如ib0ib1。这些接口用于RDMA通信通常不需要配置传统IP但为了RoCEv2可能需要配置一个IPoIB的IP地址。关键配置启用RDMA# 检查RDMA服务是否启用 systemctl status rdma # 如果没有启用则启用并启动 systemctl enable --now rdma4. 高级功能配置以RoCEv2为例仅仅驱动装好还不够要让RDMA特别是RoCEv2跑起来还需要正确的网络配置。4.1 配置无损以太网与PFCRoCEv2运行在标准以太网上但RDMA对丢包是零容忍的。因此必须在交换机和主机两端配置无损以太网其核心是基于优先级的流量控制PFC。交换机配置需要在连接服务器的交换机端口上为承载RoCE流量的优先级例如优先级3启用PFC。这需要网络管理员在交换机如Cisco Nexus Arista Mellanox交换机上操作。将RoCE流量映射到一个独立的优先级如3并确保该优先级启用了PFC。主机端配置在银河麒麟上需要设置网卡的DCQCN数据中心量化拥塞通知参数和PFC。# 假设你的网卡接口是ens1f0 并且计划使用优先级3 # 安装ethtool工具通常已安装 yum install -y ethtool # 启用该接口的PFC 对优先级3开启 ethtool -A ens1f0 autoneg off rx on tx on # 更精细的PFC配置可能需要通过mlnx_qos工具OFED自带进行 mlnx_qos -i ens1f0 --pfc 0,0,0,1,0,0,0,0 # 仅在优先级3开启PFC从0开始计数 # 设置RoCE流的优先级 echo 3 /sys/class/net/ens1f0/ecn/roce_np/enable/3 # 启用NP无暂停模式 echo 3 /sys/class/net/ens1f0/ecn/roce_rp/enable/3 # 启用RP响应器模式4.2 配置IPoIB与防火墙为了让RoCEv2流量可路由需要为IB接口配置IP地址IPoIB。# 查看IB接口名通常是ib0, ib1... ip link show | grep ib # 使用NetworkManager或手动配置ib0的IP nmcli con add type infiniband con-name ib0 ifname ib0 ip4 192.168.1.10/24 nmcli con up ib0防火墙RDMA通信使用特定的端口例如RoCE使用UDP 4791端口。如果系统防火墙firewalld是开启状态需要放行这些端口。firewall-cmd --permanent --add-port4791/udp firewall-cmd --reload4.3 性能测试验证使用OFED自带的perftest工具包进行双向带宽和延迟测试这是检验RDMA是否正常工作的“试金石”。首先在两台配置好的服务器上分别安装perftestyum install -y perftest在一台服务器上启动ib_write_bw服务端# -d 指定设备名用ibv_devinfo查看 -s 传输大小 -p 监听端口 ib_write_bw -d mlx5_0 -s 65536 -p 18515在另一台服务器上作为客户端发起测试# -d 指定设备名 -s 传输大小 -p 端口 最后是服务端IP ib_write_bw -d mlx5_0 -s 65536 -p 18515 192.168.1.10如果测试成功客户端会打印出接近线速的带宽数据例如对于100G网卡带宽应接近90 Gb/s。同样可以用ib_write_lat测试延迟RDMA操作的延迟通常在微秒级。5. 常见问题排查与故障修复实录即使按照步骤操作也可能会遇到问题。以下是我在多次部署中遇到的典型问题及解决方法。5.1 编译安装阶段问题问题1./install.pl执行失败提示缺少依赖如rpmbuild命令未找到。排查虽然我们安装了Development Tools组但有时rpmbuild会作为一个独立的包。另外麒麟的软件源可能包名有细微差别。解决# 尝试搜索并安装 yum provides */rpmbuild yum install -y rpm-build # 或者安装所有可能的开发包 yum install -y rpm*devel问题2内核模块编译失败错误信息指向内核头文件不匹配。排查这是最常见的问题。运行rpm -qa | grep kernel和uname -r进行对比。确保kernel-develkernel-headers的版本号与uname -r完全一致包括后面的发布版本如-25.ky10。解决从麒麟官方渠道获取与当前运行内核完全一致的.rpm开发包手动强制安装。如果实在找不到最后一个冒险的方法是使用--skip-distro-check和--skip-kernel-check参数运行安装脚本并指定一个相近的内核源码路径。此方法风险极高可能导致系统不稳定仅作为最后手段。./install.pl --basic --skip-distro-check --skip-kernel-check --kernel-sources /usr/src/kernels/uname -r/问题3安装过程中提示“Unloading old drivers...”后卡住或报错。排查系统自带的旧驱动mlx4_coremlx5_core正在被使用可能有网络服务依赖导致卸载失败。解决在运行安装脚本前手动停止可能依赖RDMA的服务某些集群软件、存储客户端。尝试手动卸载旧模块modprobe -r mlx5_ib mlx5_core ib_core ...根据lsmod输出如果模块因“被占用”无法卸载使用lsof或fuser命令查找占用进程并停止它们。5.2 运行时与功能性问题问题4系统重启后Mellanox网卡无法识别或网络不通。排查Initramfs未成功更新导致早期启动阶段无法加载新驱动。解决检查/boot/initramfs-$(uname -r).img的修改时间是否在安装驱动之后。手动重新生成initramfsdracut -f --kver uname -r检查/etc/modules-load.d/或/etc/sysconfig/modules/中是否有确保模块加载的配置。问题5ibstat或ibv_devinfo能看到设备但perftest测试失败报“Couldnt create PD”或“Unable to post send”等错误。排查这通常是用户态库与内核模块版本不匹配或者RDMA资源保护域PD、队列对QP配置问题。也可能是防火墙或网络策略阻止了流量。解决确认版本一致性modinfo mlx5_ib查看内核模块版本ibv_devinfo -v查看用户库版本。确保它们来自同一个OFED发行版。检查RDMA服务确保systemctl status rdma是活动的。检查内存锁定限制RDMA需要锁定内存。检查/etc/security/limits.conf 为运行应用的用户增加memlock限制如* soft memlock unlimited和* hard memlock unlimited。进行逐层测试先用ibv_rc_pingpong一个更简单的测试看是否能通。检查两台主机的IB接口IP是否能互相ping通IPoIB。用tcpdump -i ib0 -n udp port 4791在服务端抓包看客户端测试请求是否到达。问题6网络带宽远低于预期例如100G网卡只能跑到40G。排查这通常是MTU设置不正确或PFC/ECN未正确配置。解决检查并设置MTURoCEv2要求大MTU。将物理以太网口和IB接口的MTU都设置为4092或更大。ip link set ens1f0 mtu 4200 # 物理口MTU ip link set ib0 mtu 4092 # IB口MTU验证PFC配置在交换机和服务端双向确认PFC已在指定优先级上启用。使用ethtool -S ens1f0 | grep -i pfc查看PFC统计信息。调整内核参数可能需要调整RDMA内核参数以获得最佳性能例如echo 65536 /sys/class/infiniband/mlx5_0/ports/1/counters/port_rcv_data # 以及调整 /proc/sys/net/ipv4/tcp_* 相关参数如果使用了IPoIB TCP回退5.3 故障排查速查表现象可能原因排查命令/步骤安装脚本无法开始编译1. 依赖包缺失2. 内核开发包不匹配yum install gcc make kernel-devel-$(uname -r)rpm -qa | grep kernel-devel对比uname -r模块编译失败1. 内核头文件路径错误2. 源码与内核不兼容检查/lib/modules/$(uname -r)/build链接尝试使用--kernel-version和--kernel-sources参数重启后网卡消失1. Initramfs未更新2. 模块未加入启动加载列表lsinitrd /boot/initramfs-*.img | grep mlx5检查/etc/modules-load.d/mlnx.confibstat无输出1. 驱动未加载2. 硬件故障lsmod | grep mlx5_iblspci | grep Mellanoxperftest连接失败1. 防火墙阻止2. IPoIB配置错误3. 子网不匹配firewall-cmd --list-portsip addr show ib0检查两端ib0 IP是否在同一网段带宽性能低下1. MTU设置过小2. PFC未启用3. 中断绑定或CPU亲和性不佳ip link show | grep mtuethtool -a ens1f0检查irqbalance服务和/proc/interrupts整个安装和调优过程本质上是在国产化操作系统生态与国际领先硬件驱动之间搭建一座稳定的桥梁。每一次成功的部署都离不开对细节的严格把控和对原理的深入理解。最深刻的体会是日志dmesgjournalctl -xe和系统工具ethtoolibstat是你的最佳战友遇到问题多查日志多用工具逐层分析远比盲目搜索试错要高效得多。最后在生产环境操作前务必在测试环境充分验证做好回滚方案祝你好运

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价