前回は「CPUの特権レベルに関連する動作」を仮想化する2つの技法を解説した。今回は「メモリー,I/Oの管理」を仮想化するための技法を紹介する。

 I/Oを仮想化する仕組みも大きく二つに分かれる。仮想デバイス方式と,直接割り当て方式である。両者は,バイナリ・トランスレーション方式とパラバーチャライゼーション方式の関係に似ている。

 仮想デバイス方式は,仮想化ソフトが仮想OS用のデバイス(仮想デバイス)を用意し,エミューレーション環境で実行させる。仮想OSはエミューションされたデバイスに対して処理を実行する。

 仮想OSには,仮想化ソフトが用意する仮想デバイス用のデバイス・ドライバが組み込まれる。このデバイス・ドライバを通じて,仮想OSが実行を依頼した処理が仮想化ソフトに渡され,仮想化ソフトが適切な形で入出力を再現する(図4)。このため仮想化ソフトの中にあるエミュレーション環境のなかで,I/O処理依頼が変換され,実際の物理デバイスに処理が引き渡される形となる。

図4●仮想デバイス方式による周辺機器の仮想化
図4●仮想デバイス方式による周辺機器の仮想化
仮想化ソフトウエアが仮想デバイスを用意し,仮想OSには仮想デバイスを呼び出すためのデバイス・ドライバを組み込ませる。仮想OSやその配下で動くアプリケーションは,仮想デバイスを通じて周辺機器を操作する。仮想デバイスから物理デバイスへのマッピングを仮想化ソフトが実施する。

 この方式の場合,仮想化ソフトが複数のOSからの要求を制御できるので,物理デバイスが仮想デバイスより少ない場合でも問題なく処理ができる。つまり,複数の仮想OSからの画面出力要求を適宜制御することにより,両立を可能にしている。

 メモリー管理も同様である。仮想OS配下のアプリケーションが指定したアドレスが,仮想マシンのリニア・アドレスに変換され,さらに仮想マシンにおける物理アドレスに変換される。ここまでを仮想化ソフトのなかで処理を代行する。さらに仮想マシンにおける物理アドレスは,仮想化ソフト内にある変換テーブルなどを通じて,実機の物理アドレスに変換されてアクセスできるようになる。

 仮想デバイス方式の場合,通常の使用環境では存在しない変換処理が介在する。ここがオーバーヘッドとなる。またマッピング処理を仮想化ソフトが実装しなければならず,仮想化ソフト自体が大きくなってしまう欠点がある。

 もう一つの直接割り当て方式では,仮想化ソフトが仮想OSに対して直接物理デバイスを割り当てる(図5)。この方式の場合,通常の利用環境と同じように,仮想OSはそのコンピュータが実装するハードウエア用のデバイス・ドライバを組み込む。そのため仮想化ソフトウエア内部で処理すべき項目が減り,オーバーヘッドは比較的低くなるというメリットがある。ただし物理デバイスと仮想OSを1対1で割り当てるため,デバイスの柔軟な利用という意味では,仮想化を行うメリットは小さくなってしまう。また,メモリーに対しては直接割り当て方式による実装は適用できない。

図5●直接割り当て方式による周辺機器の仮想化
図5●直接割り当て方式による周辺機器の仮想化
仮想化ソフトが,個々の仮想OSに物理デバイスを割り当ててしまう。仮想OSに組み込まれるデバイス・ドライバは,物理デバイスへのデバイス・ドライバとなる。仮想OSがマッピング処理などを実施しないため,効率は高い。しかし一つの物理デバイスを一つの仮想OSが占有してしまう。

周辺機器仮想化もCPUで

 こういった二つの方式のいいとこ取りを狙う技術が,CPUに盛り込まれている。今後サーバー集約に伴う仮想化が進んだ場合,最も大きなオーバーヘッドになるのが,処理負荷が高いI/O周辺の処理であると考えられているからだ。

 I/O処理の仮想化についてはAMDが少し先行した。2006年2月に,「AMD I/O Virtualization Technology」というI/Oの仮想化についてのコンセプトを発表。一方インテルもVTの拡張技術として,仮想OSのI/O処理について支援する「Virtualization Technology for Directed I/O(以下VT-d)」を同年3月に発表した。

 AMDはIOMMU(I/O Memory Management Unit)と呼ぶ機能をチップセットに持たせる。IOMMUを使うことによって,仮想OSにおける仮想メモリー空間と物理メモリー空間の関係をプロセサとチップセットに共有させる。仮想OSが指定したアドレス空間を,変換せずに物理空間のアドレスに変えてくれる。例えばDMA(直接メモリー・アクセス)を使った周辺機器を利用しやすくする。

 インテルのVT-dも,基本的には同じ効果をもたらすのが目的である。主として周辺機器を仮想OSへの割り当てと,DMA用のアドレス変換を実現する。名称こそ違うものの,AMDのIO-MMUとほぼ同じと見ることができる。

 前者はハードウエアで周辺機器を接続したI/O空間のアドレス・マッピングを処理し,仮想OSへの物理デバイスの割り当て機能を提供する(図6)。これによって仮想化ソフトを経由せずに物理デバイスを利用できるようになる。つまり,I/O処理については仮想化ソフトウエアを経由せずに処理できるようになる。このため,仮想化ソフトウエアによる処理負荷が軽減され,I/Oに対する処理の高速化を図るとともに,仮想化ソフトウエアからI/O処理を分離させ,仮想化ソフトウエア自体の処理負荷を軽減しようとさせるものである。

図6●周辺機器の仮想化もCPUが支援
図6●周辺機器の仮想化もCPUが支援
インテルやAMDが新たに提供を始める周辺機器の仮想化技術を使うと,仮想化ソフトによるマッピングが不要になり,しかも複数の仮想OSで一つの物理デバイスを利用できるようになる。

 ただこれだけだと,周辺機器が直接メモリー空間に書き込むDMAの処理に対処するのが難しくなる。そのため,周辺機器が書き込むメモリー空間を変更しておいて,仮想化ソフト側でこれをすべて受け取ってしまう。その後,適切な仮想OSのメモリー空間に内容を転送するという手順となる。

CPU単位のライセンスに変化

 仮想化技術は既に多くの情報システムで導入が始まっている。これまでは一部のエンタープライズ製品を除いて,ハードウエア・アーキテクチャの制約をどのように回避するか,悪い言い方をすれば,どのように仮想OSを「だますか」によって仮想化ソフトを実現してきた。しかし,仮想化技術自体が徐々にハードウエアと連携した実装方式に移行しており,技術の進歩は今後より加速するだろう。

 今後実際に仮想化ソフトを活用する場面で考慮すべきこととして,サイジングとライセンスの問題が挙げられる。サイジングは,これまでのように物理的なリソースを単体のOSで利用するわけではなく,複数で共有するのでサーバーのハードウエア資源の見積もりが難しくなる。運用管理ソフトなどを活用することによって,適正に負荷を配分しなければならなくなるだろう。

 ライセンスについては,仮想OS自身を含め仮想OS上でアプリケーションを稼働させた場合は通常通りライセンス費用がかかる。これまではソフトウエアのライセンス費用についてはCPU単位で課金されるケースが多かったが,CPUを仮想OSで共有するような場合は,ライセンス課金の考え方が異なってくるだろう。実際,マイクロソフトはWindows Server 2003 R2 Enterprise Editionのライセンスを変更し,1台分のサーバー・ライセンスで四つの仮想OSを同時に実行できるようにした。こういった仮想化に対応したライセンスになっている場合は問題がないが,それ以前のものは仮想OSにも1個ずつライセンスが発生する。この点にも注意しておきたいところだ。

金子 仁(かねこ ひとし) 日本総研ソリューションズ
2000年日本総合研究所入社。Web,ICカード・アプリケーションの開発に従事。現在は日本総研ソリューションズ 技術本部 テクノロジーセンターにおいて,システム基盤の技術支援を担当している。