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


13

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

我正在运行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下DRHDOM 0xfed91000

谁能建议我在该系统上启用VT-D并通过PCI设备传递给KVM guest虚拟机时需要做些什么?


启用VT和VT-d之后,您是否已完成整个电源循环?
dyasny 2014年

Answers:


11

解决此问题的方法是在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是VT-D的AMD替代品,所以这在某种程度上使我难以理解。


如果这不起作用,则您的CPU可能不支持VT-D或AMD-VI(问题很明确-我在这里为其他人发帖)
ndemou


1

您似乎具有硬件要求,因为另一个模块正在使用它(IOAPIC)。在这种情况下,您只需设置软件端即可。

看来您需要确保已安装所有先决条件以支持拆卸适当的设备。听起来好像您没有安装它们,或者未设置它们。

在这种情况下,您需要先安装并初始化适当的库和内核模块,然后再使用它们。这些将是用于KVM设置的各种“主机”系统实用程序和内核模块。

在尝试运行实用程序之前,您需要阅读手册中有关如何正确设置适当的KVM解决方案的部分,并按照这些步骤进行操作。他们并不仅仅是因为安装了必要的软件包而在首次启动时进行了设置。

请注意,如果有问题的设备嵌入在主板中,从技术上讲,它可能不是PCI设备,而是PCI映射的设备。这些设备实际上是通过其他方式连接的,但是使用它们的BIOS映射到PCI BIOS空间。它们可能与设备拆卸兼容,也可能与设备拆卸不兼容,这取决于它们如何连接到系统。

此外,如果子设备的驱动程序是相互依赖的,则您可能无法在不分离父设备的情况下分离子设备。您只能绝对确定谁的父设备是PCI控制器,PCI桥或其他受支持的总线控制器或桥的设备


谢谢你提供的详情。我想我的问题应该包括“我在哪里可以找到在KVM中执行此操作的文档”。
Anonymouslemming

0

我在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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.