写真1●VMware Serverの仮想マシン上で動作するCentOS 4.2でCPUが2つ認識されている
写真1●VMware Serverの仮想マシン上で動作するCentOS 4.2でCPUが2つ認識されている
[画像のクリックで拡大表示]
写真2●VMware ServerではWindows Vistaや64ビットOSもサポートされている
写真2●VMware ServerではWindows Vistaや64ビットOSもサポートされている
[画像のクリックで拡大表示]
写真3●仮想マシンの仮想SMP設定画面
写真3●仮想マシンの仮想SMP設定画面
[画像のクリックで拡大表示]

 「仮想化」とは,例えば1台のコンピュータ上で複数のOS環境を動作させるなど,あたかも複数のシステムが存在するかのような環境をソフトウエアで実現する技術だ。

 これまでのPCは,一つのCPUに対して一つのシステムという結びつきが強かったが,Athlon 64 X2やIntel Core DuoのようにCPUがデュアルコア化し,Intel VT(Virtualization Technology)やAMD "Pacifica"(コードネーム)のような仮想化支援技術をCPU自身が持つことによって,「1CPU=1システム」という“常識”は崩れつつある。

 今回は,現在Linuxで利用できる仮想化技術を整理し,今後の方向性を予想したい。

仮想化の利用は「当たり前」に

 Linuxで仮想化技術を利用する,あるいは仮想化された環境の上でLinuxを動作させるメリットはどこにあるだろうか。

 今までの利用方法で多かったのが,動作実験環境の構築だろう。Linuxは様々なディストリビューションと,早いカーネルのバージョン・アップのおかげで,選択肢も膨大な数に上ることになった。ちょっと新しいディストリビューションを試してみたいという時には,仮想マシンを使ってインストールすればよかった。

 また,ノートPCなどWindows動作に最適化されたハードウエアではLinuxを動作させるのが難しい。しかし,仮想マシンを使えば簡単にWindows上でLinuxを動作させることができる。

 今後はホスティング事業でのVPS(Virtual Private Server)サービスでの利用が増加すると思われる。現在のところ低価格なホスティングサービスでは共用サーバーを使用するケースが多いが,独自のソフトウエアをインストールして使えないなど制限が多い。仮想化技術を使えば1台のサーバーマシンでも,利用者からは完全に別々のサーバーを使っているかのように見える。

 もちろん,ホスティングだけでなく,企業内で使用している何台ものサーバーを,高性能な1台のブレードサーバーに統合(コンソリデーション)するような用途も考えられる。

 今までの仮想化技術は一部の技術者が利用するものだったが,これからは仮想化技術を利用することはが当たり前になっていくだろう。

仮想化を実現する仕組み

 仮想化はどのようにして実現されているのだろうか。実は一口に仮想化技術といっても,その実現方法は多種多様だ。

・PCエミュレーション

 現在,一般的に仮想マシンと呼ばれている手法で,ソフトウエア的に1台のPCをエミュレートするため,通常のOSをそのままインストールして実行できる。この手法の代表例として,VMwareやVirtual PCなどがあげられる。

・仮想OS

 カーネルは一つだが,システムを構成するファイルシステムを複数持つことができる。利用者はそれぞれのファイルシステムにchrootするので,独立したシステムのように利用できる。この手法の代表例として,User Mode LinuxやOpenVZ,vServerなどがあげられる。

・Para-Virtualization

 完全なPCを仮想マシンとして実現するのではなく,擬似アーキテクチャの仮想マシンを実現する手法。「準仮想化」と訳される。また,ベースとなる「ホストOS」が必要ない。PCエミュレーションに比べると実行速度が高速化できるが,OSのカーネルを擬似アーキテクチャに合わせて修正する必要がある。この手法の代表例としてXenがあげられる。

・VMM(Virtual Machine Monitor)

 VMMはPara-Virtualizationを発展させて,OSに修正を加える必要をなくした手法。PCエミュレーションの手法に近いが,ホストOSが必要なく,実行時のオーバーヘッドが少ないため,現在最も注目されている手法といってよいだろう。

 この手法は,Xen 3.0からIntel VT対応のCPUとの組み合わせで実現可能になった。

 このように仮想化技術の選択肢はいくつも存在するが,果たしてどの技術を選択すべきなのだろうか。