Intel Ultra7 255H 使用 SR-IOV 虚拟显卡直通 kvm 虚拟机

现阶段 Linux 生态已经日渐丰富,但是还是有一些老顽固依旧只有 windows 端软件。对于这种情况,在 Linux 下安装一个 Windows 虚拟机成为了不错的选择。尽管 Linux 下有很多种虚拟机方案,但对于高性能开源方案显然 qemu/kvm 是最佳的。自从高考结束新笔记本电脑到来后一直苦于 Win 虚拟机性能不够,无法满足所需。直到目前基于 SR-IOV 的 Windows 虚拟显卡直通方案出来后终于拥有了一台媲美裸机性能的 Win 虚拟机。

环境

操作系统: ArchLinux
虚拟机 Windows 版本: Windows 10 22h2
虚拟机: virt-manager
设备: Thinkbook14+ 2025 Ultra7
显卡: Intel Arc 140T GPU

前置准备

  • 确保你的核显支持 SR-IOV:Intel 连接
  • 下载 virt-manager 和 qemu
1
2

sudo pacman -S qemu libvirt edk2-ovmf virt-manager dnsmasq ebtables iptables bridge-utils qemu-ui-spice-core 

注: 以上软件包可能不全……

  • 启动虚拟网络
1
2
sudo virsh net-start default
sudo virsh net-autostart default
  • 配置 virt-manager 编辑 /etc/libvirt/libvirtd.conf 添加以下内容
1
2
unix_sock_group = "libvirt"
unix_sock_rw_perms = "0770"

编辑 /etc/libvirt/qemu.conf 添加:

1
2
user = "username"
group = "libvirt"

这里的 username 改成自己的用户名

  • 启动 libvirtd
1
sudo systemctl start libvirtd.service

创建普通虚拟机

到这一步,已经可以开始创建普通虚拟机了
在向导最后一步不要着急去完成创建,先选择 Customize configuration before install,进行进一步配置。


在 Firmware 选择 UEFI OVMF 选项,硬盘选择 virtio 以获得最好的性能。
可以安装 virtio-winspice-guest-tools-windows 方便 virtio 和 spice 驱动安装。
到目前为止,都是基本操作。现在开始配置 SR-IOV

创建虚拟显卡

安装 i915-sriov-dkms ,这个软件在 aur 上有:

1
yay -S i915-sriov-dkms

编辑 /etc/default/grub 修改GRUB_CMDLINE_LINUX_DEFAULT 为 :

1
GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on iommu=pt i915.enable_guc=3 i915.max_vfs=7 kvm-intel.nested=1"

重启系统,而后运行 lspci | grep VGA 目前还是:

1
00:02.0 VGA compatible controller: Intel Corporation Arrow Lake-P [Intel Graphics] (rev 03)

创建 /etc/sysfs.conf,编写:

1
devices/pci0000:00/0000:00:02.0/sriov_numvfs = 7

重启系统后在 root 用户下运行:

1
echo 1 > /sys/devices/pci0000:00/0000:00:02.0/sriov_numvfs

此时运行 lspci | grep VGA 将出现第二个显卡,其实就是创建的虚拟显卡
大致如下:

1
2
00:02.0 VGA compatible controller: Intel Corporation Arrow Lake-P [Intel Graphics] (rev 03)
00:02.1 VGA compatible controller: Intel Corporation Arrow Lake-P [Intel Graphics] (rev 03)

这个 00:02.1 就是等下要直通的显卡

直通显卡

在已经创建好的 win 虚拟机中 添加新的硬件选择 PCI 并 00:02.1 ,注意后面名称确定是否为所要直通的显卡。如果运行虚拟机没有问题后就可以安装显卡驱动。而后便可以看到任务管理器中的 GPU0 啦!
此时直通已经完成,但 virt-manager 的显示是不会调用显卡的,我们需要借由 xrdp 远程桌面来调用显卡。

远程连接

在 windows 设置中打开远程桌面,这里还略有些许复杂要解决安全性验证问题。
Linux 端我们选择的是 freerdp
运行参数在这:

1
xfreerdp3 /u:"user" /p:"passwd" /v:ip /dynamic-resolution /sound /scale:180

将 user 修改为 win 中的用户名,将 passwd 修改为 win 的密码,将 ip 修改为虚拟机的 ip 地址。回车后就可以使用 xrdp 远程连接带有直通显卡的 win 虚拟机了
到这一步,可以自己编写脚本方便随时连接虚拟机。

萌ICP备20241614号