virtualization:proxmox_ve_6_3_how_to_use_connectx3_sr_iov

Proxmox VE 6.3でConnectX-3のSR-IOVを使う

  • Proxmox VE 6.3-3
  • Supermicro X10DRi
  • Mellanox ConnectX-3 Pro EN (MCX314A-BCCT)

ConnectXカードのSR-IOV設定が有効になっていれば、confファイルを1つ作るだけでSR-IOVが使えるようになる。

カードのSR-IOVが有効になってない、有効か確認したい場合はページ後半を参照。

/etc/modprobe.d/mlx4.confに以下の記述を追加する。

options mlx4_core port_type_array=2,2 num_vfs=4,0,0 probe_vf=0,0,0

パラメータの意味は下表のとおり。

パラメータ 引数 説明
port_type_array p1, p2 カードの物理ポートの通信プロトコルを指定する。
p1がポート1, p2がポート2を表し、値は1=InfiniBand、2=Ethernetを表す。
num_vfs p1, p2, p1+2 物理ポートごとに生成されるVF数を指定する。
p1がポート1, p2がポート2, p1+2が両ポートに属するVFの数を表す。各値の合計はファームウェアのNUM_OF_VFS以下でなければならない。
probe_vfs p1, p2, p1+2 ホストでネットワークデバイスとして検出するVF数を指定する。
0以上を指定すると、VFがホスト側にネットワークデバイスとして認識されるようになる。 引数の意味と制約条件はnum_vfsと同様。加えて合計値はnum_vfs以下でなければならない。

confファイルを作ったら、initramfsを更新しマシンを再起動する。

# update-initramfs -u -k all
# reboot

上手く設定できてれば、指定数のVFがPCIデバイスとして生えてくる。

prove_vfを設定すると、ホスト側でネットワークデバイスとして認識される。下図はprobe_vf=4,0,0とした時のip linkの結果だが、物理ポート1に4つのVFを指定してるハズなのに、ens1とens1d1の両方にVFが出来てるのは何故…

上記の設定でVFが出てこない場合、カードのファームウェアのSR-IOVとVF数の設定を確認する。

PVEのホスト側にコンパイラやMFT (Mellanox Firmware Tools)を入れる事になるので、環境を汚したくなければ別マシンで確認&設定を行ってもよい。

MFTのインストールに必要なツールチェイン類を入れる。

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

もしかすると、非商用リポジトリを追加しとかないとダメかも?

# echo 'deb http://download.proxmox.com/debian/pve buster pve-no-subscription' >> /etc/apt/sources.list

公式サイトからMFTのDebian向けパッケージを取ってくる。本記事執筆時は4.16.0-105が最新だった。

# wget https://www.mellanox.com/downloads/MFT/mft-4.16.0-105-x86_64-deb.tgz

展開してインストールスクリプトを実行。

# tar -xvf ./mft-4.16.0-105-x86_64-deb.tgz
# cd mft-4.16.0-105-x86_64-deb/
# ./install.sh

MFTを使うにはmstを起動しておく必要がある。

# mst start
Starting MST (Mellanox Software Tools) driver set
Loading MST PCI module - Success
Loading MST PCI configuration module - Success
Create devices

mlxconfigでカードの状態を確認する。

表示されたConfigurationsで、SRIOV_ENがTrue、NUM_OF_VFSが1以上になっていれば、カードのSR-IOVは有効になっている。

# mlxconfig q

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

Device type:    ConnectX3Pro    
Device:         /dev/mst/mt4103_pciconf0

Configurations:                              Next Boot
         SRIOV_EN                            True(1)         
         NUM_OF_VFS                          8               
         LOG_BAR_SIZE                        3               
         BOOT_OPTION_ROM_EN_P1               True(1)         
         BOOT_VLAN_EN_P1                     False(0)        
         BOOT_RETRY_CNT_P1                   0               
         LEGACY_BOOT_PROTOCOL_P1             PXE(1)          
         BOOT_VLAN_P1                        1               
         BOOT_OPTION_ROM_EN_P2               True(1)         
         BOOT_VLAN_EN_P2                     False(0)        
         BOOT_RETRY_CNT_P2                   0               
         LEGACY_BOOT_PROTOCOL_P2             PXE(1)          
         BOOT_VLAN_P2                        1               
         IP_VER_P1                           IPv4(0)         
         IP_VER_P2                           IPv4(0)         
         CQ_TIMESTAMP                        True(1)

カードのSR-IOVが有効になっていなければ有効化する。

NUM_OF_VFSには1~127を指定できるようだ。最大値はPCI BARサイズやシステムのリソース量に制限されるので、まぁほどほどに。

# mlxconfig -d /dev/mst/mt4103_pciconf0 set SRIOV_EN=1 NUM_OF_VFS=16

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

Device type:    ConnectX3Pro    
Device:         /dev/mst/mt4103_pciconf0

Configurations:                              Next Boot       New
         SRIOV_EN                            False(0)        True(1)
         NUM_OF_VFS                          8               16            

 Apply new Configuration? (y/n) [n] : y
Applying... Done!
-I- Please reboot machine to load new configurations.
  • virtualization/proxmox_ve_6_3_how_to_use_connectx3_sr_iov.txt
  • 最終更新: 2021-01-18 13:33
  • by Decomo