説明

仮想マシンをフォークまたはマイグレートするための方法

【課題】仮想マシン処理の効率を高めるための方法を提供する。
【解決手段】親仮想マシンをホストコンピュータ上に提供する。親仮想マシンを一時的にまたは永続的に中止する。子仮想マシンは親仮想マシンに関連付けられた全格納されたデータを初めは備えていない。親仮想マシンをフォークして、新しいロケーションで子仮想マシンを生成する。子仮想マシンは、親仮想マシンに関連付けられた格納データの全てを最初は持っていなくてもよい。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は一般的に仮想マシンの分野に関し、特に詳細には、フォーキング(forking)およびマイグレーション(migration)の概念を仮想マシンに適応するための方法に関する。
【背景技術】
【0002】
コンピュータは、システム命令の特定の組を実行するよう設計されている汎用の中央処理装置(CPU)を備えている。類似のアーキテクチャーまたは設計仕様を提供する一群のプロセッサは、同じプロセッサファミリーのメンバーと考えられる。現在のプロセッサファミリーの例は、アリゾナ州フェニックスのモトローラ(株)により製造されたプロセッサ680X0のファミリー、カリフォルニア州サニーベイルのインテル(株)により製造されたプロセッサ80X86のファミリー、および、モトローラ(株)により製造され、カルフォルニア州クパチーノのアップルコンピュータ(株)により製造されたコンピュータで用いられているPowerPCプロセッサファミリーを含む。ある群のプロセッサは、アーキテクチャーおよび設計仕様が類似しているために同一のファミリーに属しているが、プロセッサはクロックスピードおよび他の性能パラメータにしたがってファミリー内でも幅広く相違していることがある。
【0003】
マイクロプロセッサの各ファミリーは、そのプロセッサファミリーに対して独自の命令を実行する。プロセッサあるいはファミリーのプロセッサが実行する命令の集合セットは、プロセッサ命令セットとして知られている。一例として、インテルの80X86プロセッサファミリーで用いられる命令セットは、PowerPCのプロセッサファミリーで用いられる命令セットと互換性がない。インテルの80X86命令セットは、複雑命令セットコンピュータ(CISC)のフォーマットに基づいている。モトローラのPowerPC命令セットは、縮小命令セットコンピュータ(RISC)フォーマットに基づいている。CISCプロセッサは多数の命令を用いており、その命令のいくつかは複雑な機能を実行できるが、実行するために多数のクロックサイクルが必要である。RISCプロセッサはより少数の利用可能な命令を用いて、より速いスピードで実行される、より単純なファンクションセットを実行する。
【0004】
コンピュータシステム間のプロセッサファミリーの独自性は、典型的には、コンピュータシステムのハードウェアアーキテクチャの別の要素間で互換性をなくすことになる。インテルの80X86プロセッサファミリーのプロセッサで製造されたコンピュータシステムは、PowerPCプロセッサファミリーのプロセッサで製造されたコンピュータシステムのハードウェアアーキテクチャと異なるハードウェアアーキテクチャを有している。プロセッサ命令セットおよびコンピュータシステムのハードウェアアーキテクチャの独自性のために、アプリケーションソフトウェアプログラムは、典型的には、特定のオペレーティングシステムを実行する特定のコンピュータシステム上で実行されるように書き込まれる。
【0005】
コンピュータ製造者は、製造者の製品ラインに関連付けられたマイクロプロセッサのファミリー上で実行されるアプリケーションがわずかであるよりは、より多いことによってその機能を最大化することを望んでいる。コンピュータシステム上で実行できるオペレーティングシステムおよびアプリケーションプログラムの数を増やすために、ホストと呼ばれる一種類のCPUを有する所定のコンピュータは、ホストコンピュータがゲストと呼ばれる関連のない種類のCPUの命令を受取って実行することを、エミュレートするようにするエミュレータプログラムを実行する技術分野が開発されている。したがって、そのホストコンピュータは、1つまたは2つ以上のホスト命令が所定のゲスト命令に応答して呼び出されるようにするアプリケーションを実行する。いくつかの場合において、ホストコンピュータは、それ自体のハードウェアアーキテクチャのために設計された、エミュレーションプログラム以外のソフトウェア、および、関連のないハードウェアアーキテクチャを備えるコンピュータのために記述されたソフトウェアの双方を実行できる。より具体的な例として、例えば、アップルコンピュータ(株)により製造されたコンピュータシステムは、PCを基本としたコンピュータシステムのために書き込まれたオペレーティングシステムおよびプログラムを実行できる。単一のCPU上で複数の非互換性のオペレーティングシステムを同時に実行するためのエミュレータプログラムを用いることも可能である。この構成において、各オペレーティングシステムは他のオペレーティングシステムと非互換性であるが、エミュレータプログラムは2つのオペレーティングシステムの1つをホストすることができ、それによって、別の非互換性のオペレーティングシステムを同じコンピュータシステム上で同時に実行できるようにする。
【0006】
ゲストコンピュータシステムをホストコンピュータシステム上でエミュレートする時、ゲストコンピュータシステムは、仮想マシンであるといえる。その理由は、ゲストコンピュータシステムは、ゲストコンピュータシステムのハードウェアアーキテクチャの動作のソフトウェアによる表現としてだけ存在するからである。エミュレータおよび仮想マシンという用語は、コンピュータシステム全体のハードウェアアーキテクチャを模倣するか、あるいは、エミュレートする能力を示すために互換的に用いられる。一例として、カルフォルニア州、サンマテオ市のConnectix(株)によって作られたVirtual
PCソフトウェアは、Intel80X86ペンティアム(登録商標)プロセッサ、および種々のマザーボードコンポーネントおよびカードを含むコンピュータ全体をエミュレートする。これらのコンポーネントの動作は、ホストマシン上で実行される仮想マシンのなかでエミュレートされる。PowerPCプロセッサを備えるコンピュータシステムのような、ホストコンピュータのオペレーティングシステムソフトウェアおよびハードウェアアーキテクチャ上で実行されるエミュレータプログラムは、ゲストコンピュータシステム全体のオペレーションを模倣している。エミュレータプログラムは、ホストマシンのハードウェアアーキテクチャとエミュレートされた環境内で実行されるソフトウェアによって送信される命令との間での互換を行うものとして作用する。
【0007】
実際のマシンに対する仮想マシンの一つの利点は、迅速かつ安価に複数例の仮想マシンを生成する機能を有していることである。もし、仮想マシンの実装によって許されるならば、複数の仮想マシンは単一のホストマシン(ホストコンピュータシステム)の環境中に同時に存在することができる。ホストマシンの資源を種々の仮想マシン間で分割することができる。例えば、4つのプロセッサおよび1ギガバイトのランダムアクセスメモリ(RAM)を提供する単一のホストマシンを、4つの仮想マシンに平等に分割し、各仮想マシンに1つのプロセッサおよび256メガバイトのRAMを与えることができる。他の資源割り当ての分割も可能である。
【0008】
この柔軟性のある資源割り当ては、仮想マシンをあるホストマシンから他のホストマシンへ移動させる機能と組合わされるときに、さらにより有用となる。これによりシステムの「負荷バランシング」が可能となる。例えば、仮想マシンが、1つのホストマシン上で利用できる以上の処理能力を必要とするときに、余分の能力を備える他のホストマシンに移動させることができる。
【発明の概要】
【発明が解決しようとする課題】
【0009】
あるコンピュータ環境において、(ハードウェアおよびソフトウェアの双方の)構成がほぼ同一である複数のマシンを有することは有用である。例えば、Amazon.comのような大規模な電子商取引のウェブサイトは、構成がほぼ同一の何十または何百もウェブサーバを有している。この構成配置によって容易に拡張することができる。現在の容量が適切でないとき、追加サーバを迅速にオンラインで設置可能である。
【0010】
ほぼ同一の構成が有用である他の場合は、構成の変更のテストにおいてである。任務上重大なアプリケーションを取り扱うときには、IS管理者はソフトウェア構成の変更のテストを、その変更を製造システムに適用する前に、行うことをしばしば望んでいる。例えば、新しい「セキュリティパッチ」がウィンドウズ(登録商標)オペレーティングシステムに対してマイクロソフト(株)によって利用可能となった場合、管理者は、プロダクションサーバ上にそのパッチをインストールする前に、別個のサーバマシン上でこのパッチをテストすることを望むこともある。
【課題を解決するための手段】
【0011】
本発明は、一つの実施形態において、仮想マシンプロセッシングの効率を増すための方法を提供する。その方法の一つのステップは親仮想マシンを提供することである。他のステップは親仮想マシンを一時的に中止することである。他のステップは、親仮想マシンをフォークして、新しいロケーションで子仮想マシンを生成することである。
【0012】
本発明は、仮想マシンプロセッシングの効率を増すための他の方法を提供する。この方法の一つのステップは、格納されたデータに関連付けられた親仮想マシンを提供することである。この方法の他のステップは、親仮想マシンを永続的に中止することである。もう一つのステップは、親仮想マシンをフォークして、格納されたデータの少なくとも第1の部分なしに、新しいロケーションで子仮想マシンを生成することである。
【0013】
さらに、本発明は仮想マシンプロセッシングの効率を高めるためのもう一つの方法を提供する。この方法の一つのステップは、格納されたデータに関連付けられた親仮想マシンを提供することである。この方法の他のステップは、親仮想マシンを永続的に中止することである。もう一つのステップは、親仮想マシンをマイグレートして、格納されたデータの少なくとも第1の部分なしに、新しいロケーションで子仮想マシンを生成することである。
【0014】
本発明の一つの実施形態の利点は、仮想マシンのフォーキングを可能にすることにある。フォークを行う能力により仮想マシンの前述の複数の例の実用性が増加する。ある状況の下で、仮想マシンの大抵の機能および仮想マシン上で実行するアプリケーションが、大きく影響されないのに十分なほど迅速に、フォーキングは複数の例を生成することができる。
【0015】
本発明の一実施形態の他の利点は、本発明により仮想マシンの処理の効率が増大することである。
【0016】
本発明の方法の一つの実施形態は、フォーキング時間が親仮想マシンのメモリのサイズによって影響されないという利点を備えている。親仮想マシンの非メモリ部分が僅か数百キロバイトのデータから構成されているときには、フォーキング時間はあるシステム上で約1ミリ秒である。
【0017】
デマンドページングがその方法に加えられるならば、全実行時間もまた親のメモリのサイズに依存することができる。しかしながら、デマンドページングは、親および子の仮想マシン上で実行するアプリケーションとコンフリクトを生じない。
【0018】
前述の利点のいずれも本発明にとって重要である。本発明の特定の実施によっては一部の利点のみを達成するだけかもしれない。例えば、本発明の一つの実施は仮想マシンをフォーキングすることを提供するだけかもしれない。本発明の他の技術的な利点は、以下の図、詳細な説明および特許請求の範囲から当業者であれば明らかなことである。
【図面の簡単な説明】
【0019】
【図1】ホストコンピュータシステムにおいて動作するエミュレートされたコンピュータシステムの要素の論理的関係の図である。
【図2】仮想マシンをフォークするための方法の流れ図である。
【図3】仮想マシンをフォークする際に用いられるデマンドページングの流れ図である。
【図4】仮想マシンをマイグレートするための方法の流れ図である。
【図5】仮想マシンをマイグレートする際に用いられるデマンドページングの流れ図である。
【発明を実施するための形態】
【0020】
エミュレートされたコンピュータシステム、すなわち仮想マシンにおいて、エミュレーションプログラムは、ホストコンピュータシステムにおけるエミュレートされた動作環境を提供する。コンピュータシステム10におけるエミュレートされた動作環境のためのハードウェアおよびソフトウェアアーキテクチャの論理層の図が図1に示されている。エミュレーションプログラム14は、ホストコンピュータシステムハードウェア、すなわちプロセッサ11で動作するホストオペレーティングシステム上で動作する。エミュレーションプログラム14は、ゲストオペレーティングシステム18を含むゲストコンピュータシステム16をエミュレートする。ゲストアプリケーションプログラムはゲストオペレーティングシステム18上で実行することができる。図1のエミュレートされた動作環境においては、エミュレーションプログラム14の実行のために、ホストオペレーティングシステム12およびホストコンピュータシステムハードウェア11と一般的に非互換性のオペレーティングシステム上で動作するようにゲストアプリケーション20が設計されていても、ゲストアプリケーション20はコンピュータシステム10上で動作する。
【0021】
図2および図3を参照して、「フォーキング」は、UNIX(登録商標)プロセスおよびそのアドレス空間の複製を記述するために、UNIX(登録商標)プログラマーに用いられている用語である。もとのプロセスおよびフォークの双方は、フォーキングポイントから独立したプロセスとして動作することができる。フォーキングの実装は、両アドレス空間中の全メモリページが、「ライト禁止」(write protected)としてマークされた「コピーオンライト(copy on write)」と呼ばれる技術を伴う。もとのプロセスあるいはフォークされたプロセスのいずれかが、ページに書き込むとき、各プロセスがそれ自体のコピーを持つようにコピーが行われる。変更されていないページは、引き続き2つのプロセス間で共有されることができる。この技術はメモリ資源を節約するだけではなく、その他の可能な技術よりも速くフォーキングする。
【0022】
本発明において、単一のプロセスをフォーキングすることの概念は、仮想マシンの概念と組合わされている。本発明によれば、オリジナルの仮想マシンとそのフォーク間で、プライベートなコピーに対する共有された資源の速い変換を行うことができる。しかしながら、資源の分配は、同一のホスト上で両仮想マシンが動作している場合にだけ可能である。
【0023】
仮想マシンのフォーキングを使用して、既存の仮想マシンを迅速に複製することができる。例えば、ユーザーが新しいパッチをテストしたいならば、仮想マシンをフォークし、そして、非生産フォーク(non−production fork)にそのパッチをつけることができる。そのパッチがテストされたならば、限定されたリスクでオリジナルコピーにつけることが可能となる。あるいはまた、パッチのテストがいったん完了したならば、生産および非生産の仮想マシンはスワップすることができる。
【0024】
図2には仮想マシンをフォークするための方法20の流れ図を示す。ステップ202において、親仮想マシンを中止する。ステップ204において、コピーすなわち「スナップショット(snapshot)」を、親仮想マシンのメモリ以外の全ての構成要素で作る。ステップ206において、そのスナップショットを新しいロケーション、すなわち、その親のロケーション以外のロケーションに移動させる。そのスナップショットを新しいロケーションに移動することにより、新しい子仮想マシンを生成する。その子は親と同じホストコンピュータシステム上に配置してもよいし、あるいは配置しなくてもよい。ステップ208において、親のメモリの部分を、デマンドページングを用いている子に送信する。図3に示されているデマンドページングは、親から子へメモリの部分あるいはページを送信する方法である。デマンドページングにおいて、子が積極的に要求することに基づいて、親のメモリに優先度が付けられる。
【0025】
図3は仮想マシンをフォークする際に用いられる、ステップ208のデマンドページングの流れ図である。ステップ302において、子にまだ送信されていない親のメモリの一部分を親仮想マシンが変更しようとしているか否かを判断する。親仮想マシンがメモリの一部分を変更しようとしているならば、ステップ304において、親がそのメモリの一部分を変更することを許される前に、そのメモリの一部分を、子の仮想マシンに送信するが、あるいはその一部分の一時的なコピーが作成される。一時的なコピーはデマンドページングの方法の中のまだ決定されていない後のポイントまで、親によってセーブされ、そのポイントにおいて、そのコピーが子に送信される。親がメモリの一部分を変更しようとしていないか、あるいはステップ304が完了している場合には、その方法はステップ306に進む。
【0026】
ステップ306において、子仮想マシンが親仮想マシンのメモリにアクセス中であるか否かを判断する。子が親のメモリにアクセス中であるならば、ステップ308において、子仮想マシンは一時的に中止され、子によって要求される親のメモリの一部分が親から子へ送信される。その子が親のメモリにアクセス中でないならば、ステップ310において、子によって積極的に要求されていない親のメモリの部分を親から子へ送信してもよい。ステップ308あるいはステップ310が完了したならば、その方法はステップ312へ進む。
【0027】
ステップ312において、親仮想マシンのメモリの全部が子仮想マシンに送信されたか否かを判断する。メモリの全部が送信されていないのであれば、本方法は上述したステップ302に進む。メモリの全部が送信されたならば、デマンドページング方法は終了する。
【0028】
ここで、図4および図5を参照するに、「マイグレーティング」は、あるホストマシンから他のホストマシンへの仮想マシンの移動を示す用語である。仮想マシンがマイグレートされるとき、オリジナルの仮想マシンは永続的に中止されている。そして、コピーが新しいロケーションで動作する。マイグレーションを実行する一つの手順は、ディスク上のファイルに(全てのRAMを含む)仮想マシンの全ての状態をセーブし、ついでファイルを新しいホストにコピーして、マシンの状態を回復する。
【0029】
本発明では、マイグレーティングはその実行においてはフォーキングと類似している。フォークされた仮想マシンと同様に、マイグレートされた仮想マシンは、それが生成されたほぼ直後に、すなわち生成後1ないし2秒内に動作を始動する。この特徴はデマンドページングおよび「コピーオンアクセス(copy−on−access)」の使用により生じている。ここで、コピーオンアクセスは、子が親のメモリにアクセスするうえで子に親のメモリをコピーすることと定義される。コピーオンアクセスは仮想マシンをマイグレーティングするためのデマンドページングの一側面である。
【0030】
コピーオンアクセスは、既存の技術に対する本発明の利点でもある。既存の技術は親のランダムアクセスメモリ(RAM)の全体のコピーをセーブし、および回復する。既存の技術のセーブおよび回復することは、親に割当てられたメモリのサイズに依存して、5秒から60秒の時間がかかってしまう。
【0031】
仮想マシンをマイグレートする一つの応用は、負荷バランシングである。他の応用は故障回復(fail−over)あるいはハードウェアメンテナンスのためのものである。例えば、ホストマシン中のハードウェアがメンテナンス(例えば、メモリの増設)を要求するときには、仮想マシンはバックアップマシンに一時的にマイグレートされ、中断時間を避ける。
【0032】
図4は仮想マシンをマイグレートするための方法40の流れ図である。ステップ402において、親の仮想マシンを永続的に中止している。ステップ204において、コピーあるいは「スナップショット」は、親仮想マシンのメモリ以外の全ての構成要素で作られている。ステップ206において、そのスナップショットを新しいロケーション、すなわち、その親のロケーション以外のロケーションに移動させる。そのスナップショットを新しいロケーションに移動することにより、新しい子仮想マシンを生成する。その子は親と同じホストコンピュータシステム上に配置してもよいし、あるいは配置しなくてもよい。ステップ404において、親のメモリの部分をデマンドページングを用いている子に送信する。図5に示されているデマンドページングは、親から子へメモリの部分あるいはページを送信する方法である。デマンドページングにおいて、子が積極的に要求することに基づいて、親のメモリに優先度が付けられる。
【0033】
図5は、仮想マシンをマイグレートするのに用いられるステップ404のデマンドページングの流れ図である。ステップ306において、子仮想マシンが親仮想マシンのメモリにアクセス中であるか否かを判断する。子が親のメモリにアクセスするならば、ステップ308において、子仮想マシンは一時的に中止され、子によって要求される親のメモリの一部分が親から子へ送信される。その子が親のメモリにアクセス中でないならば、ステップ310において、子によって積極的に要求されていない親のメモリの部分を親から子へ送信してもよい。ステップ308あるいはステップ310が完了したならば、その方法はステップ312へ進む。
【0034】
ステップ312において、親仮想マシンのメモリの全部が子仮想マシンに送信されたか否かを判断する。メモリの全部が送信されていないのであれば、本方法は上述したステップ502に進む。ステップ502において、親のメモリを削除する。ステップ502の後、デマンドページング方法は終了する。
【0035】
本発明は、その適用にあたって、特定のコンピュータシステムアーキテクチャー、特にインテル80X86アーキテクチャーのエミュレーションに限定されない。
【0036】
本発明を詳細に記載してきたが、特許請求の範囲により定義されている本発明の精神および範囲から離れることなく、種々の変更、代用および代替を行うことができる。

【特許請求の範囲】
【請求項1】
仮想マシン処理の方法において、第1のホストシステム上にあって、第1の仮想マシンは格納されたデータを備え、前記第1の仮想マシンは、ゲストオペレーティングシステムをホストするように構成され、前記第1の仮想マシンは、物理的なハードウェアコンピュータがゲストオペレーティングシステムをホストするように、該ゲストオペレーティングシステムが対話するソフトウェア環境を備え、前記方法は、
前記第1の仮想マシンをマイグレーティングして第2の仮想マシンを生成することであって、前記第1の仮想マシンが実行している間に、実行中の第1の仮想マシンのメモリから、前記第2の仮想マシンのメモリにページをコピーすることにより生成し、前記ページがコピーされる第1の仮想マシンのメモリは、前記第1の仮想マシンの実行中、前記第1の仮想マシンにより読み出し、または書き込むことができるメモリであることを特徴とする方法。
【請求項2】
前記第2の仮想マシンは、第2のホストコンピュータシステム上にあることを特徴とする請求項1に記載の方法。
【請求項3】
前記第2の仮想マシンは、前記第1のホストコンピュータシステム上にあることを特徴とする請求項1に記載の方法。
【請求項4】
前記第1の仮想マシンの部分を、前記第1の仮想マシンが停止している間に前記第2の仮想マシンにコピーすることを特徴とする請求項1に記載の方法。
【請求項5】
前記第1の仮想マシンの前記メモリからコピーされた前記ページにいくつかは、対話形式で使用していないページをコピーするプロセスの一部としてコピーされることを特徴とする請求項1に記載の方法。
【請求項6】
前記第1の仮想マシンの部分を、前記第1の仮想マシンが停止している間に前記第2の仮想マシンにコピーすることを特徴とする請求項5に記載の方法。
【請求項7】
前記第2の仮想マシンに対する前記第1の仮想マシンのメモリページを、コピーオンデマンドアルゴリズムを使用してコピーすることをさらに備えたことを特徴とする請求項1に記載の方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate


【公開番号】特開2012−74090(P2012−74090A)
【公開日】平成24年4月12日(2012.4.12)
【国際特許分類】
【出願番号】特願2012−10295(P2012−10295)
【出願日】平成24年1月20日(2012.1.20)
【分割の表示】特願2009−49688(P2009−49688)の分割
【原出願日】平成15年6月26日(2003.6.26)
【出願人】(500046438)マイクロソフト コーポレーション (3,165)