简短问题:
如何intel_iommu
在Linux内核中打开设置?我使用grub2引导程序运行Debian主机。我见过的文档说编辑/boot/grub/menu.lst
,似乎只与grub 1.x相关,因为我没有该文件。
据我了解(也是我能想到的最后一个选项),更改此启动选项可能会消除以下错误消息: /var/log/kern.log
vboxpci: No IOMMU domain (attach)
长问题:
使访客操作系统直接访问图形卡
我最近意识到,可以将PCI Express设备传递给Virtualbox中运行的来宾OS。酷,我想!我有两块NVIDIA Quadro FX图形卡(具有SLI桥接器连接,希望不会引起麻烦),并且希望将第二张图形卡专用于来宾OS,以便可以在其中使用OpenGL功能。 Photoshop等。
NVIDIA销售这种“ SLI Multi-OS ”配置,这基本上是我多年来一直想要设置的配置,但是我不想花太多时间在虚拟化软件(Parallels极限工作站)上。使用VirtualBox已有很多年了。
主机系统
我正在相当高端的工作站设备(具有Intel ICH10R芯片组和Xeon W3680 CPU的Asus P6T7 WS超级计算机主板)上从Debian存储库中运行linux-3.5.0-19,并希望在内核中打开IOMMU支持。 ,最好不必自己编译。
的BIOS
在BIOS设置中,启用了VT-x和VT-d支持。不过,我看不到任何特别提及IOMMU的内容。
连接PCI设备
这真是令人惊讶的简单!官方的VirtualBox文档在这里。我发现不那么模棱两可的是,打开了nvidia-settings
,选择了辅助图形卡并记下了总线ID(在我的情况下为“ PCI:5:0:0”)。然后,从主机的命令行:
VBoxManage modifyvm "Windows Guest" --pciattach 05:00.0
(当我第一次运行此程序时,出现了一个错误,因为VirtualBox在模拟PIIX芯片组;它说PCI直通仅适用于ICH9芯片组。因此,我在VirtualBox VM System设置中将芯片组更改为ICH9,并打开了guest虚拟机。以安装必要的新驱动程序。稍后重新启动,一切正常,因此我关闭了来宾,然后重新运行命令。)
没有输出,我几乎立即返回到命令行。
从来宾使用主机GPU
在打开guest虚拟机之前,我首先通过virtualbox-dkms重新启动了主机,以防内核中发生未记录的事件。当我在没有sudo
特权的情况下运行上一个命令时,我怀疑是否进行了任何更改。
当我下一次启动客户机时,Windows Update开始执行它的工作,并自动检测并安装了正确的NVIDIA驱动程序。到目前为止一切都很好。不过,在使用设备之前,我必须重新启动访客。
问题
现在,图形卡驱动程序已安装在客户机上,并且已连接PCI设备,现在我无法进入Windows桌面了。我进入Windows登录屏幕,然后登录后,屏幕冻结,只说“ Welcome”,旁边是一个应该旋转但不是蓝色的圆圈。
在中/var/log/kern.log
,最后打印的消息是:-
vboxpci: vboxPciOsDevInit: dev=500
vboxpci: detected device: 10de:05ff at 05:00.0, driver pci-stub
vboxpci: vboxPciOsDevInit: dev=500 pdev=ffff88061bea0000
pci-stub 0000:05:00.0: irq 76 for MSI/MSI-X
vboxpci: enabled MSI
500: linux vboxPciOsDevGetRegionInfo: reg=0
got mmio region: fa000000:16777216
500: linux vboxPciOsDevGetRegionInfo: reg=1
got mmio region: d0000000:268435456
500: linux vboxPciOsDevGetRegionInfo: reg=3
got mmio region: f8000000:33554432
500: linux vboxPciOsDevGetRegionInfo: reg=5
got pio region: 8c00:128
500: linux vboxPciOsDevGetRegionInfo: reg=6
got mmio region: fb980000:524288
got PCI IRQ: 76
device eth0 entered promiscuous mode
power state: 0
vboxpci: No IOMMU domain (attach)
任何想法如何解决这个问题?
更新:
我现在使用引导了内核intel_iommu=on
,但是仍然无法完全正常工作。.重新引导主机后,来宾启动,登录正常,一切似乎都没有开始。我的第二张显卡没有输出任何东西。
在设备管理器中,Quadro FX设备旁边有一个感叹号,并且设备属性中的错误代码为12,并显示一条消息“此设备找不到足够的可用资源”。在technet.microsoft.com上的进一步描述。
在主机内核日志中,它看起来很有希望:
vboxpci: detected device: 10de:05ff at 05:00.0, driver pci-stub
vboxpci: vboxPciOsDevInit: dev=500 pdev=ffff88061baa0000
pci-stub 0000:05:00.0: irq 76 for MSI/MSI-X
vboxpci: enabled MSI
500: linux vboxPciOsDevGetRegionInfo: reg=0
got mmio region: fa000000:16777216
500: linux vboxPciOsDevGetRegionInfo: reg=1
got mmio region: d0000000:268435456
500: linux vboxPciOsDevGetRegionInfo: reg=3
got mmio region: f8000000:33554432
500: linux vboxPciOsDevGetRegionInfo: reg=5
got pio region: 8c00:128
500: linux vboxPciOsDevGetRegionInfo: reg=6
got mmio region: fb980000:524288
got PCI IRQ: 76
created IOMMU domain ffff88058377c9a0
device eth0 entered promiscuous mode
power state: 0
vboxpci: iommu_attach_device() success
如果我第二次启动来宾操作系统,而没有重新引导主机,则显示在“欢迎”阶段再次冻结。不过,它肯定完成了登录阶段,因为我可以使用Windows快捷方式关闭计算机而无需强制关闭。
现在我有点想法了...有什么建议可以解决这个问题?我可以提供更多信息吗?
UPDATE2:
dmesg
包含一些更有趣的错误,但我不知道该如何处理:
IOMMU 0 0xfbfff000: using Queued invalidation
IOMMU 1 0xfbffe000: using Queued invalidation
------------[ cut here ]------------
WARNING: at /build/buildd/linux-3.5.0/drivers/iommu/intel-iommu.c:4254 init_dmars+0x39b/0x74f()
Hardware name: System Product Name
Your BIOS is broken; DMA routed to ISOCH DMAR unit but no TLB space.
BIOS vendor: American Megatrends Inc.; Ver: 0811 ; Product Version: System Version
...
Your BIOS is broken; RMRR ends before it starts!
CONFIG_CMDLINE_LINUX=intel_iommu=on
中/etc/default/grub
。现在,来宾启动了,但是没有检测到图形卡...
intel_iommu=soft
似乎不是有效的内核选项,当我使用它时,它恢复为intel_iommu=on
..从www.kernel.org可以找到iommu=soft
,但是我找不到任何相关的文档。有吗
iommu=soft
。它会停用硬件IOMMU(这会在我的系统上导致大量DMA错误),而改用软件IOMMU。这是旧线程的链接:建议对所有内核软件包使用iommu = soft
intel_iommu=igfx_off
……
intel_iommu=soft
。您可以尝试通过intel_iommu=on
。