VT-dについて

virt-managerPCIパススルーの設定項目というものがあるようです。

調べてみたところ、VT-dというハードウェアによる仮想化支援機能が有効な場合に、ゲストOSPCIデバイスの制御を渡すことができる設定のようです。

今更ながら、VT-dについて概要を調べてみました。

 

VT-dとは

Virtualization Technology Direct I/Oの略で、ハードウェアでDMAや割り 込みのリマッピングをサポートし、ゲストOSにI/O制御を渡すことが可能に なります。

3年くらい前に盛り上がってたようです。PCを新調する前に知っていれば…… (私のPCはVT-d非対応)。

ゲストOSにとっての物理アドレスはホストOSにとっての仮想アドレス(ゲス トOSはアプリケーションのひとつとして動作)に過ぎず、DMAで物理アドレ スを指定することができません。

ホストOS側でアドレスを調停したり、I/Oデバイスの割り込みをゲストOSに 通知する機能が必要になります。仮想環境ではないネイティブな環境に比べ てオーバヘッドが多くなり、処理が極めて重くなります。

KVMではvirtioというオーバヘッドが少ない仕組みを使用します。ゲストOS にvirtioが使われていることを通知することで、ゲストOSはvirtioドライバ 経由でI/Oの処理をホストOSに委託します。この結果、先ほどの場合に比べ て処理が軽くなります(ネイティブに比べればオーバヘッドはあります)。

VT-dを使うとI/OデバイスのDMAと割り込みがゲストOS用にリマッピングされ る為、ホストOSが担っていた機能が不要となります(ゲストOS起動前に前処 理くらいは必要かもしれませんが)。結果、ネイティブ環境に近い性能が出 ることになります(もしかしたら少しくらいはホストOSが担う処理があるか もしれませんが)。

デメリットはI/Oデバイスの共有ができないことです。ただし、リッチなグ ラフィクスを必要とするゲストOSにはグラフィクスカードを渡してやる等の 様々な用途があると思います。

AMDのCPUでもAMD-Viという同様の機能があるようです。

VT-dの動作条件

CPUとマザーボード(チップセット)がVT-dに対応している必要があります。

Core iシリーズの型番にKが付いているやつは軒並み未対応のようです (私はKが付いてるやつしか持ってないです)。

仮想化ソフトの対応状況

大抵の仮想化ソフトでは使用できるようです。ただし、ハードウェア要件が タイトであったり、ドライバが実験段階であったりと、まだまだ一般的では ない感じはあります。

KVMとVFIOで3Dゲームを動かしている動画

以下の動画ではホストOSにGentoo Linux、ゲストOSにWindows7という、KVM とVFIOを使用した環境にて、Windows7内でアサシンクリードという3Dゲーム を動かしてます。ネイティブ環境と変わらないように見えます。見るだけで ワクワクしますね。

ただし、KVMのページには以下の記載があり、グラフィクスカードは公式に サポートされている訳ではないようですが、サポートされて欲しいと願うばかりです。

Assignment of graphics cards are not officially supported at the
moment, but there has been some success passing through a secondary
Radeon HD 5850 as a VM's secondary display.