VirtualBox – IronHide/BumbleBee Video Acceleration Pass-Through


Any ideas whether you can run a Windows VM via IronHide for graphics card acceleration? I'd like to play games / watch bluray etc utilising my video card.

Best Answer

Perhaps an explanation between graphics in a virtual guest and the actual host O/S would help here.

First the basics:

Everything in a virtual guest is an abstraction - what this means is that every device and driver in a virtual guest O/S does not depend upon the actual host device & driver.

To give you a simple example. A mouse is seen as a specific device - the linux kernel sees this device and allows the guest operating system to use that device. This "virtual device" is mapped to the real physical device by the virtualisation tool - VirtualBox, VMWare, Xen etc. Thus the guest operating system never needs to understand what the physical mouse is, it only sees what the virtualisation tool has mapped to it. The value of this approach is that you can move the virtual guest to different Hosts - it will operate in the same way because there is no direct dependency on the Host itself.

To show this in practice you can run lsusb on both the host and guest - on my host O/S I have the following USB devices:

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

On my guest oneiric O/S I can see the following USB devices - these are different from the host:

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

Any guest O/S whether windows or linux will only see this virtual guest device.

Host graphics vs guest graphics

It is the same for graphics.

My host graphics is:

 sudo lshw -class 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)

On my guest oneiric O/S it can see the following graphics card - you can see it is not the same as the host:

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

Likewise - a Windows Guest O/S will see only a similar virtual guest device.

In the murky world of VirtualBox, the Guest Additions which you can manually install (or in 11.10 - jockey sees and recommends you install it) installs additional kernel modules (or device drivers for Windows Guests) to allow the guest O/S enhanced access to your host O/S graphics. Again its not a direct mapping - but allows 3D accelerated graphics to be seen.

If an application inside your virtual machine uses 3D features through the OpenGL programming interface (or for a Windows guest O/S - its DirectX calls), instead of emulating them in software (which would be slow), VirtualBox will attempt to use your host's 3D hardware.

Again I stress, the guest O/S doesnt see your actual graphics card it just passes the OpenGL (or DirectX) call from the Guest directly to the Host hardware to process.

enter image description here

In VirtualBox settings you should change the video card memory and 3D graphics card setting. Your guest O/S will then see a "3D Accelerated card" with 128Mb RAM. It doesnt matter if your host graphics card is better than this - your guest O/S will only see this "simple" abstracted virtual graphics card.

Since you mentioned you are using a Windows Guest O/S - the 2D checkbox is applicable to you since a similar pass-through of programming interface calls is performed.

Bumblebee/IronHide is an either/or graphics switching mechanism - you are using either integrated graphics or the higher capacity NVidia/ATI graphics but not both at the same time.

Since the OpenGL (or DirectX) capability of the higher switchable graphics is that more greater than the integrated chips set, you will see a relatively enhanced graphics performance with Guest O/S graphics intensive applications. However this improvement is not as dramatic as running the same application natively on the host since it is still working within the constraints of the 128MB virtual guest graphics device.