复盘:在Ubuntu 20.04下安装OFED驱动

起因

最近收到两台服务器,都搭载了ConnectX-5 EX网卡。由于供应商预装了Ubuntu 20.04操作系统,而我们的后端代码也是基于Ubuntu开发的,因此需要在Ubuntu上安装ConnectX-5网卡的驱动。

问题

尽管供应商已经预装了驱动,但运行我们的服务时出现以下错误:

EAL: /lib/x86_64-linux-gnu/libmlx5.so.1: version `MLX5_1.15' not found (required by so/x86_64/libmlx5-64.so)
EAL: FATAL: Cannot init plugins
EAL: Cannot init plugins

分析

首先怀疑OFED驱动是否已安装,通过运行命令ibv_devinfo查看网卡信息,确认驱动已安装。

按照手册的说法,我们想用英伟达网卡跑TRex那就必须在centos的特定版本下使用,版本对应关系如下:

TRex 版本 OFED 操作系统
2.32及以下 only 4.1 CentOS 7.3
2.33-2.56 only 4.3 CentOS 7.4
2.57和v2.86 only 4.6 CentOS 7.6
2.89及以上 only GA 5.3-1 CentOS 7.9

https://trex-tgn.cisco.com/trex/doc/trex_appendix_mellanox.html#_upgrade_procedure

然后注意到根据文档,使用NVIDIA网卡运行TRex需要特定版本的CentOS和OFED驱动。针对MCX516A系列网卡,需要下载OFED 5.x,并配套使用TRex 2.89版本。

决定重新安装驱动,因为不清楚供应商预装的驱动版本是否有问题。

下载OFED驱动:

https://www.mellanox.com/page/mlnx_ofed_eula?mtag=linux_sw_drivers&mrequest=downloads&mtype=ofed&mver=MLNX_OFED-5.4-3.7.5.0&mname=MLNX_OFED_LINUX-5.4-3.7.5.0-ubuntu20.04-x86_64.tgz

按以下步骤安装:

tar -xf MLNX_OFED_LINUX-5.4-3.7.5.0-ubuntu20.04-x86_64.tgz
cd MLNX_OFED_LINUX-5.4-3.7.5.0-ubuntu20.04-x86_64 sudo ./mlnxofedinstall --with-mft --with-mstflint --dpdk --upstream-libs

安装过程中遇到问题:

在安装mlnx-ofed-kernel-dkms时失败,出现类似以下提示信息:

Error: mlnx-ofed-kernel-dkms installation failed!
Collecting debug info... See:
/tmp/MLNX_OFED_LINUX.1976.logs/mlnx-ofed-kernel-dkms.debinstall.log
Removing newly installed packages...

查看日志发现以下提示信息:

Copying build sources from '/var/lib/dkms/mlnx-ofed-kernel/5.4/build/../build' to '/usr/src/ofa_kernel/5.15.0-58-generic' ...
/bin/cp: cannot stat 'Module*.symvers': No such file or directory

关键词是5.15.0-58-generic,即内核版本可能存在问题。

现有的安装方式在某些地方找不到对应的安装文件。

尝试复制报错中提到的文件到相应位置,但并未解决问题,因此决定尝试更换内核版本。

升级系统软件库和内核:

apt-get install build-essential dkms

这个过程较慢,并且在安装升级dkms时出现错误,进一步证实问题可能是由当前内核版本引起的。

通过搜索得知,Ubuntu 20.04 + 5.4内核可以使用MLNX_OFED_LINUX-4.9-6.0.6.0驱动。

而Ubuntu 20.04 + 5.15内核只能使用默认版本的4.0驱动。

这篇博客中,作者的系统为Ubuntu 20.04,通过安装最新版的MLNX_OFED_LINUX-5.8-3.0.7.0成功解决了类似问题。

由于我们的系统内核版本也是5.15(似乎5.15是Ubuntu 20.04的默认内核版本),决定尝试安装最新的OFED驱动,看是否能解决问题。

果然,在安装MLNX_OFED_LINUX-5.8-3.0.7.0时,mlnx-ofed-kernel-dkms成功安装。

问题解决。

总结

整个问题主要是由于不同的内核版本导致文件路径不同,进而导致安装过程中某些库无法按预期安装而出现问题。

为什么使用最新的OFED驱动解决了问题呢?推测是最新驱动补充了之前缺失的某些文件,因此后续安装过程能够正常进行。

例如,在OFED 5.4中,某个安装所需的文件F位于A处,但安装程序却在B处查找该文件,导致报错。而在OFED 5.8中,该安装所需的文件F被移回到B处,此时不管去哪里查找都能找到文件F,因此安装可以正常进行。

ref:

1、https://skyao.io/learning-ubuntu-server/docs/router/update-drivers.html

2、https://blog.csdn.net/weixin_45485072/article/details/132892799

【问题复盘】在Ubuntu 20.04下安装OFED驱动的更多相关文章

  1. [硬件配置]记录Ubuntu 14.04 下安装无线网卡驱动解决无法连接WiFi的过程

    新电脑安装了Ubuntu 14.04,但是网络连接中只有以太网而没有WiFi的选项. 打开System Setting系统设置-Software&Updates软件&更新-Additi ...

  2. Ubuntu 20.04上安装MySQL教程,ubuntu安装mysql

    在Ubuntu 20.04上安装MySQL教程 先决条件 确保您以具有sudo特权的用户身份登录. 在Ubuntu上安装MySQL 在撰写本文时,Ubuntu存储库中可用的MySQL的最新版本是MyS ...

  3. Ubuntu 14.04下安装功能强大的屏幕截图软件 Shutter

    [注释]试用了一下,果然很强大,牛逼 一款功能强大的屏幕截图软件——Shutter,Shutter最基本的就是截图功能了,在设计上可以自由选定区域,同时选定之 后依然可以通过上下左右四个地方来改变选区 ...

  4. Angularjs学习---angularjs环境搭建,ubuntu 12.04下安装nodejs、npm和karma

    1.下载angularjs 进入其官网下载:https://angularjs.org/‎,建议下载最新版的:https://ajax.googleapis.com/ajax/libs/angular ...

  5. Ubuntu 12.04 下安装 Eclipse

    方法一:(缺点是安装时附加openjdk等大量程序并无法去除,优点是安装简单) $ sudo apt-get install eclipse 方法二:(优点是安装内容清爽,缺点是配置麻烦)1.安装JD ...

  6. 分布式进阶(四)Ubuntu 14.04下安装Tomcat 6

    Ubuntu 10.04下安装Tomcat 6 1,下载apache-tomcat6, 地址链接:http://archive.apache.org/dist/tomcat/tomcat-6/v6.0 ...

  7. 分布式进阶(二)Ubuntu 14.04下安装Dockr图文教程(一)

    当前,完全硬件虚拟化技术(KVM.Xen.Hyper-V 等)能在一个物理主机上很好地运行多个互相独立的操作系统,但这也带来一些问题:性能不佳,资源浪费,系统反应迟缓等.有时候对用户来说,完全的硬件虚 ...

  8. Ubuntu 14.04 下安装 OpenCV

    参考: Installation in Linux Error compiling OpenCV, fatal error: stdlib.h: No such file or directory 图 ...

  9. Ubuntu 13.04下安装WPS for Linux

    [日期:2013-06-03]   有人说Linux下不是有open office 和libre office么?是啊,可是将windows下的doc文档或者ppt放到Libreoffice上打开的时 ...

  10. Ubuntu 12.04下安装QQ 2012 Beta3(转)

    Ubuntu 12.04下安装QQ 2012 Beta3   由于wine的发展非常迅速.现在网上的利用老版本的wine来安装QQ2012的教程已经有些过时了.实际上操作起来非常简单: 第一步:Ctr ...

随机推荐

  1. 【Flyway】初识Flyway,将Flyway集成于Spring项目

    什么是Flyway Flyway官方网站:点击这里 官方描述: Flyway extends DevOps to your databases to accelerate software deliv ...

  2. 详解TCP网络协议栈的工作原理

    本文分享自华为云社区<网络通信的神奇之旅:解密Linux TCP网络协议栈的工作原理>,作者: Lion Long . 一.TCP网络开发API TCP,全称传输控制协议(Transmis ...

  3. 我真的想知道,AI编译器中的IR是什么?

    随着深度学习的不断发展,AI 模型结构在快速演化,底层计算硬件技术更是层出不穷,对于广大开发者来说不仅要考虑如何在复杂多变的场景下有效的将算力发挥出来,还要应对 AI 框架的持续迭代. AI 编译器就 ...

  4. 关于自定义程序打包成jar包,并读取配置

    前言 在实际开发过程中,我们有时候有把你编写的一段程序打成jar包的需求,而一些配置是需要去配置文件里面读取关于这项目的一些配置,本人在网络上查询了众多的资料,总的来说可以归为3类 1.从数据库读取配 ...

  5. tcpdump抓指定端口/ip的数据包

    抓指定端口,这里以7070端口为例 tcpdump -i ens192 port 7070 -s 0 -l -A -w /chris/70.pcap ens192是网卡  抓完ctrl c停止 抓指定 ...

  6. 这样拆分和压缩css代码

    在[拆分]和[压缩]css代码之前,首先要配置 loader 处理不同的 css 资源,因为 webpack 没有默认可处理 css 资源的规则,具体可参考这一篇 webpack处理css/less资 ...

  7. Unity的UnityStats: 属性详解与实用案例

    UnityStats 属性详解 UnityStats 是 Unity 引擎提供的一个用于监测游戏性能的工具,它提供了一系列的属性值,可以帮助开发者解游戏的运行情况,从而进行优化.本文将详细介绍 Uni ...

  8. [超详细] GraalVM打包含有JNI的本地镜像

    GraalVM 是一种高性能.多语言通用虚拟机和编译器技术.它由 Oracle 开发并开源,旨在为不同的编程语言和应用场景提供统一的运行时环境和编译器平台.以下是 GraalVM 的一些主要特点和功能 ...

  9. 【实践篇】DDD脚手架及编码规范

    一.背景介绍 我们团队一直在持续推进业务系统的体系化治理工作,在这个过程中我们沉淀了自己的DDD脚手架项目.脚手架项目是体系化治理过程中比较重要的一环,它的作用有两点: (1)可以对新建的项目进行统一 ...

  10. uni-app+h5puls 编写相机拍照

    <template> <view class="camera-page"> <image :src="imgSrc" v-if=& ...