【問題覆盤】在Ubuntu 20.04下安裝OFED驅動

dayceng發表於2023-10-29

覆盤:在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
image-20231029141524102

按以下步驟安裝:

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

相關文章