我试图使用PCI-Passthrough将旧的视频卡(Radeon 4770)附加到虚拟机。我正在使用Linux-KVM在Debian Linux(Wheezy,3.2.0-4-amd64)主机上运行虚拟机。
题
为了明确起见,我不确定使用Linux KVM实现PCI直通的正确“路径”是什么。在此阶段,我怀疑正确的操作是将CONFIG_DMAR
,CONFIG_DMAR_DEFAULT_ON
和添加CONFIG_PCI_STUB
到内核源的“总线选项(PCI等)”部分并重新编译。
但是我不确定这是否是重新编译前必要添加的详尽列表。或者,如果有必要重新编译内核,也许有一个更简单的方法?
在我参考的指南中,只有linux-kvm.org明确提到需要编译。Linux-KVM已经安装并且可以用作管理程序。
研究
在这一点上,我认为我的问题与内核有关。我的主要资源是linux-kvm.org上的指南(http://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVM)。但是,我发现其他资源表明(似乎)特定于分发的方法略有不同:
Fedora- https: //docs.fedoraproject.org/zh-CN/Fedora/13/html/Virtualization_Guide/chap-Virtualization-PCI_passthrough.html
SUSE-“ openSUSE:使用KVM进行虚拟化”(由于关联性低和2链接限制,省略了链接)
Fedora指南在引用之前setsebool
似乎一直有效,该指南似乎是RedHat特定的。SUSE指南指示SUSE不支持图形卡分配,但是我也引用它,因为它指示我应该CONFIG_DMAR_DEFAULT_ON
在/ boot / config-uname -r中找到一个字符串。该linux-kvm.org网站还引用CONFIG_DMAR_DEFAULT_ON
,所以这似乎是一个共同的和必要的组成部分。
注意:我没有在Fedora或Debian的指南中找到图形卡的限制。参考的SUSE文档日期为2006-2013。
我CONFIG_DMAR_DEFAULT_ON
在系统上的/ boot / config-`uname -r`中找不到。进一步的研究表明CONFIG_DMAR
,CONFIG_DMAR_DEFAULT_ON
和CONFIG_PCI_STUB
是相关的上的说明Linux内核的配置项linux-kvm.org。因此,我相信我需要使用这3个(至少)内核配置项重新编译主机的内核。使用intel_iommu=on
内核参数引导到我的主机OS似乎不够。
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
VT-d / IOMMU / KVM支持确认
我的研究表明,PCI-Passthrough需要VT-d的CPU和主板支持。
室速
我已经确认我的处理器(非k INTEL i7-3770)(per ark.intel.com/products/65719)支持VT-d:
英特尔®定向I / O虚拟化技术(VT-d)•是
我的华擎Z77 Extreme4主板还支持VT-d(根据用户手册第62页):
VT-d使用此功能可以启用或禁用英特尔®VT-d技术(用于定向I / O的英特尔®虚拟化技术)。此功能的默认值为[Disabled]。
国际货币基金组织
我确认我的系统具有IOMMU支持:
dmesg | grep -e DMAR -e IOMMU | grep -e "DRHD base" -e "enabled"
[ 0.000000] Intel-IOMMU: enabled
虚拟机
除PCI-Passthrough支持外,KVM已安装并正常运行:
lsmod | grep kvm
kvm_intel 121968 0
kvm 287749 1 kvm_intel
我已经确保通过主板的BIOS启用了VT-d。因此,我不怀疑会阻止使用VT-d的硬件/ BIOS问题。无论如何,我都无法从主机成功分离视频卡并将其重新分配给虚拟机。
总结思想
最后,我想提一下,我也尝试过测试:
echo "8086 10b9" \> /sys/bus/pci/drivers/pci-stub/new_id
echo "0000:01:00.0" \> /sys/bus/pci/devices/0000:01:00.0/driver/unbind
echo "0000:01:00.0" \> /sys/bus/pci/drivers/pci-stub/bind
echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/remove_id
kvm -m 512 -boot c -net none -hda debian-7.1.0-amd64-netinst.iso -device pci-assign,host=01:00.0
尝试创建目标虚拟机后出现以下错误:
Failed to assign device "(null)" : Device or resource busy
*** The driver 'pci-stub' is occupying your device 0000:01:00.0.
***
*** You can try the following commands to free it:
***
*** $ echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/new_id
*** $ echo "0000:01:00.0" > /sys/bus/pci/drivers/pci-stub/unbind
*** $ echo "0000:01:00.0" > /sys/bus/pci/drivers/pci-stub/bind
*** $ echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/remove_id
***
kvm: -device pci-assign,host=01:00.0: Device 'pci-assign' could not be initialized
我猜这是因为主机仍然不会放弃对视频卡的控制,并且可能是由于内核没有使用适当的配置项进行编译。
这对我来说是新领域,所以请原谅我的经验。我会大大感激任何反馈无论如何,即使是简单的确认,我是在正确的轨道上。请让我知道我是否进行了明显的疏忽或过度考虑。也欢迎对我的问题进行建设性批评。让我知道是否我没有提供足够的信息来“帮助您帮助我”(或者如果我提供的信息太多!)。我非常乐于帮助您使问题更清晰或更容易回答。
先感谢您,