ハードウェアのアクセス方法
仮想化ソフトウェアは仮想マシン内でのI/Oアクセスを制御するが、そのためにはハードウェアを仮想化ソフトウェアが制御する必要がある。その点、ハイパーバイザ型はハードウェア上で動作しているため制御は行ないやすい。たとえば、VMware ESXでは仮想化ソフトウェアがデバイスドライバを使ってハードウェアを制御し、仮想化環境内のハードウェアアクセスを代行する(図3)。しかしPCに互換性があるとはいえ、多数のデバイス用にドライバを用意するのは難しい。このため、利用できるハードウェアをある程度限定している。
一方、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の機構を用いることにより、できるだけ高いレベルで仮想化を行なって効率化している。
(次ページ、「プロセッサの仮想化への対応」に続く)
この連載の記事
-
第7回
ソフトウェア・仮想化
ネットワーク機器で用いられる仮想化技術 -
第6回
ソフトウェア・仮想化
サーバだけじゃない!ストレージ仮想化の重要性 -
第5回
ソフトウェア・仮想化
クライアントPCを仮想化するVDIの正体 -
第4回
ソフトウェア・仮想化
パーティショニングによる仮想化とは? -
第2回
ソフトウェア・仮想化
ホストOS型とハイパーバイザ型の違いを知る -
第1回
ソフトウェア・仮想化
さまざまな仮想化技術の基本を理解する -
ソフトウェア・仮想化
すっきりわかった仮想化技術<目次> - この連載の一覧へ