====== 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 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 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の取得 ==== [[https://www.mellanox.com/products/infiniband-drivers/linux/mlnx_ofed|公式サイト]]から最新のOFEDを取ってくる。 利用規約への同意が必要なので、作業マシンでISOをダウンロードし管理Web画面からアップロードするのが手っ取り早い。 Proxmox VE 7.4はDebian 11.6ベースだが、MLNX_OFEDはDebian 11.3用となっている。メージャーバージョンが同じなら大丈夫だろうってなもんで、これを使う事にする。 ==== ISOの展開 ==== アップロードした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 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 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を使った通信が問題なくできるか確認する。 ===== 参考サイト ===== * [[proxmox_ve_6_3_how_to_build_latest_mlnx_ofed]]