web-dev-qa-db-ja.com

VirtualBox VMを使用したIronHide / BumbleBee。ビデオアクセラレーションを介して物理カードに渡されますか?

グラフィックスカードの高速化のためにIronHideを介してWindows VMを実行できるかどうかについてのアイデアはありますか?ビデオカードを利用してゲームをプレイしたり、ブルーレイを視聴したりします。

8
mwjackson

おそらく、仮想ゲストのグラフィックスと実際のホストO/Sの間の説明がここで役立つでしょう。

最初の基本:

仮想ゲストのすべては抽象化です。これは、仮想ゲストO/Sのすべてのデバイスとドライバーが実際のホストデバイスとドライバーに依存しないことを意味します。

簡単な例を示します。マウスは特定のデバイスとして認識されます。Linuxカーネルはこのデバイスを認識し、ゲストオペレーティングシステムがそのデバイスを使用できるようにします。この「仮想デバイス」は、仮想化ツール(VirtualBox、VMWare、Xenなど)によって実際の物理デバイスにマッピングされます。したがって、ゲストオペレーティングシステムは、物理マウスが何であるかを理解する必要はありません。 。このアプローチの価値は、仮想ゲストを異なるホストに移動できることです。ホスト自体には直接依存しないため、同じように動作します。

これを実際に表示するには、ホストとゲストの両方でlsusbを実行します。ホストO/Sには次の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/Sには、次の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のいずれのゲストO/Sでも、この仮想ゲストデバイスのみが表示されます。

ホストグラフィックスとゲストグラフィックス

グラフィックスでも同じです。

私のホストグラフィックスは次のとおりです。

 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ゲストO/Sは同様の仮想ゲストデバイスのみを表示します。

VirtualBoxの暗い世界では、Guest Additionsを手動でインストールできます(または11.10-jockeyを参照してインストールすることをお勧めします)追加のカーネルモジュール(またはWindowsゲスト用のデバイスドライバー)をインストールして、ゲストO/SがホストO/Sグラフィックにアクセスできるようにします。ここでも、直接マッピングではありませんが、3Dアクセラレーショングラフィックスを表示できます。

仮想マシン内のアプリケーションがOpenGLプログラミングインターフェイス(またはWindowsゲストO/S-DirectX呼び出し)を介して3D機能を使用する場合、ソフトウェアでそれらをエミュレートするのではなく(低速になります)、VirtualBoxはホストの使用を試みます3Dハードウェア。

繰り返しますが、ゲストO/Sは実際のグラフィックスカードを認識せず、OpenGL(またはDirectX)呼び出しをゲストから直接ホストハードウェアに渡して処理します。

enter image description here

VirtualBoxの設定では、ビデオカードのメモリと3Dグラフィックカードの設定を変更する必要があります。ゲストO/Sには、128Mb RAMの「3D Acceleratedカード」が表示されます。ホストグラフィックスカードがこれより優れているかどうかは関係ありません。ゲストO/Sは、この「単純な」抽象化された仮想グラフィックスカードのみを表示します。

WindowsゲストO/Sを使用していると述べたので、同様のパススルーのプログラミングインターフェイスコールが実行されるため、2Dチェックボックスが適用されます。

Bumblebee/IronHideはいずれかまたは両方のグラフィックススイッチングメカニズムです。統合グラフィックスまたは大容量のNVidia/ATIグラフィックスのいずれかを使用していますが、両方を同時に使用することはできません。

より高い切り替え可能なグラフィックのOpenGL(またはDirectX)機能は、統合チップセットよりも優れているため、Guest O/Sグラフィックを多用するアプリケーションでグラフィックパフォーマンスが比較的向上します。ただし、128MBの仮想ゲストグラフィックスデバイスの制約内で動作しているため、ホストで同じアプリケーションをネイティブに実行するほど劇的な改善はありません。

ソース

9
fossfreedom

上記の回答 https://askubuntu.com/a/85138/38052 は、ゲストO/Sが見るすべてが何らかの抽象化である方法を説明しています。これは以前は完全に真実でしたが、状況は変化しており、もはや完全に真実ではない可能性があると思います。

一部の新しいプロセッサは、I/O MMU仮想化もサポートしています。このテクノロジーは、IntelバージョンではIntel VT-d、AMDバージョンではAMD-Viと呼ばれます。 x86仮想化に関するウィキペディアの記事を引用するには:

IntelのI/O MMU仮想化(AMD-ViおよびVT-d)主な記事:IOMMU

入出力メモリ管理ユニット(IOMMU)により、ゲスト仮想マシンは、DMAおよび割り込み再マッピングを通じて、イーサネット、高速グラフィックスカード、ハードドライブコントローラーなどの周辺機器を直接使用できます。これは、PCIパススルーと呼ばれることもあります。 AMDとIntelの両方が仕様をリリースしています:

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

これはかなりおもしろそうですが、すでにいくつかの問題を予見できます。たとえば、Optimusラップトップでは、Intel IGPは常に最終的な画面出力をレンダリングします。ゲストO/SとホストO/Sの両方がIGPを駆動する方法がわかりません。ゲストの実行中にグラフィックなしでホストを実行できる場合、これは機能する可能性がありますが、実際にこれをどのように実行するかは私には不明です。

5
sarang

OK、私は興味があったので、これを試しました。

QEMU、現在はVirtualBoxは、PCIデバイスのゲストマシンへのパススルーをサポートしています。つまり、2番目のグラフィックカードがある場合、それをLinuxホストのWindowsゲストに渡して、仮想化されたWindows環境で完全な3Dパフォーマンス(ゲーム)を取得できます。これは、2枚のグラフィックカードを備えたデスクトップリグの場合です。デバイスマネージャーは、「Virualbox Graphics Adapter」と言う代わりに「NVIDIA GTX ...何でも」と表示します。

Optimusは常により複雑です。これをASUS UX501でテストしています。 NVidiaチップをWindowsゲストに渡すことができ、デバイスマネージャーに「3D Video Controller」と表示されます。しかし、それをサポートするためのWindowsドライバーをインストールできませんでした。 Intelグラフィックスの存在が前提条件のようです。

サランは疑わしいのは正しかった。 nvidiaチップは、モニターを駆動するような「ディスプレイアダプタ」ではなく、統合されたIntelチップの単なるアクセラレータのようです。それらは、独立した2つのデバイスとして機能するようには見えません。

1
Mathew Hart