仮想化はうさんくさい? 仕組みから仮想化を理解する


 仮想化と聞くと、エミュレーションするため、パフォーマンスが大幅に落ちたり、頻繁にトラブルが起こってシステムが安定的に動かない、と考えるユーザー も多いだろう。IT管理者が仮想化を熟知していても、仮想化を詳しく知らないエンドユーザーは、いざ自社のサーバーを仮想化しようというプロジェクトが始 まると、反発が大きい。これは、仮想化というモノに対して、あまりいい印象を持っていなかったり、仮想化のシステムをまったく知らないため、「なんだか気 持ち悪い」というイメージがあるからだろう。このようなイメージを持たれていると、企業における仮想化はなかなか進まない。

 そこで、今回は仮想化とはどんなモノなのかを説明していく。

仮想化はコンピュータの本質

 そもそも仮想化は、リソースの抽象化を指す用語で、単一の物理リソースを複数の論理リソースに見せかけたり、複数の物理リソースを単一の論理リソースに 見せかける技法を指している。サーバー仮想化といえば、物理サーバーのリソースを複数の論理サーバーに見せかける技法を指す。また、複数のストレージを1 つのストレージのように扱うストレージ仮想化なども存在する。

 仮想化を知らないエンドユーザーにとっては、物理リソースが複数の論理リソースとして使えるなんて聞くと、「仮想化って、なんかうさんくさい」と思いが ちだ。しかし、コンピュータの仕組みを見れば、仮想化こそがコンピュータの本質なのだ。

 たとえば、PCでメールやWebブラウザなど複数のアプリケーションを同時に起動して利用しているのも、見方を変えれば仮想化のひとつといえる。この場 合、OSがPCという物理リソースを抽象化することで、複数のアプリケーションが単一の物理リソースを利用できる環境を用意しているのだ。仮想化で使われ ているハイパーバイザーは、このOSよりも上位のレイヤーで動作しているので、うさんくさく思われるのだろうが、コンピュータの仕組みからみてみると、何 もうさんくさいものではないのだ。

ホスト型とハイパーバイザー型

 仮想化には、大きく分けてホスト型とハイパーバイザー型がある。PCで仮想化が始まった当初は、ホスト型が主流だった。

 ホスト型は、仮想化ソフトをホストOS上にアプリケーションとしてインストールし利用するモノ。ホストOS上の仮想化ソフトで、仮想的なハードウェアを 作り、OSやアプリケーションを動かしていた。1アプリケーションとして動作するため、それほど高速なものではなかった。

 ホスト型は、ホストOSのアプリケーションとして仮想化ソフトが動作するため、ホストOSにトラブルが起これば、アプリケーションとして動作している仮 想化環境へもトラブルが波及してしまう。またハードウェアをエミュレーションしているため、トラブルも多かった。

ホスト型はOS上で動作するが、ハイパーバイザー型は直接ハードウェア上で動作する

 そこで、登場したのがハイパーバイザー型だ。ハイパーバイザー型は、OSより下層に仮想化ソフトをおき、すべてのOSを仮想化環境で動かすモ ノ。ホスト型では必要だったホストOSがハイパーバイザー型では不要になるので、その分、仮想化環境にリソースを回すことができる。

 ホストOSを使わないハイパーバイザー型で問題になるのが、デバイスドライバだ。ハードウェアにアクセスする場合、ホスト型ではホストOSが持つデバイ ス管理の仕組みを利用できるが、ハイパーバイザー型ではハイパーバイザーが独自のデバイス管理の仕組みを持たなければならないからだ。

 ハイパーバイザーにデバイスドライバを組み込むと、デバイスドライバの完成度により仮想化環境の安定性が左右される。また、ドライバを複数組み込めば、 ハイパーバイザーのサイズもどんどん大きくなってしまう。VMwareのESXやESXiでは、自社が認定したハードウェアしかサポートしないことにして いるが、その結果、ESX/ESXiではサポートするハードウェアが限定されてしまっている。

ドメイン0となるOSのドライバを利用することでハイパーバイザー自体を小さくできる

 そこで考えられたのがドライバをハイパーバイザーにインストールするのではなく、ドライバを管理するOS(ドメイン0)を別に用意し、各仮想環境では、 ドメイン0のドライバを利用しようというモノだ。これはHyper-VやXenで採用されている。

 これにより、ハイパーバイザーには、ドライバをインストールしなくて済むため、仮想化の基本となるハイパーバイザーのプログラムが小さくなり、オーバー ヘッドも小さくなり、高速に仮想環境を動かすことができる。

 さらに、ドメイン0では、WindowsやLinuxといったOSが利用されるため、ハイパーバイザー専用のドライバを開発しなくても、各OSで利用で きているドライバをそのまま利用できる利点もある。このため、仮想化に対応するハードウェアの種類も、専用ドライバを利用する仮想化ソフトに比べると、格 段に多くなる。

準仮想化では、規定された仮想ハードウェアを用意。仮想マシン上のOSに対応ドライバを組み込んで利用する

 仮想化ソフトの進化として、もう一つ大きなテクノロジーとしては、仮想化のアーキテクチャが完全仮想化(フルバーチャライザーション)から、準仮想化 (パラバーチャライザーション)に移行してきたことだろう。

 完全仮想化は、仮想環境上に実在したハードウェアをエミュレーションしている。このため、仮想環境上で動作しているOSは、現実のハードウェアをサポー トするドライバをそのまま使用できる。これは、ドライバという面では、互換性は高いが、ハードウェアをエミュレーションし、仮想環境上で現実のハードウェ アのドライバを動かすため、何重にもソフトウェアスタックを重ねることになり、システム全体としてみたときにパフォーマンス低下をもたらす。

 そこで出てきたのが準仮想化だ。準仮想化では、現実のハードウェアをエミュレーションするのではなく、仮想環境にとって都合の良い仮想ハードウェアを規 定する。これにより、仮想ハードウェア関連のソフトウェアはシンプルになり、全体として高速に動作するようになる。

 ただし、準仮想化では、仮想ハードウェアを規定するため、仮想環境で動作させるOSごとに対応するドライバが必要になる。多くのメーカーでは、 WindowsやLinuxなどの主要なOSに対して、準仮想化用のドライバが用意されているが、未対応のOSに関しては完全仮想化を使うことになる。こ れにより、古いOSでも仮想環境で動かせるようになるが、ハードウェアのエミュレーションが入るため、準仮想化に比べるとパフォーマンスが落ちる。

CPUによりハイパーバイザーの性能も変わる

 ここまでの説明を読むと、仮想化のすべてをソフトウェアで行っているように思われるかもしれないが、AMDのOpteronやIntelのXeonのよ うに、ハードウェア側でも仮想化を支援する機能は提供されている。たとえば、ハイパーバイザーが効率よく動作するモード(リング-1といわれているもの) をCPUに実装したり、ハイパーバイザーが物理メモリのアドレスと仮想メモリアドレスをソフトウェアでマッピングしているのを、CPUの機能としてサポー トしたExtended Page Tables(EPT)などがある。

 このほか、Intelでは、I/O仮想化機能の「VT-d」やネットワーク仮想化機能の「VT-c」などの仮想化支援機能を提供している。また、AMD では、2009年後半にリリースされるFioranoプラットフォーム(RD890チップセットシリーズ)でI/O仮想化のIOMMUをサポートする予定 だ。

 こうしたハードウェア側の仮想化支援機能は日々進化しているので、古いサーバーを仮想化環境として使うのではなく、最新のサーバーを導入し、その上に古 いサーバーのジョブを移行していくというのが正しいやり方といえる。仮想化環境で古いサーバーのシステム環境は生かせるが、古いサーバーのハードウェアは 再利用できない。また、最新のサーバーに移行した方が、消費電力や発熱なども少なく、サーバー自体のコストも性能がアップしても値段は据え置きということ が多い。

 ただし、これらの仮想化支援機能は、ハイパーバイザーがサポートしていなければ利用できないので注意が必要だ。

仮想化のテストはデスクトップPCでもOK

 CPUの仮想化支援機能などをみると、仮想化のテストをXeonやOpteronといったCPUを搭載したサーバーで行わないといけないように思われる だろう。しかし、未曾有の経済危機を考えれば、数十万円するサーバーをテストだけに購入するわけにもいかない(いくつかのシステムインテグレータなどで は、テスト機を貸してくれたりもするが)。さらに、複数の仮想化されたサーバーを使って、仮想環境を移動させるライブマイグレーション機能などをテストす るには、最低限同じスペックのサーバーが2台必要になる。

 そこで、お勧めしたいのは、デスクトップPCを仮想化のテスト機として使う方法だ。現在リリースされているIntelのCore i7、AMDのPhenom IIなどのCPUを使ったデスクトップPCは、CPUの面から見れば、仮想化支援機能などサーバー用の最新CPUとまったく変わらない。違いといえば、拡 張性と信頼性くらいだ。

 Core i7を使ったデスクトップPCだと10万円くらいで入手できる。Phenom IIなら8万円くらいから販売されている。これをライブマイグレーションのテスト用に2台購入し、バッファローの安価なiSCSIストレージを購入して も、30万円ほどでテスト環境は用意できる。これでテストしてみて、調子が良ければ、本格的にサーバーを購入しても良いし、業務レベルによってはデスク トップPCをそのままサーバーとして利用してもいいだろう。また、仮想化が自分たちの用途に合わないようなら、開発用のデスクトップPCとして流用するこ ともできる。

 仮想化を理解するには、実際に使ってみるのが一番だ。各社のハイパーバイザーは無償で提供されているので、このような組み合わせで仮想化のテストをして みてはいかがだろうか。使ってみると、仮想化に対するイメージはきっと変わることだろう。

(山本 雅史)
2009/4/13 00:00