====== 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が有効になってない、有効か確認したい場合はページ後半を参照。
==== mlx4_coreモジュールの設定 ====
/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以下でなければならない。
|}
==== initramfsの更新と確認 ====
confファイルを作ったら、initramfsを更新しマシンを再起動する。
# update-initramfs -u -k all
# reboot
上手く設定できてれば、指定数のVFがPCIデバイスとして生えてくる。
{{ :virtualization:pve_connectx3_sriov_vfs.png |}}
prove_vfを設定すると、ホスト側でネットワークデバイスとして認識される。下図はprobe_vf=4,0,0とした時のip linkの結果だが、物理ポート1に4つのVFを指定してるハズなのに、ens1とens1d1の両方にVFが出来てるのは何故…
{{ :virtualization:pve_connectx3_sriov_vf_probes.png |}}
===== カードのSR-IOV設定の有効化 =====
上記の設定で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のインストール ====
[[https://www.mellanox.com/products/adapter-software/firmware-tools|公式サイト]]から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の有効化 ====
カードの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.
===== 参考サイト =====
* [[https://community.mellanox.com/s/article/howto-configure-sr-iov-for-connectx-3-with-kvm--ethernet-x|HowTo Configure SR-IOV for ConnectX-3 with KVM (Ethernet)]]
* [[https://community.mellanox.com/s/article/howto-configure-sr-iov-vfs-on-different-connectx-3-ports|HowTo Configure SR-IOV VFs on Different ConnectX-3 Ports]]
* [[https://community.mellanox.com/s/article/howto-set-virtual-network-attributes-on-a-virtual-function--sr-iov-x|HowTo Set Virtual Network Attributes on a Virtual Function (SR-IOV)]]
* [[https://docs.mellanox.com/spaces/viewspace.action?key=MLNXOFEDv492240|MLNX_OFED Documentation Rev 4.9-2.2.4.0 LTS - MLNX_OFED v4.9-2.2.4.0 LTS - Mellanox Docs]]
* [[https://ja-jp.facebook.com/notes/proxmox-ve-%E4%BC%BA%E6%9C%8D%E5%99%A8%E8%99%9B%E6%93%AC%E5%8C%96%E7%AE%A1%E7%90%86%E5%B9%B3%E5%8F%B0-%E4%BD%BF%E7%94%A8%E8%80%85%E7%A4%BE%E5%9C%98/%E6%9C%89%E9%97%9C%E6%96%BC-pve-5-%E5%A6%82%E4%BD%95%E5%AE%89%E8%A3%9D-mft-tools-%E4%BB%A5%E5%8F%8A%E9%96%8B%E5%95%9F-mellanox-sr-iov/858765690958660/|有關於 PVE 5 如何安裝 mft tools 以及開啟 Mellanox SR-IOV | Facebook]]
* [[https://that.guru/blog/sriov-mellanox-connectx-3/|Configuring SR-IOV for a Mellanox ConnectX-3 NIC | that.guru]]
* [[https://forums.servethehome.com/index.php?threads/how-to-enable-sr-iov-on-connectx-3.24321/|How to enable SR-IOV on Connectx-3 | ServeTheHome Forums]]
* [[https://metonymical.hatenablog.com/entry/2018/04/11/193408|CentOS7でSR-IOV設定 - Metonymical Deflection]]