このページの本文へ

すっきりわかった!仮想化技術 第3回

サーバに使われる仮想化について知ろう

実行効率の高いハイパーバイザ型の仮想化ソフト

2009年05月15日 06時00分更新

文● 大内明/日本仮想化技術株式会社 

  • この記事をはてなブックマークに追加
  • 本文印刷

ハードウェアのアクセス方法

 仮想化ソフトウェアは仮想マシン内でのI/Oアクセスを制御するが、そのためにはハードウェアを仮想化ソフトウェアが制御する必要がある。その点、ハイパーバイザ型はハードウェア上で動作しているため制御は行ないやすい。たとえば、VMware ESXでは仮想化ソフトウェアがデバイスドライバを使ってハードウェアを制御し、仮想化環境内のハードウェアアクセスを代行する(図3)。しかしPCに互換性があるとはいえ、多数のデバイス用にドライバを用意するのは難しい。このため、利用できるハードウェアをある程度限定している。

図3 ハイパーバイザとデバイスドライバ

 一方、Hyper-VおよびXenでは仮想マシンの1つが特別扱いされており、ここで動作するゲストOSが持っているデバイスドライバを使ってハードウェアアクセスを行なう。Hyper-Vの場合、これがWindows Server 2008に限定されている。

 この方式では、仮想化ソフトウェアは各仮想マシンからのI/O処理などを管理している。そして、ゲストOSに組み込まれているI/O処理などを実行するモジュールへ要求を転送し、実際の処理を行なわせる。

 Hyper-VとXenは一見同じ方式のようだが、そのコンセプトは異なっている。Hyper-VはもともとWindows Server 2008用として作られている。そして、マイクロソフトは多数のデバイスドライバを持っているため、これらをそのまま利用できるというメリットがある。

 これに対して、Xenは仮想化ソフトウェアがオープンソースである。このような構造を取ることで、Xen自体のハードウェアやシステムへの依存性を減らすことができ、さまざまな環境で実装しやすくなる。

 準仮想化の場合、ゲストOSのカーネルがハイパーバイザコールでI/O処理を依頼する。また、デバイスアクセスをハイパーバイザコールへ変換する仮想ドライバを使うこともできる。

 完全仮想化の場合、原則としてはハイパーバイザが特定のハードウェアをエミュレーションするが、実行効率を上げるためにこのような仮想ドライバを使うことも少なくない。

効率がよい準仮想化

 アプリケーションがファイルにアクセスする場合、OSのAPI(Application Program Interface)を利用する。また、ファイルシステム自体をOSが管理している。つまり、ゲストOS(カーネル)は、ファイルのアクセスを高いレベルで把握していることになる。

 しかし、デバイスドライバが受け取るのは、たとえばHDDの特定セクタの読み書きといった低いレベルの制御であり、このレベルではどのファイルにアクセスしているのかがわからなくなる。そのため、次に読むセクタを事前に予測することも難しく、効率的な制御ができない。

 ネットワークでも、カーネルレベルではプロトコルを理解している。たとえば、特定のメモリ範囲をTCPを使って転送するといった理解をしているが、ネットワークドライバに与えられるのはパケットの送信といった制御である。

 このように、ファイルシステムのアクセスやネットワークアクセスの場合、高いレベルでの制御をそのままハイパーバイザに依頼することで効率的な仮想化が実現できる。

 ネットワーク上でのファイル共有でも、ファイルサーバ側は特定のセクタの読み書きの指示を受けるのではなく、ファイルのオープンやリードといった高レベルの指示を受けている。

 また、ネットワーク共有が可能なOSであれば、アプリケーションからのファイルアクセスについて、必ずローカルのHDDなのか、それともネットワークの先にあるファイルなのかを区別して別々に処理する仕組みがある。これを利用すれば、仮想マシン内で動作しているゲストOSがハイパーバイザコールを行なうように改良することは難しくない。

 OSによっては、デバイスドライバが階層構造になっていることもある。たとえばファイルアクセスの場合には、最上位にファイルシステムを制御するドライバを配置することが少なくない。こうすることでネットワークファイルシステムが簡単に実現できるようになるからだ。

 準仮想化では、こうしたゲストOSの機構を用いることにより、できるだけ高いレベルで仮想化を行なって効率化している

(次ページ、「プロセッサの仮想化への対応」に続く)


 

カテゴリートップへ

この連載の記事