Proxmox核显开启SR-IOV直通给Win11虚拟机
Contents
环境信息
- CPU: i5-12500T (核显UHD770)
- PVE:8.2.2
- Kernel: 6.8.4
BIOS设置
- 开启VT-d
- 开启VT-x
- 开启IOMMU
- 开启SR-IOV
调整内核
因为需要编译i915-sriov-dkms 这个内核相关的项目
在不同的内核编译会出现兼容性问题
比如我试过6.2.16、6.8.4、6.5.13-5、6.5.13-3
最后在6.5.13-3内核上成功编译安装了i915-sriov-dkms
项目
查看当前安装的内核
root@pve:~# proxmox-boot-tool kernel list
Manually selected kernels:
None.
Automatically selected kernels:
6.5.13-3-pve
6.8.4-3-pve
Pinned kernel:
6.5.13-3-pve
6.8.4是升级pve到8.2.2版本后自动安装,参考i915-sriov-dkms
项目的readme文件是明确不支持6.8的内核的,所以需要安装低版本的内核并启动,相同硬件环境的可以直接安装6.5.13-3内核,避免重蹈覆辙。
安装6.5.13-3版本内核
root@pve:~# apt install proxmox-kernel-6.5.13-3-pve
移除不需要的内核版本
root@pve:~# apt purge proxmox-kernel-6.x.x-x-pve
锁定内核版本
root@pve:~# proxmox-boot-tool kernel pin 6.5.13-3-pve
设置grub,开机的时候自动选择6.5.13-3内核
需要先重启看下,在Grub选择界面,选择Advanced Options for xxx
记录下 6.5.13-3 内核在 列表的第几项,如何说我的环境是: 因此需要的启动项处于列表的第2项(从0开始)
- 6.8.4
- 6.8.4 recovery
- 6.5.13
- 6.5.13 recovery
修改/etc/default/grub
配置
root@pve:~# vim /etc/default/grub
将GRUB_DEFAULT=0
注释掉,并添加GRUB_DEFAULT="1>2"
, 1代表选择Advanced Options, 2代表选择 6.5.13-3 内核
更新grub配置
root@pve:~# update-grub
重启系统
root@pve:~# reboot
重启完成后查看当前内核版本
root@pve:~# uname -r
6.5.13-3-pve
安装i915-sriov-dkms
安装编译工具
apt update
apt install build-*
apt install git pve-headers mokutil
apt install pve-headers-$(uname -r)
清理上次编译失败的产生的文件
rm -rf /var/lib/dkms/i915-sriov-dkms*
rm -rf /usr/src/i915-sriov-dkms*
rm -rf ~/i915-sriov-dkms
设置变量 便于后续命令使用
KERNEL=$(uname -r); KERNEL=${KERNEL%-pve}
clone和配置i915-sriov-dkms
项目
cd ~
git clone https://github.com/strongtz/i915-sriov-dkms.git
cd ~/i915-sriov-dkms
cp -a ~/i915-sriov-dkms/dkms.conf{,.bak}
sed -i 's/"@_PKGBASE@"/"i915-sriov-dkms"/g' ~/i915-sriov-dkms/dkms.conf
sed -i 's/"@PKGVER@"/"'"$KERNEL"'"/g' ~/i915-sriov-dkms/dkms.conf
sed -i 's/ -j$(nproc)//g' ~/i915-sriov-dkms/dkms.conf
cat ~/i915-sriov-dkms/dkms.conf
编译和安装
apt install --reinstall dkms -y
dkms add .
cd /usr/src/i915-sriov-dkms-$KERNEL
dkms status
dkms install -m i915-sriov-dkms -v $KERNEL -k $(uname -r) --force -j 1
dkms status
设置grub启动参数
cp -a /etc/default/grub{,.bak}
sudo sed -i '/^GRUB_CMDLINE_LINUX_DEFAULT/c\GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt i915.enable_guc=3 i915.max_vfs=7"' /etc/default/grub
update-grub
update-initramfs -u -k all
apt install sysfsutils -y
配置vGPU
安装工具
apt install sysfsutils -y
查看核显pci路径
root@pve:~# lspci | grep -i vga
00:02.0 VGA compatible controller: Intel Corporation Alder Lake-S GT1 [UHD Graphics 770]
编辑sysfs配置,开启vGPU拆分, 7代表将一个物理GPU拆分成7个vGPU
echo "devices/pci0000:00/0000:00:02.0/sriov_numvfs = 7" > /etc/sysfs.conf
cat /etc/sysfs.conf
reboot
查看是否拆分成功
root@pve:~# lspci | grep -i vga
00:02.0 VGA compatible controller: Intel Corporation Alder Lake-S GT1 [UHD Graphics 770] (rev 0c)
00:02.1 VGA compatible controller: Intel Corporation Alder Lake-S GT1 [UHD Graphics 770] (rev 0c)
00:02.2 VGA compatible controller: Intel Corporation Alder Lake-S GT1 [UHD Graphics 770] (rev 0c)
00:02.3 VGA compatible controller: Intel Corporation Alder Lake-S GT1 [UHD Graphics 770] (rev 0c)
00:02.4 VGA compatible controller: Intel Corporation Alder Lake-S GT1 [UHD Graphics 770] (rev 0c)
00:02.5 VGA compatible controller: Intel Corporation Alder Lake-S GT1 [UHD Graphics 770] (rev 0c)
00:02.6 VGA compatible controller: Intel Corporation Alder Lake-S GT1 [UHD Graphics 770] (rev 0c)
00:02.7 VGA compatible controller: Intel Corporation Alder Lake-S GT1 [UHD Graphics 770] (rev 0c)
Win10虚拟机
创建win10虚拟机和平时的一样:

需要注意的是:
- CPU的类型一定要选 host,否在在虚拟机内部会驱动异常
- Display不用选none,用VirtIO-GPU可以在pve看到windows画面,不像独立显卡直通Display必须选none
- 选择直通的vGPU时,不要选-0的那个,不要勾选所有功能
1 2 - Windows 安装完成后需要安装完整的VirtIO驱动
3 - 安装intel显卡驱动Arc Graphics Driver