带有VirtualBox VM的IronHide / BumbleBee。 它会通过video加速传递到物理卡吗?

是否可以通过IronHide运行Windows VM进行显卡加速? 我想利用我的video卡玩游戏/观看蓝光等。

也许虚拟客户中的图形与实际主机O / S之间的解释在这里会有所帮助。

首先是基础知识:

虚拟客户机中的所有内容都是抽象 – 这意味着虚拟客户机操作系统中的每个设备和驱动程序都不依赖于实际的主机设备和驱动程序。

给你一个简单的例子。 鼠标被视为特定设备 – Linux内核看到此设备并允许客户操作系统使用该设备。 这个“虚拟设备”通过虚拟化工具 – VirtualBox,VMWare,Xen等映射到真实物理设备。因此,客户操作系统永远不需要了解物理鼠标是什么,它只能看到虚拟化工具映射到它的内容。 这种方法的价值在于您可以将虚拟客户端移动到不同的主机 – 它将以相同的方式运行,因为没有直接依赖于主机本身。

要在实践中显示这一点,您可以在主机和来宾上运行lsusb – 在我的主机O / SI上有以下USB设备:

 Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0402:9665 ALi Corp. Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 

在我的访客上,oneiric O / SI可以看到以下USB设备 – 这些与主机不同:

 Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 001 Device 002: ID 80ee:0021 VirtualBox USB Tablet 

任何客户操作系统,无论是Windows还是Linux,都只能看到这个虚拟客户设备。

主机图形与访客图形

图形也是如此。

我的主机图形是:

  sudo lshw -class display *-display description: VGA compatible controller product: Core Processor Integrated Graphics Controller vendor: Intel Corporation physical id: 2 bus info: pci@0000:00:02.0 version: 18 width: 64 bits clock: 33MHz capabilities: msi pm vga_controller bus_master cap_list rom configuration: driver=i915 latency=0 resources: irq:41 memory:90000000-903fffff memory:80000000-8fffffff ioport:3050(size=8) 

在我的客人oneiric O / S上它可以看到以下显卡 – 你可以看到它与主机不同:

 sudo lshw -class display *-display UNCLAIMED description: VGA compatible controller product: VirtualBox Graphics Adapter vendor: InnoTek Systemberatung GmbH physical id: 2 bus info: pci@0000:00:02.0 version: 00 width: 32 bits clock: 33MHz capabilities: vga_controller bus_master configuration: latency=64 resources: memory:e0000000-e7ffffff 

同样 – Windows Guest O / S只会看到类似的虚拟客户设备。

在VirtualBox的阴暗世界中,您可以手动安装的Guest Additions (或者在11.10中 – jockey看到并建议您安装它)安装其他内核模块(或Windows Guest的设备驱动程序)以允许来宾O / S增强访问您的主机O / S图形。 它不是直接映射 – 但可以看到3D加速图形。

如果虚拟机中的应用程序通过OpenGL编程接口(或Windows客户机O / S – 其DirectX调用)使用3Dfunction,而不是在软件中模拟它们(这将很慢),VirtualBox将尝试使用您的主机3D硬件。

我再次强调,来宾O / S没有看到您的实际显卡,它只是将来自Guest的OpenGL(或DirectX)调用直接传递给主机硬件进行处理。

在此处输入图像描述

在VirtualBox设置中,您应该更改video卡内存和3D图形卡设置。 然后,您的来宾O / S将看到具有128Mb RAM的“3D加速卡”。 如果你的主机显卡比这更好 – 你的客户操作系统只能看到这个“简单”的抽象虚拟显卡。

由于您提到您正在使用Windows Guest O / S – 2D复选框适用于您,因为执行了类似的编程接口调用传递

Bumblebee / IronHide是一种图形切换机制 – 您使用的是集成显卡或更高容量的NVidia / ATI显卡,但不能同时使用这两种显卡。

由于较高可切换图形的OpenGL(或DirectX)function比集成芯片组更大,因此您将看到Guest O / S图形密集型应用程序的相对增强的图形性能。 然而,这种改进并不像在主机上本地运行相同的应用程序那样引人注目,因为它仍然在128MB虚拟客户机图形设备的约束下工作。

资源

以上https://askubuntu.com/a/85138/38052上的答案解释了客户操作员所看到的一切是如何抽象的。 虽然这曾经是完全正确的,但我相信情况正在发生变化,而且可能不再完全正确。

一些较新的处理器也支持I / O MMU虚拟化。 这些技术称为英特尔版本的英特尔VT-d和AMD版本的AMD-Vi。 引用有关x86虚拟化的维基百科文章:

英特尔的I / O MMU虚拟化(AMD-Vi和VT-d)主要文章:IOMMU

输入/输出存储器管理单元(IOMMU)使客户虚拟机能够通过DMA和中断重新映射直接使用外围设备,如以太网,加速图形卡和硬盘驱动器控制器。 这有时称为PCI直通。 AMD和英特尔都发布了规格:

 AMD's I/O Virtualization Technology, "AMD-Vi", originally called "IOMMU". Intel's "Virtualization Technology for Directed I/O" (VT-d). 

这听起来很有趣,但我已经可以预见到一些问题了。 首先,在Optimus笔记本电脑中,Intel IGP始终呈现最终的屏幕输出。 我不清楚Guest O / S和Host O / S是如何驱动IGP的。 一个想法是,如果在客人运行时可以在没有任何图形的情况下运行主机,这可能会起作用,但我不清楚如何实际执行此操作。

好吧,我很好奇,所以我试过了。

QEMU和现在的VirtualBox正在支持PCI设备到客户机的传递。 这意味着如果您有第二块显卡,您可以将它传递给Linux主机上的Windows客户端,并在虚拟化的Windows环境中获得完整的3D性能(游戏)。 对于带有两个显卡的桌面装备来说就是这种情况。 设备管理器会显示“NVIDIA GTX ……无论什么”,而不是说“Virualbox图形适配器”。

Optimus总是比较复杂。 我正在华硕UX501上进行测试。 我能够将NVidia芯片传递给windows guest,它在设备管理器中显示为“3Dvideo控制器”。 但我无法安装任何Windows驱动程序来支持它。 似乎英特尔图形的存在是一个先决条件。

sarang对此持怀疑态度。 看起来nvidia芯片不是驱动显示器的“显示适配器”,而只是集成英特尔芯片的加速器。 它们似乎不是独立的两个独立设备。