Enterprise Watch
バックナンバー

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


 仮想化と聞くと、エミュレーションするため、パフォーマンスが大幅に落ちたり、頻繁にトラブルが起こってシステムが安定的に動かない、と考えるユーザーも多いだろう。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/04/13 00:00

Enterprise Watch ホームページ
Copyright (c) 2009 Impress Watch Corporation, an Impress Group company. All rights reserved.