前言
写在前面:Mellanox 网卡、OFED 与本次编译的关系说明
在开始编译和安装 MLNX-EN / OFED 之前,有一个非常关键、但经常被忽略的问题需要先说明清楚:
Mellanox 网卡是什么?
我现在编译的这些软件是干什么用的?
如果机器上没有 Mellanox 网卡,安装还有意义吗?
如果你是第一次接触 OFED 或 mlnx-en,强烈建议先读完这一节,它可以帮你避免后续很多不必要的疑惑。
一句话先说明白(结论先行)
👉Mellanox 网卡是一类高性能网卡硬件(现归 NVIDIA)
👉mlnx-en / OFED 是专门为这类网卡提供的驱动和工具软件栈
如果机器上没有 Mellanox 网卡:
- 软件可以正常编译、安装
- 但不会真正“用起来”,也不会替代现有网卡驱动
一、什么是 Mellanox 网卡?
Mellanox(现 NVIDIA Networking)主要面向以下场景:
- 数据中心高速网络
- HPC / AI 集群
- RDMA / RoCE
- 高性能存储网络
与普通服务器网卡相比,Mellanox 网卡的定位完全不同:
| 对比项 | 普通网卡(e1000 / ixgbe) | Mellanox 网卡 |
|---|---|---|
| 带宽 | 1G / 10G | 25G / 40G / 100G / 200G |
| 延迟 | 毫秒级 | 微秒级 |
| RDMA | 不支持 | 原生支持 |
| CPU 占用 | 较高 | 很低 |
| AI / HPC | 不适合 | 核心组件 |
常见型号包括:
- ConnectX-4 / ConnectX-5
- ConnectX-6 / ConnectX-6 Dx
- ConnectX-7
二、mlnx-en / OFED 是做什么的?
mlnx-en / OFED 并不是“普通网络驱动”,而是一整套面向 Mellanox 网卡的专用软件栈。
它们在系统中的位置可以理解为:
Mellanox 网卡(硬件) ↓ mlx5_core(内核驱动) ↓ OFED / mlnx-en(本次编译安装的软件) ↓ RDMA / 高速通信 / AI / 存储应用这套软件的主要作用包括:
- 提供 Mellanox 网卡的内核驱动
- 提供 RDMA / RoCE 所需的用户态库
- 支持高性能网络、存储和计算通信
👉它不是给普通网卡使用的
三、为什么装完后“看不到 Mellanox 网卡”?
在很多环境中,安装完成后执行:
ethtool-i ens33可能看到的是:
driver: e1000这通常意味着:
- 当前机器使用的是普通网卡
- 或运行在虚拟机中
- 或 Mellanox 网卡并不在这台机器上
这不是安装失败,而是硬件本身不匹配。
mlnx-en / OFED 的安装不会影响原有网卡的正常使用。
四、那为什么还要编译安装 mlnx-en / OFED?
常见原因包括:
场景一:为目标服务器提前准备环境
- AI / HPC 服务器
- RDMA 网络
- 高性能存储节点(Ceph、Lustre、NFS-RDMA)
在正式部署前,先验证:
- 内核是否兼容
- OFED 是否能成功编译
场景二:内核版本较新或定制化
在一些国产或定制 Linux 系统中:
- 内核版本较新
- 官方预编译 OFED 包不匹配
此时只能通过源码编译 mlnx-en / OFED来解决兼容问题。
此次使用的BigCloud就是基于华为欧拉Euler的Linux系统,没有现场的安装包,只能自行编译
五、如何确认当前机器是否有 Mellanox 网卡?
可以通过以下命令快速确认:
lspci|grep-i mellanox如果存在 Mellanox 网卡,会看到类似输出:
Mellanox Technologies MT28908 ConnectX-6 Dx小结
- Mellanox 网卡是高性能网络硬件
- mlnx-en / OFED 是其配套的驱动和工具
- 没有 Mellanox 网卡,软件可以安装但不会生效
- 本文后续内容将专注于如何正确编译和安装 mlnx-en / OFED
配置VMnet8虚拟网络编辑器
如图配置,NAT网段和DHCP可以自行规划
这一步是为了检查,VMnet8是否真实并正确的配置到了虚拟网卡中
这里的配置要与上面的配置相符合
安装BCLinux系统
挂载BCLinux镜像;VMware 网络选用VMnet8(NAT);配置最低2核2G运存+20G硬盘
配置好后启动VM虚拟机,正常安装即可,安装时软件类型选择Server(CLI命令行界面的服务器)
配置BCLinxu的IP
BCLinux采用RPM包管理器,系统类似于CentOS/Rocky/RHEL
备份网络配置文件,并修改
cd /etc/sysconfig/network-scripts/ cp ifcfg-ens33 ifcfg-ens33.bak vim ifcfg-ens33修改ifcfg-ens33文件
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=none # 改为none,表示静态IP DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=a11211da-5242-43d7-9dbb-2a7340e72317 DEVICE=ens33 ONBOOT=yes # 开机自启动 IPADDR=172.20.0.88 # 表示本机静态IP PREFIX=24 # 掩码24位 GATEWAY=172.20.0.2 # VMware虚拟网络编辑器的网关 MACADDR=00:50:56:AB:F0:88 # MAC地址,可不写 DNS1=8.8.8.8 # 配置三个DNS DNS2=114.114.114.114 DNS3=223.5.5.5修改完后重启网络服务
systemctl restart NetworkManager验证网络配置是否生效
ip addr ip link测试主机与外网,也OK,然后就可以用主机上SSH客户端连接,比如XTerminal、FInalShell等
ping 172.20.0.2 ping 8.8.8.8挂载MLNX_EN镜像
上传镜像到/root下,然后挂载iso文件
mkdir -p /mnt/mlnx # 把这个ISO文件当作一个虚拟光盘来用,挂载到/mnt/mlnx mount -o loop /root/mlnx-en-23.10-5.1.4.0-bclinux21.10sp2-x86_64.iso /mnt/mlnx提示 WARNING是正常的
验证
ls -l /mnt/mlnx/安装编译依赖
安装基本工具
dnf update # 只需要更新源即可,软件可不更新 dnf install -y perl net-tools vim curl wget sudo openssh-server open-vm-tools systemctl enable vmtoolsd --now # 配置开机自启动open-vm-tool systemctl status vmtoolsd # 查看vmtool是否运行 vmware-toolbox-cmd -v # 查看vmtool版本安装编译依赖
dnf install -y gcc make perl rpm-build \ elfutils-libelf-devel elfutils-devel我们默认只有正常内核,编译安装需要开发版本的内核,没有就需要安装
安装要安装正常内核对应版本的开发内核,正常内核是0208,开发版本也要0208,要完全匹配
[root@BCLinux ~]# uname -r # 当前使用的常规内核版本 4.19.90-2107.6.0.0208.16.oe1.bclinux.x86_64 [root@BCLinux ~]# rpm -q kernel-devel # 查找是否有开发版本的内核(为空就是没有) kernel-devel-4.19.90-2107.6.0.0208.16.oe1.bclinux.x86_64 [root@BCLinux ~]# rpm -q kernel # 查找是否有常规版本的内核 kernel-4.19.90-2107.6.0.0208.16.oe1.bclinux.x86_64 # 查看dnf源可提供内核的列表 dnf list --showduplicates kernel # 安装,只要在kernel后面加一个devel就好了,或者用下面的方法安装 dnf install -y kernel-devel-4.19.90-2107.6.0.0208.16.oe1.bclinux pm -q kernel-devel # 查看是否有开发版本的内核 ls -ld /lib/modules/$(uname -r)/build # 查看当前kernel,是否具备“可用于编译内核模块”的开发环境如果上面的你看不明白,之间运行下面的命令安装内核开发包即可
uname -r # 查看kernel版本 dnf install -y kernel-devel-$(uname -r) # 安装当前kernel版本的内核开发包 rpm -q kernel-devel-$(uname -r) # 查看是否安装成功 ls -ld /lib/modules/$(uname -r)/build # 查看当前kernel,是否具备“可用于编译内核模块”的开发环境理想输出内容
安装createrepo与createrepo_c
dnf install -y createrepo createrepo_c编译安装MLNX_EN
可以开启XTerminal服务器性能监控,这样可以在编译时监测服务器状态,因为编译比较耗时,通过监测服务器状态可以辅助确定,服务器也没有在编译时卡死
开始编译安装
cd /mnt/mlnx ./install \ --force \ --without-fw-update \ --add-kernel-support \ --skip-repo参数说明
--force:BCLinux 必须--without-fw-update:不刷固件(生产必选)--add-kernel-support:为当前内核现场编译--skip-repo:不创建 yum repo(可减少依赖)
监测编译过程,排查编译是否正常
现在就开始编译
并且能看到CPU一直再跑
通过以下命令可以更准确确定具体状态,可以多开命令窗口分别执行命令进行监测
# 确认“编译相关进程是否还活着”,rpmbuild打包RPM,make/gcc编译,mlnx安装 ps -ef | egrep 'rpmbuild|make|gcc|mlnx' | grep -v egrep watch -n 1 "ps -ef | egrep 'rpmbuild|make|gcc|mlnx' | grep -v egrep" # r>0且不断变化,us+sy高,CPU忙,id很低,wa<10,则是正常编译中; # 如果CPU空,us≈0,id时间>90,有可能是卡死了; vmstat 1 # 实时查看编译安装日志,能够看出编译具体的进度以及情况 tail -f /tmp/mlnx-en-23.10-5.1.4.0-4.19.90-2107.6.0.0208.16.oe1.bclinux.x86_64/mlnx_iso.10220_logs/mlnx_ofed_iso.10220.log # 查看缓存空间,如果到80%会爆内存失败 watch -n 2 'df -h /tmp'理想输出内容
编译安装成功
理想输出内容
[root@BCLinux ~]# cd /mnt/mlnx [root@BCLinux mlnx]# [root@BCLinux mlnx]# ./install \ > --force \ > --without-fw-update \ > --add-kernel-support \ > --skip-repo Note: This program will create mlnx-en TGZ for bclinux21.10sp2 under /tmp/mlnx-en-23.10-5.1.4.0-4.19.90-2107.6.0.0208.16.oe1.bclinux.x86_64 directory. See log file /tmp/mlnx-en-23.10-5.1.4.0-4.19.90-2107.6.0.0208.16.oe1.bclinux.x86_64/mlnx_iso.5883_logs/mlnx_ofed_iso.5883.log Checking if all needed packages are installed... Building mlnx-en RPMS . Please wait... Created /tmp/mlnx-en-23.10-5.1.4.0-4.19.90-2107.6.0.0208.16.oe1.bclinux.x86_64/mlnx-en-23.10-5.1.4.0-bclinux21.10sp2-ext.tgz Installing /tmp/mlnx-en-23.10-5.1.4.0-4.19.90-2107.6.0.0208.16.oe1.bclinux.x86_64/mlnx-en-23.10-5.1.4.0-bclinux21.10sp2-ext /tmp/mlnx-en-23.10-5.1.4.0-4.19.90-2107.6.0.0208.16.oe1.bclinux.x86_64/mlnx-en-23.10-5.1.4.0-bclinux21.10sp2-ext/install --force --force --without-fw-update Logs dir: /tmp/mlnx-en.1098691.logs General log file: /tmp/mlnx-en.1098691.logs/general.log This program will install the mlnx-en package on your machine. Note that all other Mellanox, OEM, OFED, RDMA or Distribution IB packages will be removed. Those packages are removed due to conflicts with mlnx-en, do not reinstall them. Uninstalling MLNX_EN driver Starting mlnx-en-23.10-5.1.4.0 installation ... Verifying... ######################################## Preparing... ######################################## Installing mlnx-en-utils 23.10 RPM Verifying... ######################################## Preparing... ######################################## Updating / installing... mlnx-en-utils-23.10-5.1.4.0.gede624b.b######################################## Installing mlnx_en 23.10 RPM Verifying... ######################################## Preparing... ######################################## Updating / installing... mlnx_en-23.10-5.1.4.0.gede624b.kver.4.######################################## depmod: WARNING: Ignored deprecated option -r Installing mlnx-en-sources 23.10 RPM Verifying... ######################################## Preparing... ######################################## Updating / installing... mlnx-en-sources-23.10-5.1.4.0.gede624b######################################## Installing mlnx-en-doc 23.10 RPM Verifying... ######################################## Preparing... ######################################## Updating / installing... mlnx-en-doc-23.10-5.1.4.0.gede624b.bcl######################################## Installing user level RPMs: Verifying... ######################################## Preparing... ######################################## Verifying... ######################################## Preparing... ######################################## Installation finished successfully. Verifying... ################################# [100%] Preparing... ################################# [100%] Updating / installing... 1:mlnx-fw-updater-23.10-5.1.4.0 ################################# [100%] Skipping FW update. Configuring /etc/security/limits.conf. To load the new driver, run: /etc/init.d/mlnx-en.d restart验证安装是否成功
/etc/init.d/mlnx-en.d restart # 重启服务 lsmod | grep mlx # 查看是否有模块 ethtool -i ens33 # 没有Mellanox网卡,只能看一下ens33了 ofed_info -s # 是否右版本 rpm -qa | grep mlnx # 查看安装包在该步骤中,安装脚本会生成一个mlnx-en-*-ext.tgz安装包。
该安装包中已包含针对当前系统内核版本编译完成的驱动模块,因此后续在相同内核版本的系统上安装时,无需再次进行源码编译。
需要注意的是,该安装包与编译时所使用的内核版本强绑定,当系统内核发生变化(如内核升级或重新编译)时,需要重新编译并生成新的安装包。
| 场景 | 是否可用 |
|---|---|
| 同一台机器重装系统(内核没变) | ✅ |
| 多台机器,内核版本完全一致 | ✅ |
| 做系统镜像 / 批量部署 | ✅ |
| 离线环境快速安装 | ✅ |
| 场景 | 结果 |
|---|---|
内核小版本变化(uname -r不一致) | ❌ |
| 内核重新打补丁 | ❌ |
| 内核重编 | ❌ |
| 升级 kernel | ❌(需重新编译) |