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