如何在 Linux 中启用 KVM 设备直通?

Ano*_*ing 16 passthrough kvm-virtualization

我有一个 MSI-GD65 游戏主板和一个 Intel i7 4790。在 bios 的 CPU 功能部分中启用了 VT-D。

我正在运行 Ubuntu 14.04.1 LTS,当我尝试分离设备时,我收到以下消息:

# virsh nodedev-分离 pci_0000_00_1f_2

错误:无法分离设备 pci_0000_00_1f_2 错误:不支持操作:此系统当前不支持 VFIO 和 KVM 设备分配

Dmesg 包含一些有关 IOMMU 的信息,但我不知道这是否意味着启用了 VT-D

$ dmesg | grep -i iommu

[0.027450] DMAR:IOMMU 0:reg_base_addr fed90000版本1:0帽c0000020660462 ECAP f0101a
[0.027455] DMAR:IOMMU 1:reg_base_addr fed91000版本1:0帽d2008020660462 ECAP f010da
[0.027521] IOAPIC ID 8下DRHD基0xfed91000 IOMMU 1

谁能建议我需要做什么才能在此系统上启用 VT-D 并将 PCI 设备传递给 KVM 来宾?

Ano*_*ing 16

此问题的解决方案是在您的 GRUB 引导参数中启用 IOMMU。

您可以通过在 /etc/default/grub 中设置以下内容来做到这一点

GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on"

如果您使用的是 AMD 处理器,则应amd_iommu=on改为附加到引导参数

GRUB_CMDLINE_LINUX_DEFAULT="安静飞溅 amd_iommu=on"

然后运行update-grub并重启

这个链接对我帮助很大:https : //www.centos.org/forums/viewtopic.php?f=47&t=48115

另见:https : //pve.proxmox.com/wiki/Pci_passthrough

这让我有些困惑,因为我认为 iommu 是 AMD VT-D 的替代品。


小智 5

添加 Anonymouslemming 的回答:Ubuntu 中似乎存在一个错误(对我来说是 18.04),这会导致 /etc/default/grub 中的 GRUB_CMDLINE_LINUX_DEFAULT 设置被忽略。

它可以通过注释掉 /etc/default/grub.d/50-curtin-settings.cfg 中的 GRUB_CMDLINE_LINUX_DEFAULT 来修复

https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1569567