野村総合研究所 松本 健


 サーバー仮想化は,ハードウエア環境をソフトウエアで擬似的に提供する技術である。仮想サーバー内で動くOSやプログラムからは,仮想サーバーは1つの物理サーバーのように見える(図1)。

図1●サーバー仮想化の構成
図1●サーバー仮想化の構成

 一方,物理サーバーからは仮想サーバーをソフトウエアとして管理できる。物理サーバーから見ると,仮想サーバーの動作はプロセスやスレッドであり,仮想サーバーの構成は物理サーバー上のファイルとして表現される。こうした仕組みにより,サーバー仮想化を用いたシステムは,従来のハードウエアを用いたシステムに比べ,一般に以下のようなメリットがある。

サーバー環境構築の効率化
 サーバー環境をソフトウエアとして取り扱えるので,CPUやメモリー増設などはソフトウエアの設定のみで実現できる。

サーバー環境の統一
 仮想サーバーは仮想CPU,仮想メモリーなどの仮想デバイスで構成される。同一の仮想サーバーを複製する際は,仮想サーバーを表現するファイルをコピーすれば済む。

テストの効率化
 仮想サーバーにテストで必要なプログラムをインストールした状態でファイルとして保存しておくことで,テスト用の仮想サーバーを他チームに展開することがファイルのコピーで行える。これにより,テストが効率化できる。

負荷テストの効率化
 仮想サーバーへの物理リソースの割当量を変化させることにより,同一のシステム構成のままでリソースを容易に増減できる。

障害切り分けの効率化
 システム障害や,新しいプログラムのテスト時,OSのパッチ適用時のテストなどで発生する障害を切り分けるため,障害が発生した状況の仮想サーバーをファイルとして保存しておき検証することが可能。

古いサーバーの統合
 複数台の古い低スペックのサーバー上で動作しているアプリケーションを1台の高速な最新スペックの物理サーバーに統合できる。

休眠リソースの有効活用
 ピーク時間帯の異なる複数の仮想サーバーを同一の物理サーバー上で動作させることで,ピーク時に多くの物理リソースを動的に配分して有効活用できる。

 このように,多くのメリットがある半面,仮想サーバーには“仮想化ゆえの考慮点”がある。仮想化システムをうまく構築するには,この考慮点を押さえることが基本である。仮想化の「性能」「信頼性」「ライセンス」を順番に見ていこう。

仮想化による性能のオーバーヘッド

 最初の考慮点は,仮想化による性能の問題である。仮想サーバーが物理リソースを利用する際,その管理や制御は「仮想マシン・モニター」と呼ぶ機能が行う。まず,この仮想マシン・モニターの負荷が性能のオーバーヘッドになり得る。

 例えばCPUは,物理CPUリソースをあらかじめ定めた配分比に従い,仮想サーバーに時分割して割り当てている。仮想マシン・モニターは,割り当て前のCPU状態の復元と割り当て終了時のCPU状態を保存している。またメモリーの場合,仮想サーバー上のメモリー空間と物理サーバー上のメモリー空間の対応付けを管理しており,仮想サーバー上のメモリーにリード/ライトが発生するたびに,この対応付けに従い物理サーバー上のメモリー空間へのアクセスを可能にしている。

 上記の仮想化のためのオーバーヘッド以外にも,仮想マシン・モニターの実装方法によって発生するオーバーヘッドも存在する。仮想マシン・モニターはそれ自身の動作にOSが必要なものと,そうでないものがある。このOSをホストOSと呼び,物理サーバー上にインストールしておく必要がある(図2左)。

図2●仮想マシン・モニターのタイプ
図2●仮想マシン・モニターのタイプ

 ホストOSとしては,通常WindowsやUNIXなどを使用する。したがって,物理サーバーのハードウエア構成や種類が異なってもホストOSが稼働すれば仮想サーバー製品がその上で動作することが保証される。ただし,実行時のホストOSのオーバーヘッドを考慮する必要がある。また,ホストOSのライセンス料が発生することにも留意しておきたい。ホストOSが必要な例としては,米Microsoftの「Virtual Server」,米VMwareの「VMware Server」などがある。

 ホストOSが不要なタイプは,仮想サーバー制御用にカスタマイズされた非常に軽量な独自のOSを利用することで,オーバーヘッドを削減し高速に動作させることが可能である。ただし留意すべき点として,ハードウエアとの相性問題がある。先に挙げたホストOSが必要なタイプは一般的なOSを使用するので対応するハードウエアの数は多い。ホストOSが不要な例としては,米VMwareの「VMware ESX Server」,オープンソースの「Xen」などがある。

 仮想化のオーバーヘッドを生み出しているものは,物理サーバーから見ればその上で動作しているプログラムの1つに過ぎない。そのため,オーバーヘッドの割合は,物理サーバーのスペックに左右される。例えば高速なCPU,大量のメモリー,複数のディスクを搭載したようなハイエンドの物理サーバーを利用する場合と,普及型の物理サーバーを利用する場合では,ハイエンドの方がオーバーヘッドの割合は小さくなる。