SR-IOVを使えば仮想マシン・コンテナでホストのデバイスを共有できる。有効にする手順はCPUがintelかAMDかで変わる。AMDの場合は明示的にブート時にiommuを有効にするカーネルパラメータを渡さないといけない。
Bash
$ sudo apt update
$ sudo apt install mstflint
$ sudo mstconfig query
Device #1:
----------
Device type: ConnectX3
Device: /sys/bus/pci/devices/0000:02:00.0/config
Configurations: Next Boot
SRIOV_EN True(1) #SRIOV_EN=1が必要
NUM_OF_VFS 8 #NUM_OF_VFSは必要なVF数に設定しておく
LINK_TYPE_P1 VPI(3)
LINK_TYPE_P2 VPI(3)
LOG_BAR_SIZE 3
BOOT_PKEY_P1 0
BOOT_PKEY_P2 0
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)
$ sudo mstconfig -d 02:00.0 set SRIOV_EN=1 NUM_OF_VFS=8
$ sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="amd_iommu=on iommu=pt quiet" #AMD製CPUの場合のみamd_iommu=onを追加する。intel製では不要(intel_iommu=onを追加してもよい)
$ sudo update-grub
$ sudo nano /etc/modprobe.d/mlx4_core.conf #proxmox veではmlx4.conf
options mlx4_core debug_level=1 port_type_array=1,1 num_vfs=4,4,0 probe_vf=4,4,0
$ sudo update-initramfs -u
$ sudo reboot now
https://nofu.jp/wiki/virtualization/proxmox_ve_6_3_how_to_use_connectx3_sr_iov