SR-IOV
Ensure IOMMU Is Activated
First step of this process is to make sure that your hardware is even capable of this type of virtualization. You need to have a motherboard, CPU, and BIOS that has an IOMMU controller and supports Intel-VT-x and Intel-VT-d or AMD-v and AMD-vi. Some motherboards use different terminology for these, for example they may list AMD-v as SVM and AMD-vi as IOMMU controller.
Update Bootloader
Update Kernel Parameters
**NOTE** Be sure to replace intel_iommu=on
with amd_iommu=on
if you're running on AMD instead of Intel.
Grub2
# /etc/default/grub
- GRUB_CMDLINE_LINUX_DEFAULT="quiet"
+ GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt
Systemd
# /etc/kernel/cmdline
- root=ZFS=rpool/ROOT/pve-1 boot=zfs
+ root=ZFS=rpool/ROOT/pve-1 boot=zfs intel_iommu=on iommu=pt
Rebuild Bootloader Options
Grub
update-grub
systemd-boot
bootctl update
Proxmox
pve-efiboot-tool refresh
Enable Virtual Functions
Find the link name you want to add virtual function to using ip link
. In this scenario we're going to say we want to add 4 virtual functions to link eth2
. You can find the maximum number of virtual function possible by reading the sriov_totalvfs
from sysfs...
cat /sys/class/net/enp10s0f0/device/sriov_totalvfs
7
To enable virtual functions you just echo
the number you want to sriov_numvfs
in sysfs...
echo 4 > /sys/class/net/enp10s0f0/device/sriov_numvfs
Make Persistent
Sysfs is a virtual file system in Linux kernel 2.5+ that provides a tree of system devices. This package provides the program 'systool' to query it: it can list devices by bus, class, and topology.
In addition this package ships a configuration file /etc/sysfs.conf which allows one to conveniently set sysfs attributes at system bootup (in the init script etc/init.d/sysfsutils).
apt install sysfsutils
Configure sysfsutils
To make these changes persistent, you need to update /etc/sysfs.conf
so that it gets set on startup.
echo "class/net/eth2/device/sriov_numvfs = 4" >> /etc/sysfs.conf