Arch Linux PCI 直通

Arch Linux PCI 直通

我安装了 Arch(Antergos)来为 KVM Vms 启用 PCI 直通,但如果我启动 VM,它就会崩溃。我按照这个教程

我的硬件:

  • 主板:华擎 H97M Pro4
  • 处理器:Intel® Core™ i5-4690 CPU @ 3.50GHz × 4
  • 显卡 MSI GTX760 Twin Frozr
  • 内存:16GB
  • 操作系统:Antergos 64位

首先我

  • 在 uefi 中启用 VT-d
  • 在 /etc/default//grub 中将 intel_iommu="on" 添加到 GRUB_CMDLINE_LINUX_DEFAULT=""
  • 更新 grub

我的 IOMMU 组:

00:00.0 Host bridge [0600]: Intel Corporation 4th Gen Core Processor DRAM Controller [8086:0c00] (rev 06)
00:02.0 VGA compatible controller [0300]: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller [8086:0412] (rev 06)
00:03.0 Audio device [0403]: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller [8086:0c0c] (rev 06)
00:14.0 USB controller [0c03]: Intel Corporation 9 Series Chipset Family USB xHCI Controller [8086:8cb1]
00:16.0 Communication controller [0780]: Intel Corporation 9 Series Chipset Family ME Interface #1 [8086:8cba]
00:19.0 Ethernet controller [0200]: Intel Corporation Ethernet Connection (2) I218-V [8086:15a1]
00:1a.0 USB controller [0c03]: Intel Corporation 9 Series Chipset Family USB EHCI Controller #2 [8086:8cad]
00:1b.0 Audio device [0403]: Intel Corporation 9 Series Chipset Family HD Audio Controller [8086:8ca0]
00:1c.0 PCI bridge [0604]: Intel Corporation 9 Series Chipset Family PCI Express Root Port 1 [8086:8c90] (rev d0)
00:1c.3 PCI bridge [0604]: Intel Corporation 82801 PCI Bridge [8086:244e] (rev d0)
00:1c.4 PCI bridge [0604]: Intel Corporation 9 Series Chipset Family PCI Express Root Port 5 [8086:8c98] (rev d0)
00:1d.0 USB controller [0c03]: Intel Corporation 9 Series Chipset Family USB EHCI Controller #1 [8086:8ca6]
00:1f.0 ISA bridge [0601]: Intel Corporation 9 Series Chipset Family H97 Controller [8086:8cc6]
00:1f.2 SATA controller [0106]: Intel Corporation 9 Series Chipset Family SATA Controller [AHCI Mode] [8086:8c82]
00:1f.3 SMBus [0c05]: Intel Corporation 9 Series Chipset Family SMBus Controller [8086:8ca2]
02:00.0 PCI bridge [0604]: ASMedia Technology Inc. ASM1083/1085 PCIe to PCI Bridge [1b21:1080] (rev 03)
04:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK104 [GeForce GTX 760] [10de:1187] (rev a1)
04:00.1 Audio device [0403]: NVIDIA Corporation GK104 HDMI Audio Controller [10de:0e0a] (rev a1)

因此我的 GPU 包括:

  • VGA 控制器:04:00.0(10de:1187)
  • 音频控制器:04:00.1(10de:0e0a)

然后我创建了文件:/etc/modprobe.d/vfio.conf 并写道

options vfio-pci ids=10de:1187,10de:0e0a

然后我创建了 /etc/mkinitcpio.conf 并附加到 MODULES=""

vfio vfio_iommu_type1 vfio_pci vfio_virqfd

重新启动我的机器并检查 gpu 是否有 vfio 驱动程序

lspci -k

04:00.0 VGA compatible controller: NVIDIA Corporation GK104 [GeForce GTX 760] (rev a1)
    Subsystem: Micro-Star International Co., Ltd. [MSI] Device 2847
    Kernel driver in use: vfio-pci
    Kernel modules: nouveau
04:00.1 Audio device: NVIDIA Corporation GK104 HDMI Audio Controller (rev a1)
    Subsystem: Micro-Star International Co., Ltd. [MSI] Device 2847
    Kernel driver in use: vfio-pci
    Kernel modules: snd_hda_intel

安装了一些软件包:

pacman -S qemu libvirt virt-manager
yaourt -S ovmf-git

编辑 /etc/libvirt/qemu.conf

nvram = [
    "/usr/share/ovmf/x64/ovmf_x64.bin:/usr/share/ovmf/x64/ovmf_vars_x64.bin"
]

已启动/启用 libvirt

systemctl enable --now libvirtd
systemctl enable virtlogd.socket

最后我创建了一个虚拟机:

  • 固件:UEFI
  • CPU:选中“复制主机 CPU 配置
  • 插入 Windows 磁盘

现在它在虚拟控制台中启动,一切都很好!然后我添加了我的 GPU(PCI 设备)并再次启动它。现在它崩溃了,我不知道为什么!没有错误消息。

我希望你能帮助我,谢谢你的尝试

答案1

您没有链接您的 XML,但我假设您没有为您的视频卡加载 rom(假设您的视频卡支持 UEFI)。

  1. 验证你的显卡支持 UEFI
  2. 获取你的卡的视频 ROM

您可以使用https://www.techpowerup.com/vgabios/可以同时执行这两项操作。如果您的显卡未列出或 ROM 不可用,您可以直接在制造商论坛上提问。这就是我获得显卡 ROM 副本的方法,以解决您遇到的相同问题。

获得 rom 文件后,使用 virsh edit,尝试将以下内容添加到 xml 配置中

   <hostdev>
     ...
     <rom file='/etc/fake/boot.bin'/>
     ...
   </hostdev>

相关内容