Proxmox VE 7.4でConnectX-4向けMLNX_OFEDを自前ビルドする

  • Proxmox VE 7.4-16
  • ConnectX-4
  • NVIDIA MLNX_OFED 23.07-0.5.0.0

インボックスドライバの状態を確認しておく。

# modinfo mlx5_core.ko 
filename:       /lib/modules/5.15.116-1-pve/kernel/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.ko
license:        Dual BSD/GPL
description:    Mellanox 5th generation network adapters (ConnectX series) core driver
author:         Eli Cohen <eli@mellanox.com>
srcversion:     9360D44A27768A47D5B87A7
alias:          auxiliary:mlx5_core.eth
alias:          pci:v000015B3d0000A2DFsv*sd*bc*sc*i*
alias:          pci:v000015B3d0000A2DCsv*sd*bc*sc*i*
alias:          pci:v000015B3d0000A2D6sv*sd*bc*sc*i*
alias:          pci:v000015B3d0000A2D3sv*sd*bc*sc*i*
alias:          pci:v000015B3d0000A2D2sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001023sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001021sv*sd*bc*sc*i*
alias:          pci:v000015B3d0000101Fsv*sd*bc*sc*i*
alias:          pci:v000015B3d0000101Esv*sd*bc*sc*i*
alias:          pci:v000015B3d0000101Dsv*sd*bc*sc*i*
alias:          pci:v000015B3d0000101Csv*sd*bc*sc*i*
alias:          pci:v000015B3d0000101Bsv*sd*bc*sc*i*
alias:          pci:v000015B3d0000101Asv*sd*bc*sc*i*
alias:          pci:v000015B3d00001019sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001018sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001017sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001016sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001015sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001014sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001013sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001012sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001011sv*sd*bc*sc*i*
alias:          auxiliary:mlx5_core.eth-rep
alias:          auxiliary:mlx5_core.sf
depends:        tls,pci-hyperv-intf,mlxfw,psample
retpoline:      Y
intree:         Y
name:           mlx5_core
vermagic:       5.15.116-1-pve SMP mod_unload modversions 
parm:           debug_mask:debug mask: 1 = dump cmd data, 2 = dump cmd exec time, 3 = both. Default=0 (uint)
parm:           prof_sel:profile selector. Valid range 0 - 2 (uint)

# modinfo mlx5_ib.ko 
filename:       /lib/modules/5.15.116-1-pve/kernel/drivers/infiniband/hw/mlx5/mlx5_ib.ko
license:        Dual BSD/GPL
description:    Mellanox 5th generation network adapters (ConnectX series) IB driver
author:         Eli Cohen <eli@mellanox.com>
srcversion:     8E73EF489C7285961573072
alias:          auxiliary:mlx5_core.rdma
alias:          auxiliary:mlx5_core.multiport
alias:          auxiliary:mlx5_core.rdma-rep
depends:        mlx5_core,ib_core,ib_uverbs
retpoline:      Y
intree:         Y
name:           mlx5_ib
vermagic:       5.15.116-1-pve SMP mod_unload modversions 

公式サイトから最新のOFEDを取ってくる。

利用規約への同意が必要なので、作業マシンでISOをダウンロードし管理Web画面からアップロードするのが手っ取り早い。

Proxmox VE 7.4はDebian 11.6ベースだが、MLNX_OFEDはDebian 11.3用となっている。メージャーバージョンが同じなら大丈夫だろうってなもんで、これを使う事にする。

アップロードしたMLNX_OFEDのISOから中身を取り出す。

インストールスクリプトを書き換える必要があるので、てきとーにマウントして作業フォルダにコピーする。ドットファイルが含まれるので“/.”のドットを忘れずに。

# mkdir /mnt/iso
# mount -t iso9660 /var/lib/vz/template/iso/MLNX_OFED_LINUX-23.07-0.5.0.0-debian11.3-x86_64.iso /mnt/iso
# mkdir ~/ofed2307
# cp -Rp /mnt/iso/. ~/ofed2307/
# cd ~/ofed2307

そのままのインストールスクリプトでは古いMLNX_OFEDパッケージの削除のところで失敗するので、当該箇所を書き換える。

mlnxofedinstallファイルのremove_old_package関数を即returnするように変える。

#
# remove old packages
#
sub remove_old_packages
{
        return; # ★追加
        print_and_log("Removing old packages...\n", (not $quiet));
...

ビルドに必要なツールとヘッダを入れる。

# apt install gcc make dkms pve-headers-$(uname -r)

試しにmlnxofedinstallを実行してみる。普通にやるとディストリビューションチェックで弾かれるので、–skip-distro-checkを付ける。

# ./mlnxofedinstall --skip-distro-check
Logs dir: /tmp/MLNX_OFED_LINUX.22915.logs
General log file: /tmp/MLNX_OFED_LINUX.22915.logs/general.log
(中略)
Checking SW Requirements...
One or more required packages for installing MLNX_OFED_LINUX are missing.
Attempting to install the following missing packages:
chrpath automake tcl tk m4 bison libgfortran4 dpatch libltdl-dev graphviz flex gfortran swig quilt ethtool autoconf debhelper pkg-config autotools-dev

特に初めて実行した場合、上記のようにパッケージ不足のエラーが出る可能性が高い。メッセージに従い追加する。

# apt install chrpath automake tcl tk m4 bison libgfortran4 dpatch libltdl-dev graphviz flex gfortran swig quilt ethtool autoconf debhelper pkg-config autotools-dev

古いMLNX_OFEDが入っている場合、debのインストールに失敗することがある。本来はスクリプト内で削除されるものと追われるが、remove_old_packagesを書き換えちゃったので手動で消す必要がある。

# ./mlnxofedinstall --skip-distro-check
...

Do you want to continue?[y/N]:y

Checking SW Requirements...
Installing new packages
Installing ofed-scripts-23.07...
Installing mlnx-tools-23.07...
Failed to install mlnx-tools DEB
Collecting debug info...
See /tmp/MLNX_OFED_LINUX.52981.logs/mlnx-tools.debinstall.log

メッセージでは「debインストールのログを見ろ」となっているが、同じフォルダ内のgeneral.logの方を見た方が分かりやすかったりする。

# less /tmp/MLNX_OFED_LINUX.52981.logs/general.log 
...

Installing mlnx-tools-23.07...
Running /usr/bin/dpkg -i --force-confmiss '/root/ofed2307/DEBS/mlnx-tools_23.07-0.2307050_amd64.deb'
Failed to install mlnx-tools DEB

dpkg -iで失敗していることが分かる。同じコマンドを実行してみる。

# /usr/bin/dpkg -i --force-confmiss '/root/ofed2307/DEBS/mlnx-tools_23.07-0.2307050_amd64.deb'
dpkg: regarding .../mlnx-tools_23.07-0.2307050_amd64.deb containing mlnx-tools:
 mlnx-tools breaks mlnx-ofed-kernel-utils (<< 5.4)
  mlnx-ofed-kernel-utils (version 4.9-OFED.4.9.4.0.8.1) is present and installed.

...

古いmlnx-ofed-kernel-utilsが悪さをしているのでアンインストール。

# dpkg --purge mlnx-ofed-kernel-utils
(Reading database ... 289858 files and directories currently installed.)
Removing mlnx-ofed-kernel-utils (4.9-OFED.4.9.4.0.8.1) ...

こんな感じでせっせと消していく。

問題が解消されれば

CPUがうんうん唸りを上げてビルドが走るので、重いVMが動いてたり、リソースがカツカツの場合は要注意。

# ./mlnxofedinstall --skip-distro-check
Logs dir: /tmp/MLNX_OFED_LINUX.1597501.logs
General log file: /tmp/MLNX_OFED_LINUX.1597501.logs/general.log

Below is the list of MLNX_OFED_LINUX packages that you have chosen
(some may have been added by the installer due to package dependencies):

ofed-scripts
mlnx-tools
mlnx-ofed-kernel-utils
mlnx-ofed-kernel-dkms
iser-dkms
isert-dkms
srp-dkms
rdma-core
libibverbs1
ibverbs-utils
ibverbs-providers
libibverbs-dev
libibverbs1-dbg
libibumad3
libibumad-dev
ibacm
librdmacm1
rdmacm-utils
librdmacm-dev
mstflint
ibdump
libibmad5
libibmad-dev
libopensm
opensm
opensm-doc
libopensm-devel
libibnetdisc5
infiniband-diags
mft
kernel-mft-dkms
perftest
ibutils2
ibsim
ibsim-doc
ucx
sharp
hcoll
knem-dkms
knem
openmpi
mpitests
dpcp
srptools
mlnx-ethtool
mlnx-iproute2
rshim
ibarr

This program will install the MLNX_OFED_LINUX 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_OFED_LINUX, do not reinstall them.

Do you want to continue?[y/N]:y

Checking SW Requirements...
Installing new packages
Installing ofed-scripts-23.07...
Installing mlnx-tools-23.07...
Installing mlnx-ofed-kernel-utils-23.07...
Installing mlnx-ofed-kernel-dkms-23.07...
Installing iser-dkms-23.07...
Installing isert-dkms-23.07...
Installing srp-dkms-23.07...
Installing rdma-core-2307mlnx47...
Installing libibverbs1-2307mlnx47...
Installing ibverbs-utils-2307mlnx47...
Installing ibverbs-providers-2307mlnx47...
Installing libibverbs-dev-2307mlnx47...
Installing libibverbs1-dbg-2307mlnx47...
Installing libibumad3-2307mlnx47...
Installing libibumad-dev-2307mlnx47...
Installing ibacm-2307mlnx47...
Installing librdmacm1-2307mlnx47...
Installing rdmacm-utils-2307mlnx47...
Installing librdmacm-dev-2307mlnx47...
Installing mstflint-4.16.1...
Installing ibdump-6.0.0...
Installing libibmad5-2307mlnx47...
Installing libibmad-dev-2307mlnx47...
Installing libopensm-5.16.0.MLNX20230719.c143fc96...
Installing opensm-5.16.0.MLNX20230719.c143fc96...
Installing opensm-doc-5.16.0.MLNX20230719.c143fc96...
Installing libopensm-devel-5.16.0.MLNX20230719.c143fc96...
Installing libibnetdisc5-2307mlnx47...
Installing infiniband-diags-2307mlnx47...
Installing mft-4.25.0...
Installing kernel-mft-dkms-4.25.0...
Installing perftest-23.07.0...
Installing ibutils2-2.1.1...
Installing ibsim-0.12...
Installing ibsim-doc-0.12...
Installing ucx-1.15.0...
Installing sharp-3.4.0.MLNX20230719.b557c42d...
Installing hcoll-4.8.3223...
Installing knem-dkms-1.1.4.90mlnx2...
Installing knem-1.1.4.90mlnx2...
Installing openmpi-4.1.5rc2...
Installing mpitests-3.2.20...
Installing dpcp-1.1.40...
Installing srptools-2307mlnx47...
Installing mlnx-ethtool-6.3...
Installing mlnx-iproute2-6.3.0...
Installing rshim-2.0.9...
Installing ibarr-0.1.3...
Selecting previously unselected package mlnx-fw-updater.
(Reading database ... 292223 files and directories currently installed.)
Preparing to unpack .../mlnx-fw-updater_23.07-0.5.0.0_amd64.deb ...
Unpacking mlnx-fw-updater (23.07-0.5.0.0) ...
Setting up mlnx-fw-updater (23.07-0.5.0.0) ...

Added 'RUN_FW_UPDATER_ONBOOT=no to /etc/infiniband/openib.conf

Initializing...
Attempting to perform Firmware update...
Querying Mellanox devices firmware ...

Device #1:
----------

  Device Type:      ConnectX4
  Part Number:      MCX413A-GCA_Ax
  Description:      ConnectX-4 EN network interface card; 50GbE single-port QSFP28; PCIe3.0 x8; ROHS R6
  PSID:             MT_2600110035
  PCI Device Name:  03:00.0
  Base GUID:        1c34da0300XXXXXX
  Base MAC:         1c34daXXXXXX
  Versions:         Current        Available     
     FW             12.28.2006     12.28.2006    
     PXE            3.6.0102       3.6.0102      
     UEFI           14.21.0017     14.21.0017    

  Status:           Up to date


Log File: /tmp/0Vn37mCk_z
Real log file: /tmp/MLNX_OFED_LINUX.1597501.logs/fw_update.log
Device (03:00.0):
        03:00.0 Ethernet controller: Mellanox Technologies MT27700 Family [ConnectX-4]
        Link Width: x4 ( WARNING - device supports x8 )
        PCI Link Speed: 8GT/s

Installation passed successfully
To load the new driver, run:
/etc/init.d/openibd restart

modinfoで出来上がったドライバを確認。

# modinfo mlx5_core
filename:       /lib/modules/5.15.107-1-pve/updates/dkms/mlx5_core.ko
alias:          auxiliary:mlx5_core.eth-rep
alias:          auxiliary:mlx5_core.eth
basedon:        Korg 6.3-rc3
version:        23.07-0.5.0
license:        Dual BSD/GPL
description:    Mellanox 5th generation network adapters (ConnectX series) core driver
author:         Eli Cohen <eli@mellanox.com>
srcversion:     407EDD4D22D57D972676A47
alias:          pci:v000015B3d0000A2DFsv*sd*bc*sc*i*
alias:          pci:v000015B3d0000A2DCsv*sd*bc*sc*i*
alias:          pci:v000015B3d0000A2D6sv*sd*bc*sc*i*
alias:          pci:v000015B3d0000A2D3sv*sd*bc*sc*i*
alias:          pci:v000015B3d0000A2D2sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001023sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001021sv*sd*bc*sc*i*
alias:          pci:v000015B3d0000101Fsv*sd*bc*sc*i*
alias:          pci:v000015B3d0000101Esv*sd*bc*sc*i*
alias:          pci:v000015B3d0000101Dsv*sd*bc*sc*i*
alias:          pci:v000015B3d0000101Csv*sd*bc*sc*i*
alias:          pci:v000015B3d0000101Bsv*sd*bc*sc*i*
alias:          pci:v000015B3d0000101Asv*sd*bc*sc*i*
alias:          pci:v000015B3d00001019sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001018sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001017sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001016sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001015sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001014sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001013sv*sd*bc*sc*i*
alias:          auxiliary:mlx5_core.sf
depends:        tls,mlxdevm,mlx_compat,mlxfw,pci-hyperv-intf,psample
retpoline:      Y
name:           mlx5_core
vermagic:       5.15.107-1-pve SMP mod_unload modversions 
parm:           num_of_groups:Eswitch offloads number of big groups in FDB table. Valid range 1 - 1024. Default 15 (uint)
parm:           debug_mask:debug mask: 1 = dump cmd data, 2 = dump cmd exec time, 3 = both. Default=0 (uint)
parm:           prof_sel:profile selector. Valid range 0 - 3 (uint)
parm:           probe_vf:probe VFs or not, 0 = not probe, 1 = probe. Default = 1 (bool)

# modinfo mlx5_ib
filename:       /lib/modules/5.15.107-1-pve/updates/dkms/mlx5_ib.ko
alias:          auxiliary:mlx5_core.rdma-rep
alias:          auxiliary:mlx5_core.multiport
alias:          auxiliary:mlx5_core.rdma
license:        Dual BSD/GPL
description:    Mellanox 5th generation network adapters (ConnectX series) IB driver
author:         Eli Cohen <eli@mellanox.com>
srcversion:     31CDFA9AAC8B3926D9DF320
depends:        mlx5_core,ib_core,ib_uverbs,mlx_compat
retpoline:      Y
name:           mlx5_ib
vermagic:       5.15.107-1-pve SMP mod_unload modversions 
parm:           dc_cnak_qp_depth:DC CNAK QP depth (uint)

システムを再起動し、ConnectX-4を使った通信が問題なくできるか確認する。

  • virtualization/proxmox_ve_7_4_how_to_build_latest_mlnx_ofed.txt
  • 最終更新: 2023-09-03 20:33
  • by Decomo