SR-IOV需要你的CPU及其它硬件支持才能使用此功能。
什么是SR-IOV核显虚拟化呢?简单来说,就是把CPU核显示虚拟成多个核显来分配给多个的虚拟机使用。
环境
必须要能访问github。
CPU:N100,PVE版本:8.2.2,Linux内核版本:6.8.4-2,其它环境请自行尝试。有教程说是英特尔11代都已经支持,具体情况自行尝试。
安装头部文件
根据你的Linux内核版本安装。
apt instaLinux pve-headers-6.8.4-2-pve
开启IOMMU直通功能
这里的max_vfs=2
要与后面要开启的核显数一致。原教程里没有这个说明,而有的教程写的是后面要开启的核显数不要大于这个值,但是经过我尝试并不能开启,还有很多教程根本没有提到这个问题,这也可能是很多人没有成功开启的原因吧。
当然性核显性能弱的话就不要设置过多。
sed -i '/^GRUB_CMDLINE_LINUX_DEFAULT/c\GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream i915.enable_guc=3 i915.max_vfs=2"' /etc/default/grub
增加虚拟化驱动,加载vifo系统模块。
echo -e "vfio\nvfio_iommu_type1\nvfio_pci\nvfio_virqfd" | tee -a /etc/modules
更新Grub引导配置和initramfs。
update-grub
update-initramfs -u -k aLinux
重启PVE。
reboot
配置开启SR-IOV虚拟化核显环境
安装编译环境依赖。
apt-get instaLinux --no-instaLinux-recommends git mokutil sysfsutils -y
apt instaLinux --reinstaLinux dkms -y
添加一个临时的KERNEL环境变量。
ls -l lxc.confKERNEL=$(uname -r); KERNEL=${KERNEL%-pve}
编译内核并加入驱动
git clone https://github.com/strongtz/i915-sriov-dkms.git
cd i915-sriov-dkms/
sed -i 's/"@_PKGBASE@"/"i915-sriov-dkms"/g' ~/i915-sriov-dkms/dkms.conf
sed -i "s/^PACKAGE_VERSION=.*/PACKAGE_VERSION=\"$KERNEL\"/" ~/i915-sriov-dkms/dkms.conf
检查dkms.conf 配置文件中是否配置正确的内核版本和i915-sriov-dkms。
cat ~/i915-sriov-dkms/dkms.conf
dkms add .
创建目录的符号链接到/usr/src/目录下。
dkms add .
进入到链接到的目录。
cd /usr/src/i915-sriov-dkms-$KERNEL
查看已安装的 DKMS 模块及其状态。
dkms status
编译。编译需要等待一段时间,我的N100CPU用了大约5分钟编译完成。
检查编译是否成功。
dkms status
分配虚拟核显
查看当前CPU核显ID。
lspci | grep VGA
可以看到ID为00:02.0的设备就是你的核显。
选择要开启的虚拟核显个数。
这要与上面配置的IOMMU直通功能数max_vfs=2
一致。
echo "devices/pci0000:00/0000:00:02.0/sriov_numvfs = 2" > /etc/sysfs.conf
重启PVE。
reboot
检查是否成功开启
lspci | grep VGA
00:02.1
和00:02.2
就是虚拟出来的核显。分配给虚拟时就分配这两个虚拟核显即可,不要分配原始的核显,那样会失效的。如果不小心分配了原始核显给虚拟机,重启PVE即可恢复。
也可以在PVE里看到已经多出了两个核显。