0.はじめに
仮想化を快適に行うための支援機能と書きましたが、仮想化とは一つの物理マシンで複数のOSを走らせるということです。具体的にはたとえば以下のようなことです。
・WindowsHomeServerのファイルサーバーとlinuxのWebサーバーを一つのマシンで動かす
・Vmwareを使ってWindows7上でWindows8を動かす
仮想化支援技術であるインテル・バーチャライゼーション・テクノロジーの中でも今回レビューするcore i7 3770とIntel Q77チップセットにはVT-x、VT-dの二種類が搭載されています。解答編として、今回それぞれの機能について調べてみました。
1.VT-xとは
大本のインテルの定義を見てみます。
インテル® バーチャライゼーション・テクノロジー (VT-x) は、1 つのハードウェア・プラットフォームが複数の「仮想」プラットフォームとして機能できるようにします。これはコンピューター処理を個別のパーティションに分離することであり、ダウンタイムを最小限に抑えて生産性を維持することによって管理性を向上させます。(インテル ホームぺージより)
詳しいことは完全には理解していませんが、たとえば一つのマシンに複数の仮想マシンが共存している場合、あるOSがCPUやメモリを使っているときに他のOSが普段通りにCPUやメモリにアクセスした場合、うまく管理しないと正常に動作できないでしょう。
そんな時の対処として、旧来の仮想化ではVmwareに代表される仮想マシンモニタ(ハイパーバイザなどとも)と呼ばれるソフトウェアで全部解決していたのですが、その処理でCPUを使うと遅くなるため、VT-xではハードウェア的な処理で手助けすることによりパフォーマンスを向上するということでしょう。仮想化の基礎の部分だと思われます。
マイクロソフトの仮想マシンモニタであるHyper-V、クライアントHyper-Vなどには必須の機能で、最近ではほぼ全部のインテルCPUに搭載されている機能です。
2.VT-dとは
これもインテルの定義を見てみます。
ダイレクト I/O 向けインテル® バーチャライゼーション・テクノロジー (VT-d) は、既存の IA-32 (VT-x) および Itanium® プロセッサー (VT-i) での仮想化サポートに続き、新たに I/O デバイスの仮想化をサポートしています。インテル® VT-d では、エンドユーザーがシステムのセキュリティーや信頼性を強化し、また仮想化環境における I/O デバイスのパフォーマンスを高めることもできます。(インテル ホームページより)
先のVT-xから一歩進んでI/Oデバイスの仮想化をサポートしていると書いてありますが、いまいちよくわかりません。ウィキペディアだとどうでしょう。
ダイレクト I/O 向けインテル VT とは、I/O処理の仮想化を支援する機能。VT-dなどのハードウェア的な仮想化支援が無い場合、仮想マシンモニタは、I/Oデバイスをエミュレートし、DMAのメモリ領域のリマッピングを行う必要がある。VT-dでは、ハードウェア的にDMA転送時のリマッピングを行うようにする。この場合、通常のデバイスドライバを使用することができ、利便性や性能が向上することになる。 (ウィキペディアより)
「DMA転送時のリマッピングをハードウェア的に行う」、これが肝のようです。そもそもDMA転送とは何かというと、以下のとおりです。
DMAは「Direct Memory Access」の略。システムのCPUを介すことなく、デバイスからシステムのメモリー(またはその逆)へのデータ転送を行なう方法。(ASCII.jp デジタル用語辞典より)
つまりCPUでの読み込み、書き込み命令によるデータ転送ではなく、USBメモリなどのデバイスからメモリに直接データ転送するということですね。仮想化時のリマッピングというのは仮想マシンから見えるメモリアドレスと物理メモリアドレスの変換処理ということです。従来は仮想マシンモニタがリマッピングをソフトウェア的に行うためDMAに制限があったところをハードウェア的に行うことで解決するということでしょう。
DMA転送を行う作業にはクリティカルになるみたいですが、検証するにはどんな作業がDMA転送を行うか確認する必要がありそうです。
3.まとめ
・インテル・バーチャライゼーション・テクノロジー は仮想化支援技術である。
・バーチャライゼーションテクノロジーにはVT-x、VT-dが存在する。
・マザーボードの対応が必要なのはこのVT-x、VT-dそれぞれを行う専用チップが必要なため。
VTを利用した仮想化
1. はじめに
解答編でも述べた通り、バーチャライゼーションテクノロジーは仮想化を快適に行うための機能で、VT-x、VT-dの二種類があります。
実施検証では実際に仮想マシンを走らせることでこのテクノロジーの効果を検証してゆきます。
マシン構成は下記のとおりです。
電源:MUS-500TW(マウスコンピュータBTO製品付属の500W電源)
マザーボード: intel DQ77MK
CPU: intel core i7 3770
メモリ: G.Skill F3-2133C9D-16GXH (8GBx2)
GPU: Intel HD Graphics(core i7 3770内蔵GPU)
ストレージ:WesternDegital Blue 500GB HDD
Seagate 500GB HDD
ケース:名称不明(マウスコンピュータBTO製品のケース)
2. Hyper-Vでの検証
まずはマイクロソフトが推しているWindowsServer2012にHyper-Vの組み合わせによる仮想化環境を使います。
2.1 仮想化環境の構築
Hyper-V機能の追加は非常に簡単で、起動したあと自動的に起動するサーバーマネージャから役割と機能の追加、Hyper-Vを選択、指示に従ってインストールするだけです。
Hyper-Vを追加すると仮想マシンの作成が行えます。OSはISOイメージ、DVDなどの物理メディアのどちらでもインストールできました。下記の画像ではUbuntu、Windows8、WindowsServe2012が入っているのが見えると思います。
UbuntuとWindows8が同時に起動しているのがわかります。
直接はVTと関係ありませんが、Hyper-Vをインストールした状態でVMwarePlayerをインストールしようとしたところ、はじかれてしまいました。VT-xを両方使うためでしょうか。
2.2 VT-xの効果@Hyper-V with WS2012
VT-xをオフにした状態で仮想マシンを起動しようとしたところ、エラーが出て起動できませんでした。
基本的に最新の仮想化はVT-xに基づいているということでしょう。
WikipediaによるとVT-xがなくても動くVMware Playerでも64bitOSを利用するときはVT-xが必須となっており、
64bitOSが普及した現在ではVT-xは不可欠な機能だと考えられます。
2.2 VT-dの効果@Hyper-V with WS2012
VT-xはHyper-Vの仮想化の根幹となっていることがオフにした結果わかりましたが、VT-dについてはBIOSで変更してもよくわかりませんでした。
インターネット上の情報によるとHyper-VはデフォルトではSR-IOVという機能のみがVT-d対応とのことでした。ですがDQ77MKはSR-IOVに対応していないようなので、Hyper-VでVT-dの検証は難しいようです。
3. XenClient XTによる検証
Hyper-VでうまくVT-dの効果を見られなかったので、VT-d対応が明記してあったXenClientXTという仮想化ハイパーバイザを使ってみます。
OSはWindows7 64bitを利用しました。
3.1 仮想化環境構築
XenClientXTを立ち上げると下記左のような管理画面になります。
ここで左上のInstall VMを押すと右に示すウィザードがでてきてOSを入れられます。
左に表示しているのは仮想マシンのインストールが終わった状態です。ここでマシンをクリックすると起動されます。基本的に全画面で、WS2012のようなウィンドウ表示はできません。
3.2 VT-xの効果@XenClientXT
WS2012+Hyper-Vのときと同様、VT-xをオフにすると仮想マシンを起動できませんでした。Hyper-V同様、VT-xは仮想化の根幹をなしているようです。
3.3 VT-dの効果@XenClientXT
PCIパススルーというのがVT-dに対応した機能です。
何をするかというと、オンボードのメモリやUSB、HDDなどはVT-d非対応の仮想化ソフトでも仮想マシン上で利用できますが、それ以外の増設のUSBやイーサネットポートなども仮想マシン上で利用できるようにする機能です。
XenClientソフト上で作成した仮想マシン設定からPCIPassThroughを選んで利用したい機能を追加していきます。(左:未選択状態 右:選択状態)
起動するとデバイスのインストールが行われ、対応するUSBポートが使えるようになります。オーディオなど、仮想化環境でなければ問題なくインストールされるデバイスでもうまくインストールできなかった機能がいくつかあります。完全ではないということでしょうか。
ちなみにVT-xオン、VT-dオフでPCIパススルー機能を使おうとするとこのようなエラーが出ました。ハードウェア仮想化ができていないということですね。PCIパススルーを全部解除すると起動できます。
エラーメッセージはVT-xが足りないときとまったく同じでした。
余談ですが、XenClientはグラフィック機能を仮想マシンで使えるらしいのですが、今回の環境では有効にできませんでした。
ゲームなどGPUを多用する用途には重要だと思われますので、ハードウェアの選定に気を付けたほうが良いかと思います。
4. まとめ
今回の実証では、第一にMicrosoft Hyper-Vによる仮想化もXenClientによる仮想化もVT-xの機能を前提に作られていました。つまり、VT-xなしでは最新の仮想化環境は実現できないと確認できました。
仮想マシンを使った体感としては、CPUを使う作業では物理マシンとさほど変わらない感じでした。ですが、たとえばグラフィック関係は全部エミュレーションのようで、CinebenchのOpenGLベンチなどは動きもしませんでした。VT-xの仮想化だけでは物理マシンと完全互換を保つことは難しいということです。
VT-dについてはハイパーバイザを介さずに各種デバイスを利用できる効果が確認できました。これによりVT-dを使うことで、より物理マシンに近い仮想マシンを作成できることが確認できました。
また、VT-dの効果はHyper-Vでは確認できず、XenClientXTでは各種デバイスのパススルーという形で対応していることがわかりました。このことから、現状でVT-dをつかったI/O利用を有効活用するにはハイパーバイザの選定から検討が必要と考えられます。
ZIGSOWにログインするとコメントやこのアイテムを持っているユーザー全員に質問できます。