我有一块 MSI-GD65 游戏主板和一台 Intel i7 4790。VT-D 在 BIOS 的 CPU 功能部分启用。
我正在运行 Ubuntu 14.04.1 LTS,当我尝试分离设备时,收到以下消息:
# virsh nodedev-detach 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 ver 1:0 cap c0000020660462 ecap f0101a
[ 0.027455] dmar: IOMMU 1: reg_base_addr fed91000 ver 1:0 cap d2008020660462 ecap f010da [ 0.027521
] IOAPIC id 8 在 DRHD 基础 0xfed91000 IOMMU 1 下
有人能告诉我该怎么做才能在此系统上启用 VT-D 并将 PCI 设备传递到 KVM 客户机吗?
答案1
解决此问题的方法是在 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 替代品。
答案2
补充 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
答案3
您似乎有硬件要求,因为另一个模块正在使用它(IOAPIC)在这种情况下,您只需简单地设置软件端。
看来您需要确保安装了所有先决条件,以支持分离相应的设备。听起来您没有安装它们,或者它们没有设置。
在这种情况下,您需要先安装并初始化适当的库和内核模块,然后才能尝试使用它们。这些将是您的 KVM 设置的各种“主机”系统实用程序和内核模块。
您需要阅读手册中有关如何正确设置适当的 KVM 解决方案的部分,并按照这些步骤操作,然后再尝试运行这些实用程序。它们不会在首次启动时简单地设置,只是因为安装了必要的软件包。
请注意,如果所讨论的设备嵌入在主板中,那么从技术上讲它可能不是 PCI 设备,而是 PCI 映射设备。这些设备实际上是通过其他方式连接的,但使用其 BIOS 映射到 PCI BIOS 空间。它们可能兼容也可能不兼容设备分离,具体取决于它们连接到系统的各个方面。
此外,如果子设备的驱动程序相互依赖,则可能无法在不分离父设备的情况下分离子设备。只有在绝对确定父设备是 PCI 控制器、PCI 桥接器或其他受支持的总线控制器或桥接器的情况下,才能分离设备
答案4
我在 centos7 上
我有这个错误导致我来到这里,但我的问题不是更新(在我的情况下)vim /etc/sysconfig/grub
并添加intel_iommu=on
到行尾GRUB_CMDLINE_LINUX
我必须运行这个命令
grub2-mkconfig -o /boot/grub2/grub.cfg
然后重新启动
注意:我在运行上述命令之前也确实运行了 grub2-mkconfig 并重新启动,但从我看到的结果来看,这对我来说没有任何作用。
参考:https://bugzilla.redhat.com/show_bug.cgi?id=1269446
评论 11 和 12