我已经尝试了好几天了(期间必须重新安装 arch 两次),在我的电脑上设置 GPU 直通但没有成功。硬件是
- 华硕Z97-P
- 英特尔 I5-4690
- AMD Radeon R9 380(催化剂将其视为 R9 285)
它应该能够支持 IOMMU。我的电脑运行 Arch Linux。
我一直在关注以下两篇有关该主题的文章:
- https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF
- http://vfio.blogspot.hu/2015/05/vfio-gpu-how-to-series-part-3-host.html
目标
不幸的是,我只有一张显卡(和板载英特尔),但当我想使用 Windows 时,我非常乐意从命令行启动虚拟机,否则我只想输入 startx 来利用显卡fglrx 模块。
我如何尝试实现它
我将 intel_iommu=on 选项传递给 initrd,这导致使用以下列表
# find /sys/kernel/iommu_groups -type l
/sys/kernel/iommu_groups/0/devices/0000:00:00.0
/sys/kernel/iommu_groups/1/devices/0000:00:01.0
/sys/kernel/iommu_groups/1/devices/0000:01:00.0
/sys/kernel/iommu_groups/1/devices/0000:01:00.1
/sys/kernel/iommu_groups/2/devices/0000:00:14.0
/sys/kernel/iommu_groups/3/devices/0000:00:16.0
/sys/kernel/iommu_groups/4/devices/0000:00:1a.0
/sys/kernel/iommu_groups/5/devices/0000:00:1b.0
/sys/kernel/iommu_groups/6/devices/0000:00:1c.0
/sys/kernel/iommu_groups/6/devices/0000:00:1c.2
/sys/kernel/iommu_groups/6/devices/0000:00:1c.3
/sys/kernel/iommu_groups/6/devices/0000:03:00.0
/sys/kernel/iommu_groups/6/devices/0000:04:00.0
/sys/kernel/iommu_groups/7/devices/0000:00:1d.0
/sys/kernel/iommu_groups/8/devices/0000:00:1f.0
/sys/kernel/iommu_groups/8/devices/0000:00:1f.2
/sys/kernel/iommu_groups/8/devices/0000:00:1f.3
这可能意味着 IOMMU 已成功启用,但根据 arch wiki,它可能未正确设置(请参阅最后一行代码):
#dmesg|grep -e DMAR -e IOMMU
[ 0.000000] ACPI: DMAR 0x00000000DDB41D40 000080 (v01 INTEL BDW 00000001 INTL 00000001)
[ 0.000000] Intel-IOMMU: enabled
[ 0.024745] dmar: IOMMU 0: reg_base_addr fed90000 ver 1:0 cap d2008c20660462 ecap f010da
[ 0.024747] IOAPIC id 8 under DRHD base 0xfed90000 IOMMU 0
[ 0.296873] DMAR: No ATSR found
[ 0.296964] IOMMU: dmar0 using Queued invalidation
[ 0.296965] IOMMU: Setting RMRR:
[ 0.296973] IOMMU: Setting identity map for device 0000:00:14.0 [0xdee7d000 - 0xdee8bfff]
[ 0.296996] IOMMU: Setting identity map for device 0000:00:1a.0 [0xdee7d000 - 0xdee8bfff]
[ 0.297012] IOMMU: Setting identity map for device 0000:00:1d.0 [0xdee7d000 - 0xdee8bfff]
[ 0.297024] IOMMU: Prepare 0-16MiB unity mapping for LPC
[ 0.297029] IOMMU: Setting identity map for device 0000:00:1f.0 [0x0 - 0xffffff]
[ 3.326568] AMD IOMMUv2 driver by Joerg Roedel <[email protected]>
[ 3.326569] AMD IOMMUv2 functionality not available on this system
我已经尝试过 arch wiki 网站上提到的其他选项(将 pci-stub 传递给 mkinitcpio.conf 中的模块),但最后一行仍然存在。
第一个问题:第一个命令的输出是否足以说明我的系统正确使用了 IOMMU?
带着一点不信任,我已经到达了必须将 VGA 绑定到 pci-stub 的部分,这已经导致了一些重新安装,所以我想从这里至少有一些方向,是否使用pci-stub 或 VFIO 等。
答案1
虽然这是一个老问题:
AMD IOMMUv2 functionality not available on this system
预计会出现在 Intel 系统上,因为它没有 AMD IOMMUv2。即使在 AMD 系统上,如果不支持 IOMMUv2 而只支持 v1,这也是正常的。如果您可以看到这些组并且看到 IOMMU 已启用的消息,请继续。
答案2
这是关于 GPU 直通的精彩指南:
https://www.heiko-sieger.info/running-windows-10-on-linux-using-kvm-with-vga-passthrough/
不幸的是我只有一张显卡(和板载英特尔)
您可能需要两个 GPU。