具有 GPU 直通功能的 Windows 10 在 Ubuntu 20.04 上崩溃

具有 GPU 直通功能的 Windows 10 在 Ubuntu 20.04 上崩溃

直到最近,我还在运行 Ubuntu 19.10,并且拥有一个带有直通 GPU 的 Win 10 VM。一切都运行良好。几天前,我全新安装了 20.04,但无法使相同的设置正常工作。我希望只需导入旧配置,一切就会正常工作,但事实并非如此。此时,我进入了 VM 启动并可以在没有安装驱动程序的情况下使用 GPU(GTX 1080)的阶段。但是,一旦我尝试安装驱动程序,屏幕最终就会变黑,并一直保持这种状态,直到 VM 重新启动进入恢复状态。

我不确定哪些细节对调试问题最有帮助,因为显然涉及很多配置。最初我遵循该指南,过去是 18.04,现在是 20.04。然后我到处捡了一些不同的碎片。

vfio移动到内核时,我的 grub 启动行如下所示:intel_iommu=on iommu=pt apparmor=0 security='' vfio-pci.ids=10de:1b80,10de:10f0 pcie_aspm=off vfio_iommu_type1.allow_unsafe_interrupts=1 vfio_pci.disable_vga=1 vfio_pci.disable_idle_d3=1 acpi=off intremap=no_x2apic_optout nox2apic

我可以看到 GPU 由vfio驱动程序控制。

以下kvm内容已通过:(options kvm ignore_msrs=1通过检查验证/sys/module/kvm/parameters/ignore_msrs

为了解决 nvidia 驱动程序错误“43”,我添加了建议的更改这里

将 20.04 上的新设置与 19.10 上的旧设置进行比较,我认为有两个主要变化:

  • vfio已移至内核,因此我现在不再将参数传递给模块,而是直接将它们传递给内核。这似乎可行,正如我上面所写。
  • 我不得不从 切换i440fxq35i440fxVM 拒绝确认连接到 GPU 的显示器的存在。它承认 GPU 的存在,尽管状态为错误,但无法使用它。并且任何安装 nvidia 驱动程序的尝试都会导致 BSOD。在q35没有安装驱动程序的情况下,它能够使用屏幕。

配置的其他部分没有改变,这就是我没有提供上述更多细节的主要原因,因为现在我仍然假设它们是“正确的”并且“应该可以工作”。

我尝试创建一个新的虚拟机,但它有同样的问题:一旦我尝试在虚拟机中安装 nvidia 驱动程序,屏幕就会在某个时候变黑,并且虚拟机会在一段时间后崩溃。如果我停止通过 GPU,那么我可以删除驱动程序,然后再次使用 GPU。

我在日志中找不到任何有用的信息。我确实看到了一些可能相关的内容,但我不确定:

Jul 12 00:05:56 homenest libvirtd[41132]: host doesn't support hyperv 'relaxed' feature
Jul 12 00:05:56 homenest libvirtd[41132]: host doesn't support hyperv 'vapic' feature

禁用上述功能会使消息消失,但对虚拟机中的 nvidia 驱动程序没有影响。

Jul 12 00:06:16 homenest kernel: [ 5476.135668] kvm [124558]: vcpu0, guest rIP: 0xfffff803343862f7 ignored rdmsr: 0x611
Jul 12 00:06:16 homenest kernel: [ 5476.135672] kvm [124558]: vcpu0, guest rIP: 0xfffff8033438630d ignored rdmsr: 0x641
Jul 12 00:06:16 homenest kernel: [ 5476.135674] kvm [124558]: vcpu0, guest rIP: 0xfffff80334386323 ignored rdmsr: 0x606
Jul 12 00:06:16 homenest kernel: [ 5476.135676] kvm [124558]: vcpu0, guest rIP: 0xfffff80334386134 ignored rdmsr: 0x606
Jul 12 00:06:16 homenest kernel: [ 5476.135679] kvm [124558]: vcpu0, guest rIP: 0xfffff803343811bc ignored rdmsr: 0x641
Jul 12 00:06:16 homenest kernel: [ 5476.135681] kvm [124558]: vcpu0, guest rIP: 0xfffff80334381207 ignored rdmsr: 0x611

据我所知,这些都是一些可以安全忽略的垃圾邮件。

Jul 12 18:42:48 homenest kernel: [  212.184333] vfio-pci 0000:05:00.0: enabling device (0100 -> 0103)
Jul 12 18:42:48 homenest kernel: [  212.184520] vfio-pci 0000:05:00.0: vfio_ecap_init: hiding ecap 0x19@0x900
Jul 12 18:42:48 homenest kernel: [  212.186952] vfio-pci 0000:05:00.1: enabling device (0100 -> 0102)

不知道并且找不到该vfio_ecap_init消息的含义,但是其他两行表明vfio设备已成功通过。

遗憾的是,我没有关于 19.10 上各个组件版本的信息。现在我有以下内容:

Compiled against library: libvirt 6.0.0
Using library: libvirt 6.0.0
Using API: QEMU 6.0.0
Running hypervisor: QEMU 4.2.0

5.4.0-40-generic

我想测试较旧的内核,但5.3.18-050318-generic由于无法从 zfs 启动,系统无法启动,并且5.4.0-26-generic系统启动后似乎缺少一些内核模块,因此虚拟机根本无法启动。由于我不确定这些内核是否真的会有所不同,所以我不想花时间修复这些问题。

这就是问题概述。如果您能提供任何建议,告诉我该尝试什么以及从哪里着手解决该问题,我将不胜感激。如果需要任何其他信息,我很乐意提供。

更新:额外的实验表明,问题会自行触发,如果带有通过 GPU 的虚拟机停留几分钟,它就会崩溃,屏幕变黑等。之后,可以通过不通过 GPU 启动虚拟机来“恢复”。我也尝试通过另一个 GPU,行为完全相同。

我还发现日志中出现了另一条消息:

kernel: [  608.945246] vfio-pci 0000:03:00.0: vfio_bar_restore: reset recovery - restoring BARs

我仍需要尝试裸机 Windows 安装和 Ubuntu 19.10 安装,这些安装以前运行良好。只需要找时间运行所有这些实验...

相关内容