Fixing libvirt GPU passthrough
最近灵车 Libvirt GPU Passthrough 爆炸了,记录一下踩到的坑。
Unknown PCI header type ‘127’
According to 有能群友 127 是 PCIe 读取字段超时返回的错误值,在这里是由于显卡没有正确 Reset。
通常进行 GPU passthrough 的设置时需要使用 vfio-pci 驱动,以防止驱动在显卡上电之后进行设置导致无法正确 Reset。然而对于 NVIDIA 20xx 显卡,使用 Nouveau 驱动可以正常在直通后 Reset,但是使用 vfio-pci 会出 127。这个现象和 AMD 显卡是正好相反的。
一个好处是,这样可以在直通前让 BIOS / GRUB / Host 直接用这个显卡输出,就算只有一个显示器也不用拔拔插插了。
启动虚拟机后黑屏没反应
没反应指就连 OVMF 的 Logo 都没出现。我一开始以为是直通挂了,但是观察 CPU usage 发现有一个核心狂转。
最后发现这是近期另一个修改导致的:ArchLinux 在最近把 edk2-ovmf
包中的数个 2M 版本的固件/模板文件删除了,ArchLinux 论坛 给出的解决方法是直接用 4M 版本。但是在我这里额外需要清空 NVRAM:
virsh start vm --reset-nvram
之后正常启动。