基礎解説
仮想化技術の性能を向上させる、ハードウェア仮想化支援機能とは?

2.仮想化技術の性能向上を実現するプロセッサの仮想化支援機能

インテル株式会社
ソフトウェア&ソリューション統括部
分散並列技術部 大原 久樹
2008/08/28

従来の問題を解決するVT-xとは?

 仮想化のハードウェア支援を行うVT-xを用いた際の構成は次のようになる。プロセッサの動作モードとして「VMX Rootモード」と「VMX Non-rootモード」という、新たな動作モードを2種類設けた。VMMはVMX Rootモードで動作し、ゲスト環境はVMX Non-rootモードで実行される。また2つの状態遷移があり、ゲスト環境からVMMにプロセッサのモードが変わることを「VM Exit」、VMMからゲスト環境に戻ることを「VM Entry」と呼ぶ。

 VT-xでは、各モードでRingが設定できるため、ゲスト環境のOSカーネルに図1のようにRing 0を割り当てることも可能である。こうすることによってVMX Non-rootモードにあるゲスト環境は、非仮想化の状態と同じリング構造を保つことができる。つまり、Xenの準仮想化のようにゲストOSを改変する必要はない。ゲスト環境以外の仮想化のためのソフトウェア(VMM)がVMX Rootモードで動作する。

図1 インテル・アーキテクチャにおけるリング構造(再掲)
インテル・アーキテクチャでは、Ring 0から3の4種類の特権レベルがあり、プログラムはこのいずれかのRingに割り当てられ、実行される。

 実際には、VMX Non-rootモードでは利用できる機能は制限されており、Ring 0(ゲストOS)であっても、特権的な操作を行うとすべてトラップされ、VMM Rootモード(VMM)へと遷移する。具体的には、ゲスト環境において、特権命令の実行や、メモリ管理機構・割り込み処理・I/Oデバイスなど、VMMによる物理リソースの調停が必要となった際に、自動的にプロセッサ内でVM Exitが発生する。これにより、ゲスト環境を完全に仮想化することができる。システム状態などもモードごとに独立して保存/管理できるので、複数の仮想環境を切り替えながら(VM Entryで起動する)、実行することもできる。こうしてVMMで必要な調停を行った後に、ゲスト環境に処理を戻す。

図3 VT-xを利用した場合のVMMのリング構造
VT-x下では、VMMはVMX Rootモードで実行され、ゲスト環境はVMX Non-rootモードで実行される。VMX Non-root内ではRing 0から3のすべてが利用できるため、ゲストOSとそのアプリケーションを改変することなく、そのまま実行できる。

 VT-xの導入によって、Xenでも、OSカーネルの改変ができないWindows OSをゲスト環境として利用できるようになった。ソフトウェアとしては、VM Exitが起きた後のVMMにおける調停処理の実装に集中できるようになったので、実装の手間も減っている。その結果、多くのVMMが製品化されたりオープンソースとして登場したりしている。VT-xが、仮想化の多様性を生み出す一助となっているわけだ。

VT-xの仮想化性能向上技術

 仮想化環境の構築に興味を持つ人が、最も懸念事項とする評価尺度の1つは性能であろう。動いていれば十分というアプリケーションを移行(マイグレーション)する程度であれば気にする必要はないかもしれないが、サーバ統合の場合は、どの程度の数のゲスト環境を1台のシステムに載せられるのかという設計を事前に行わなければならない。ここでは、仮想化を用いたときにどのようなオーバーヘッドが生じるのか説明し、オーバーヘッドを低減するためにどのような取り組みが行われているのかを紹介する。

■仮想化オーバーヘッドの詳細
  仮想化環境では、VMMというリソースを調停するためのソフトウェア・レイヤが入っているために、非仮想化環境と比較して必ずオーバーヘッドが生じてしまう。特にVT-x環境においては、ゲストOSからVMMへの状態遷移(VM Exit) → VMM内での処理 → VMMからゲストOSへの状態遷移(VM Entry)、という一連の流れがオーバーヘッドに相当する。例えば、ゲストOS内においてプロセスの切り替え、つまりコンテクスト・スイッチが発生すると、プロセスごとに用意されるページ・テーブル(仮想アドレスから物理アドレスへの変換表)を切り替える必要があり、結果としてVM Exitが発生する。VMMではゲストOSにおけるメモリ空間と実システムのメモリ空間との調停を行った後、ゲストOSに処理を返す(VM Entry)。ほかにもプロセッサの特権命令へのアクセス時、割り込み処理、I/Oデバイスの仮想化処理など、さまざまなイベントをトリガとしてVM Exitが発生する。図にすると次のようになる。

図4 VM Exitの発生事由
VM内では、次のようなイベントが発生すると、VM ExitでVMM/ハイパーバイザへ制御が移行する。
プロセッサの特権命令の実行時。特権命令には、グローバル・ディスクリプタ・テーブル(GDT)/ローカル・ディスクリプタ・テーブル(LDT)のロード命令や各種CRレジスタのMOV命令などがある。
割り込み処理。
ページ・テーブルによるメモリ空間の調停(ページ・フォルトも含まれる)。
I/Oデバイスの調停。

■VT-xのオーバーヘッド低減策
 VT-xにおいて、これらのオーバーヘッドを低減するための方策は大きく分けて2つある。まず、状態遷移に要する時間を削減することである。VM ExitとVM Entryに要する時間をマイクロアーキテクチャ・レベルで短くすることで、オーバーヘッドを削減できる。グラフ1は、VMCALL命令(ゲストOSからVMMへの状態遷移を行う命令)で強制的にVM Exitを発生させて、処理をゲストOSからVMMに移行した後、VMMでは何も処理を行わないで、VMRESUME命令(VMMからゲストOSへの状態遷移を行う命令)でVM Entryを発生させて再びゲストOSに戻るまでの時間を往復遅延時間として、各マイクロアーキテクチャで測定した結果である。VM Exitが発生した際に、最低限これだけの時間がハードウェア・レベルで発生することを示している。実際のオーバーヘッドは、この往復遅延時間にVMM内のソフトウェア処理が加わってさらに大きくなる。

 マイクロアーキテクチャが進化するにつれて、往復遅延時間がハードウェア・レベルで大幅に削減されていることが分かる。

グラフ1 VMM呼び出しにおけるラウンドトリップ・タイム(往復時間)
VMCALL(VM Exit)で処理をゲストOSからVMMに移行した後、VMMでは何も処理を行わないで、すぐにVMRESUME(VM Entry)でゲストOSに戻るのに必要な時間(ナノ秒単位)。プロセッサのマイクロアーキテクチャが進化するごとに、VMMの切り替えに必要な時間は減少し、高速化されている。なおグラフ中のすべてのプロセッサが、VT-xに対応したものである。またPenryn(ペンリン)は、45nmプロセス製造によるCore 2プロセッサの開発コード名である。

 もう1つ、オーバーヘッドの削減に最も有効なのは、VM Exit自体の回数を減らすことだ。それには、ソフトウェアとハードウェアからの2つのアプローチがある。ソフトウェア・ベースでは、VMM内の処理の最適化であったり、不必要なVM Exitを発生させないようにVMMを設定したりすることが挙げられる。ここはVMMベンダの腕の見せどころであり、VMMごとに実装が異なってくる。

 一方のハードウェア・ベースのアプローチはVT-xの拡張機能として提供される。リソースの調停としてVMM内でソフトウェアとして実行していた処理を抽出して、プロセッサやチップセットに実装することで、高速化を図るだけではなく、VM Exitを抑制することもできる。例えば、今後導入されるEPT(Extended Page Table:拡張ページ・テーブル)では、前述のコンテクスト・スイッチ(図4の)におけるページ・テーブルの切り替え処理に伴う、VMM内におけるメモリ空間の調停処理がハードウェアで実行可能となる。

 また、DMA (Direct Memory Access)を用いているI/Oデバイスの仮想化では(図4の)、ソフトウェアのオーバーヘッドが極めて大きい。ダイレクトI/O対応の「インテル バーチャライゼーション・テクノロジー(VT-d)」を用いて、ゲスト環境とI/Oデバイスを1対1に割り当てる(パス・スルーにする)ことによって、VMM内のソフトウェア処理をチップセット内にハードウェア実装することでも高速化が可能だ。VT-dはワークステーションやビジネス・クライアント向けのチップセットにはすでに導入されている。

仮想化環境導入時の検討事項

 前述したとおり、仮想化環境の導入において、ユーザーにとって最も気になる点の1つが性能である。仮想化のオーバーヘッドについて説明したが、これが分かったところで、ユーザーとしては具体的に何を検討すればよいのだろうか?

 まずは、動かしたいアプリケーションの性能特性を把握しておく必要がある。プロセッサ演算能力の影響が大きいのか、I/O性能の影響が大きいのか、ボトルネックになりやすい要因を把握しておけば、前述した仮想化によるオーバーヘッドが、どのようにアプリケーションの性能にインパクトを与えそうか推測することができる。アプリケーションの性能特性は、プロファイリング・ツールを使って計測できる。

 また、ゲスト環境においてベンチマーク・ソフトウェアを実行し、非仮想化環境との比較を行うことによって、オーバーヘッドを数値化することも重要だ。この目的で利用できるベンチマーク・ソフトウェアにはさまざまな種類があるが、アプリケーションの性能特性が分かるようなベンチマーク・ソフトウェアを用いるべきである。仮想化のベンチマークに特化しているものや、仮想化環境上の複数のゲスト環境とそのアプリケーションに対して負荷を発生させて全体性能を見るものもある。例えば、VMwareからは「VMmark」、インテルからは「vConsolidate」というベンチマーク・ソフトウェアが提供されている。これらを使って、仮想化環境のオーバーヘッドを把握しておくとよい。

まとめ

 本稿では、インテルのハードウェアによる仮想化支援技術の概略を説明してきた。VT-xの導入により、多くのVMMが登場し、VMMがサポート対象とするゲスト環境の多様性も深まってきている。仮想化技術の利用用途も広がりを見せており、2008年はPCサーバにおける仮想化元年ともいえる盛り上がりを見せつつある。ただVT-xは、プロセッサにおける仮想化支援の第一歩であり、これからも進化し続けることになる。仮想化技術の進歩とともに、今後のプロセッサの動向についても注目していただきたい。End of Article

 

 INDEX
  [基礎解説]仮想化技術の性能を向上させる、ハードウェア仮想化支援機能とは?
    1.仮想化技術が抱えていた問題点
  2.仮想化技術の性能向上を実現するプロセッサの仮想化支援機能

更新履歴
【2008/08/29】グラフ「VMM呼び出しにおけるラウンドトリップ・タイム(往復時間)」において、「Penryn」を誤って「Pentium」と表記しておりました。お詫びして訂正いたします。

 基礎解説


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間