後藤弘茂のWeekly海外ニュース

CPUのハードウェア仮想化技術でOSが変わる




●ソフトウェアとCPUアーキテクチャに大きな影響を与える仮想化

 IntelとAMDは、CPUに「仮想化(Virtualization)」支援ハードウェアを実装、それをイネーブル(有効)にしようとしている。Intelは「VT(Virtualization Technology:コードネームVanderpool)」を、AMDは「Pacifica(パシフィカ)」を、それぞれ今年後半から来年のCPUでイネーブルにし始める。

 CPUの仮想化技術の目的は、従来ソフトウェアだけのソリューションだった「VMM(Virtual Machine Manager)」をハードウェアで支援すること。ハードウェアでサポートすることで、より堅牢で高パフォーマンスの仮想マシン(VM)を作れるようにする。その結果、仮想化技術が、より一般的に使われる技術になるというのがシナリオだ。

 現在、CPUの仮想化技術は、1台のマシン上で複数のOSを立ち上げるという点で話題にされている。しかし、CPUの仮想化技術の先に見えるのは、もっと大きな技術ビジョンだ。

 CPUの仮想化は、まず、OSのあり方を変える。ハードウェア側の仮想化技術で加わった新しい特権モードで走らせるハイパーバイザ(Hypervisor)ソフトを、OSのマイクロカーネル的に使う。それにより、より堅牢なカーネルソフトウェア層を作り出し、従来のOSは、その上で従来の特権モードで走るソフトウェアスタックとする。役割毎に異なる仮想マシンを作り、OSサブカーネルを立ち上げるといった使い方もできるようになる。例えば、セキュアOSカーネルが走る、セキュリティボックス的な仮想マシンを作り出す。

 CPUの仮想化技術は、ソフトウェア側のランタイム技術とも結びつく。Javaや.NETのランタイム(CLR)は、現在OSの上の仮想マシンとして動作し、その上で中間コードのプログラムを実行する。ランタイムの中には、仮想化支援ハードウェアを使えば効率が上がる処理があり、よりパフォーマンスを向上させることが可能になる。

 CPUの仮想化技術は、CPUのマルチコア化とも密接に結びついて行く可能性が高い。現在と今後数年のPCでは、1~2個のCPUコアの上で複数の仮想マシンを使う。しかし、将来は、1つの仮想マシンに、CPUコアを1個あるいは複数個割り当てるようになる。例えば、CPUコアを10個以上搭載するようになれば、「仮想マシン=物理CPUコア」と結びつくようになる。さらに、仮想マシンと連動してCPUコア群を制御することで、マルチコアCPUの問題の1つであるコヒーレンシの問題を解決できる。

 CPUの仮想化技術は、こうしたOSとランタイム、CPUハードウェアの変革のための土台の技術となる可能性が高い。

●Microsoftが構想するWindows Virtualization

 今年8月末に米サンフランシスコで開催されたIntelの技術カンファレンス「Intel Developer Forum(IDF)」で、Microsoftは「Microsoft's Machine Virtualization Roadmap」と題したセッションを行い将来の仮想化技術の概要を説明した。このセッションは、5月にMicrosoftの技術カンファレンス「WinHEC(Windows Hardware Engineering Conference and Exhibition)」で行なったものとほぼ同内容。セッションのプレゼンテーションにあったのが、下の「Windows Virtualization」のスライドだ。

VMM Arrangements
PDF版はこちら

 左側の「Type-2 VMM」が、Java Virtual Machine(JVM)や.NETのCLR(Common Language Runtime)などの仮想マシン。JVMやCLRがVMMとして、ホストOSの上で走る。

 真ん中の「Hybrid VMM」が、現在のVMMを使った仮想化の仕組み。まず、ホストOSが走り、次ぎにVMMがホストOSの上で走ってゲストOSを走らせる。CPUの仮想化支援ハードウェアを使うと、VMMがハードウェアで支援されるが、基本は変わらない。

 それに対して右側の「Type-1」の図では、ホストOSがなく、OS層の下でマシンを仮想化するVMMソフトウェア「ハイパーバイザ(Hypervisor)」が走る。通常、Hypervisorは、仮想マシンの管理や、ハードウェアリソースへの調停など、基本的なサービスを提供するソフトウェアだ。このモデルでは、OSは、Hypervisorの上で走るゲストOSとなる。これが、Microsoftが次世代のWindowsの仮想化技術として開発している「Windows Virtualization」だ。

 Hypervisor型のモデルは、ハードウェアによる仮想化支援を最初から前提とした、新しいソフトウェアスタックの姿だ。Microsoftは、現在このモデル構築に向けて開発に取り組んでいることを明確にしている。ターゲットは、サーバーOSであるLonghorn Serverだが、将来的にはサーバー以外のOSにも持ち込むだろうと推測される。

 もっとも、仮想化技術でのHypervisor自体は珍しい技術ではない。メインフレームなどでは以前から当たり前に使われている。また、身近なところではPLAYSTATION 3もHypervisorを使う。

 PLAYSTATION 3には、「Cell OS」と呼ばれる独自のOSが用意されており、起動すると、内蔵のファームからCell OSのHypervisorがまず立ち上がる。その上で、Cell OSの上層レイヤやLinuxなどのOSがディスクから立ち上がる仕組みとなっている。Cellベースのホームサーバーなどの場合は、Cell OSとLinuxなどが同時に立ち上がり、ゲーム機能とホームサーバー機能の両方を同時に提供する仕組みだ。CellのHypervisorは、仮想マシンの管理の他、サブCPUコアである「SPE(Synergistic Processor Element)」の仮想マシンへの割り当てなども管理する。つまり、マルチコアの管理とも結びついている。

●マイクロカーネル化するHypervisor

 Microsoftのサーバーサイドの仮想化技術ロードマップは下のスライドの通り。「Virtual Server R2」で64-bit化し、次のステップでハードウェア側の仮想化技術をサポートする。そして、その先にはWindows Virtualizationが控えている。Windows Virtualizationでは、CPU側のハードウェア仮想化とx64が必須となる。

Server Virtualization Roadmap
PDF版はこちら
Virtual Server 2005 R2:Future
PDF版はこちら

 Windows Virtualizationでは、「Windows Hypervisor」と呼ぶソフトウェアをVMMとしてMicrosoftが提供する。ただし、Microsoftが考えているのは、Hypervisorだけで仮想マシンを管理する構造ではない。Microsoftが「Monolithic Hypervisor」と呼ぶモデルでは、Hypervisor側にドライバソフトウェアをビルトインして制御する。

 しかし、Microsoftは、ドライバは仮想マシン(VM)上のOS側に持たせるモデルを構想している。VMMの機能は、Windows Hypervisorと、仮想マシンの中のペアレントパーティション上の「Virtualization Stack」に分散する。目的は、Windows Hypervisorをよりシンプルで安定性の高いものにし、Hypervisor層でサードパーティのコードが走らないようにすること。このモデルの場合、ドライバのコードに問題があっても、Windows Hypervisorは影響を受けないで済む。膨大な数の周辺機器が存在するWindows環境に合わせた変更と推定される。

 Windows Hypervisorのコンセプトは、非常に薄いソフトウェア層で、高信頼性とセキュリティを実現すること。ある業界関係者は「Windows NTの当初の思想だったマイクロカーネルに、再び立ち戻ったように見える」と語る。実際、Microsoft自身もMicrokernelized hypervisor(マイクロカーネル化ハイパーバイザ)と呼んでいる。新しいモードで走るWindows Hypervisorがコンパクトで堅牢なマイクロカーネルのようなソフトウェア層となり、その上に従来のモードで走るWindows OSが載る形となる。理念的には、Windows NTが当初目指したマイクロカーネルを、新しいハードウェアフィーチャで実現したように見える。

モノリシック対マイクロカーネル
PDF版はこちら
ハイパーバイザ
PDF版はこちら

 仮想マシンは実際には仮想的なパーティションで、各パーティションに仮想プロセッサが割り当てられ、ゲストソフトウェアが走る。Windows Hypervisorは、メモリ管理やCPUユーセージの割り当て、パーティション間のメッセージングなどを行ない、プログラミングインターフェイス「Hypercall」を提供する。

ハイパーバイザ
PDF版はこちら

 パーティションはペアレントとチャイルドに分かれる。ペアレントパーティションでは、仮想マシンをハンドルする「Virtualization Stack」群と、それを走らせる小さなコアOSが走る。このVirtualization Stackが、Windows Hypervisorとインタラクトし、チャイルドパーティション群を管理・生成する。

Virtualization Stack
PDF版はこちら

 デバイスは、従来通りのOS側のデバイスドライバスタックによって制御される。直接ハードウェアをコントロールするのは、ペアレントパーティションのドライバだ。チャイルドパーティションのドライバは、ハードウェアに直接アクセスするように仮想化される。パーティション間のメッセージングするソフトウェアバス「VMBus」を通じて、ペアレントのドライバ経由でハードウェアにアクセスすることになる。

デバイスの仮想化
PDF版はこちら

●ハードウェア仮想化を使いOSを再構築

 こうしてWindows Virtualizationの全体図を眺めてみると、これがMicrosoft OSの構造的な変革の1つであることがよくわかる。Hypervisorをマイクロカーネル的に使い、その上のドライバスタックや仮想マシンの管理のソフトウェアスタックにペアレントパーティションを当てる。アプリケーションは、その上のチャイルドパーティションのOSの上で走ることになる。

 Microsoftは、ハードウェア仮想化を利用して、こうしたOSのリストラクチャリングを進めようとしているようだ。Windows Virtualizationの場合、ハードウェア仮想化によって、OSから上の層はデバイスドライバも含めて変更する必要がないのが大きな利点だ。

 その一方で、上の層は、Win32 APIから.NETランタイムへの移行を進める。この計画は当初の予定より後退している(Windows Vista/Longhornで.NETに移行させるつもりだったのが、現在はWin32と並行に変わっている)が、長期的な路線は変わらないだろう。そして、.NETのCLRの方も、CPU側のハードウェア仮想化の恩恵を受けることになるかもしれない。

 別な視点から見ると、Windows Virtualizationは、Microsoftの戦略としては当然の選択だ。Microsoftが最も嫌うのは、自分たちのOSの下に別なソフトウェアが走ることだからだ。ある業界関係者は、Intelが以前、ハードウェアに密着したソフトウェア層「NSP(Native Signal Processing)」の導入をMicrosoftの猛反対で断念した件を引き合いに出す。今回も、Microsoftは他社がHypervisorを提供することには、いい顔をしないだろうという。ハードウェア仮想化で、Hypervisor型ソフトウェアが登場するのなら、Microsoftとしては、その部分も抑えなければと考えるのは、同社の文化として自然かもしれない。

□関連記事
IDF Fall 2005レポートリンク集
http://pc.watch.impress.co.jp/docs/2005/link/idff.htm

バックナンバー

(2005年9月12日)

[Reported by 後藤 弘茂(Hiroshige Goto)]


【PC Watchホームページ】


PC Watch編集部 pc-watch-info@impress.co.jp ご質問に対して、個別にご回答はいたしません

Copyright (c) 2005 Impress Corporation, an Impress Group company. All rights reserved.