(57)【要約】【課題】仮想マシンを異なる情報処理装置に移行させる際に、仮想マシンの移行時間を短くし、かつ性能の低下を軽減すること。【解決手段】本願の開示する情報処理装置は、仮想マシンを動作させる。情報処理装置は、第１の転送部と、停止制御部と、第２の転送部とを有する。第１の転送部は、仮想マシンを他の情報処理装置に移行させる際に、メモリ領域に格納された情報のうち、仮想マシンの移行直後に当該仮想マシンによるアクセス頻度の予測値が所定の閾値よりも高い情報を前記他の情報処理装置に転送する。停止制御部は、第１の転送部によって情報が転送された後に、仮想マシンを停止させて、仮想マシンの起動に用いられる構成情報を他の情報処理装置に転送する。第２の転送部は、他の情報処理装置において、仮想マシンが起動された場合、未転送の情報を他の情報処理装置に転送する。【選択図】図３
2015022380.tif 000002
【特許請求の範囲】
【請求項１】
仮想マシンを動作させる情報処理装置において、
前記仮想マシンを他の情報処理装置に移行させる際に、メモリ領域に格納された情報のうち、仮想マシンの移行直後に当該仮想マシンによるアクセス頻度の予測値が所定の閾値よりも高い情報を前記他の情報処理装置に転送する第１の転送部と、
前記第１の転送部によって前記情報が転送された後に、前記仮想マシンを停止させて、前記仮想マシンの起動に用いられる構成情報を前記他の情報処理装置に転送する停止制御部と、
前記他の情報処理装置において、前記仮想マシンが起動された場合、未転送の情報を前記他の情報処理装置に転送する第２の転送部と
を有することを特徴とする情報処理装置。
【請求項２】
前記第１の転送部は、前記アクセス頻度の予測値が所定の閾値よりも高い情報であって、同一の情報が前記他の情報処理装置に転送済みではない場合に、当該情報と当該情報が格納される位置情報とを前記他の情報処理装置に転送し、同一の情報が前記他の情報処理装置に転送済みである場合に、当該情報が格納される位置情報を前記他の情報処理装置に転送することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第１の転送部は、前記アクセス頻度の予測値が所定の閾値よりも高い情報であって、当該情報が更新されていない場合に、当該情報を前記他の情報処理装置に転送することを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記停止制御部は、前記第１の転送部によって転送された情報のうち、前記仮想マシンが起動される前に更新された情報を特定した無効化情報を前記他の情報処理装置に転送し、当該無効化情報に登録された情報へのアクセスを禁止させることを特徴とする請求項１〜３のいずれか一つに記載の情報処理装置。
【請求項５】
前記第２の転送部は、前記他の情報処理装置で動作させる前記仮想マシンによって参照される情報を当該他の情報処理装置から要求された場合、当該情報を優先的に当該他の情報処理装置に転送することを特徴とする請求項１〜４のいずれか一つに記載の情報処理装置。
【請求項６】
他の情報処理装置で動作する仮想マシンの移行直後に当該仮想マシンによるアクセス頻度の予測値が所定の閾値よりも高い情報を当該他の情報処理装置から受信する第１の受信部と、
前記仮想マシンの停止後に、当該仮想マシンの起動に用いられる構成情報を、前記他の情報処理装置から受信し、受信した前記構成情報を用いて当該仮想マシンを起動させる起動制御部と、
前記仮想マシンを起動させた後に、未転送の情報を前記他の情報処理装置から受信する第２の受信部と
を更に有することを特徴とする請求項１〜５のいずれか一つに記載の情報処理装置。
【請求項７】
仮想マシンを動作させる情報処理装置が、
前記仮想マシンを他の情報処理装置に移行させる際に、メモリ領域に格納された情報のうち、仮想マシンの移行直後に当該仮想マシンによるアクセス頻度の予測値が所定の閾値よりも高い情報を前記他の情報処理装置に転送する第１の転送工程と、
前記第１の転送工程によって前記情報が転送された後に、前記仮想マシンを停止させて、前記仮想マシンの起動に用いられる構成情報を前記他の情報処理装置に転送する停止制御工程と、
前記他の情報処理装置において、前記仮想マシンが起動された場合、未転送の情報を前記他の情報処理装置に転送する第２の転送工程と
を含んだことを特徴とする仮想マシンの移行方法。
【請求項８】
仮想マシンを動作させる情報処理装置に、
前記仮想マシンを他の情報処理装置に移行させる際に、メモリ領域に格納された情報のうち、仮想マシンの移行直後に当該仮想マシンによるアクセス頻度の予測値が所定の閾値よりも高い情報を前記他の情報処理装置に転送する第１の転送手順と、
前記第１の転送手順によって前記情報が転送された後に、前記仮想マシンを停止させて、前記仮想マシンの起動に用いられる構成情報を前記他の情報処理装置に転送する停止制御手順と、
前記他の情報処理装置において、前記仮想マシンが起動された場合、未転送の情報を前記他の情報処理装置に転送する第２の転送手順と
を実行させることを特徴とする仮想マシンの移行プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、仮想マシンの移行方法及び仮想マシンの移行プログラムに関する。
【背景技術】
【０００２】
従来、企業などの利用者は、業務用のシステムなどを構築する際、開発或いは運用のための事業所や機材、回線、ＯＳ（Operating  System）やミドルウェアなどのソフトウェア環境、開発環境などを入手して、システムを稼働するためのインフラを構築する。
【０００３】
また、利用者は、利用実績に応じて課金するサービス「ＨａａＳ(Hardware  as  a  Service)」を利用する場合がある。ＨａａＳでは、大規模なデータセンタに設置された情報処理装置（或いは、物理サーバ）に、ソフトウェアで構成されたサーバ（以下、仮想マシン）を起動する。そして、利用者は、インターネットを通じ必要に応じて仮想サーバを利用する。これにより、利用者は、サーバの構築費用や維持費用を削減可能となる。
【０００４】
また、自然災害や電源装置などの障害によりデータセンタが機能を停止する場合がある。このようなことから、サービス提供者は、データセンタを複数拠点に配置し、障害の予兆を検出した場合、障害の予兆を検出したデータセンタで稼動する仮想マシンを他のデータセンタに移行させる。これにより、サービス提供者は、特定データセンタの機能停止時でも、ＨａａＳサービスを提供し続けることが可能となる。なお、実行中の仮想マシンを停止させずに物理的に異なる情報処理装置へ移行することを「ライブ移行」と言う。
【０００５】
ここで、ライブ移行では、「プレコピー型」の移行方式が一般的である。プレコピー型のライブ移行では、仮想マシンが利用するメモリの内容を一旦移行先の情報処理装置Ｐｄにコピーした後、コピー中に変更されたメモリの内容を移行先の情報処理装置Ｐｄにコピーする。そして、変更されたメモリの内容をコピーした後に、仮想マシンのＣＰＵ（Central  Processing  Unit）情報などを移行先の情報処理装置Ｐｄに転送し、移行先の情報処理装置Ｐｄで仮想マシンを起動させる。なお、ここで言う「メモリの内容」とは、仮想マシンのメモリ領域に格納されたデータを示す。
【０００６】
この一方で、プレコピー型のライブ移行では、仮想マシンがメモリの内容を多く変更する場合、変更内容のコピー処理を繰り返すことになるので、仮想マシンの移行時間、または仮想マシンの停止時間が長くなる。このようなことから、仮想マシンを移行先の情報処理装置Ｐｄに移行させてから、メモリの内容をコピーする「ポストコピー型」の移行方式が知られている。このポストコピー型のライブ移行では、仮想マシンの移行時間を短くすることが可能となる。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】広渕  崇宏、山幡  為佐久、伊藤  智、“準仮想化ページフォルトを用いたポストコピー型ライブマイグレーションの性能向上手法”、情報処理学会、第２４回コンピュータシステム・シンポジウム、2012/12/6
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、従来の技術では、仮想マシンを異なる情報処理装置に移行させた後からコピーが完了するまで性能が低下する場合があるという課題がある。具体的には、ポストコピー型の場合、移行先の情報処理装置Ｐｄで仮想マシンが起動後、仮想マシンが参照するデータが移行元の情報処理装置から未転送である場合、移行元の情報処理装置からデータの転送完了を待つ必要がある。
【０００９】
この場合、移行先の情報処理装置Ｐｄは、仮想マシンが参照するデータを移行元の情報処理装置に要求して、未転送のデータを取得する。また、仮想マシンは、この未転送のデータを取得するまで停止する。このため、例えば、移行元の情報処理装置と移行先の情報処理装置との帯域が細い場合には、未転送のデータを取得するまでの時間が長くなる。未転送のデータを取得する時間が長い場合、仮想マシンの停止時間が長くなり、移行後の仮想マシンの性能が低下する。
【００１０】
開示の実施形態は、上述に鑑みてなされたものであって、仮想マシンを異なる情報処理装置に移行させる際に、仮想マシンの移行時間を短くし、かつ仮想マシン移行後の性能の低下を軽減することを目的とする。
【課題を解決するための手段】
【００１１】
本願の開示する情報処理装置は、仮想マシンを動作させる。情報処理装置は、第１の転送部と、停止制御部と、第２の転送部とを有する。第１の転送部は、仮想マシンを他の情報処理装置に移行させる際に、メモリ領域に格納された情報のうち、仮想マシンの移行直後に当該仮想マシンによるアクセス頻度の予測値が所定の閾値よりも高い情報を前記他の情報処理装置に転送する。停止制御部は、第１の転送部によって情報が転送された後に、仮想マシンを停止させて、仮想マシンの起動に用いられる構成情報を他の情報処理装置に転送する。第２の転送部は、他の情報処理装置において、仮想マシンが起動された場合、未転送の情報を他の情報処理装置に転送する。
【発明の効果】
【００１２】
開示する情報処理装置の一つの態様によれば、仮想マシンを異なる情報処理装置に移行させる際に、仮想マシンの移行時間を短くし、かつ性能の低下を軽減することができるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】図１は、第１の実施形態に係るコンピュータシステムの全体構成例を示す図である。
【図２】図２は、第１の実施形態に係る仮想マシンが有する情報処理装置の構成例を示す図である。
【図３】図３は、第１の実施形態に係るコンピュータシステムにおけるライブ移行の処理動作を示す図である。
【図４】図４は、仮想デバイスが実現する機能部の構成例を示す図である。
【図５】図５は、第１の実施形態に係る転送用メモリ管理テーブルのデータ構造の一例を示す図である。
【図６】図６は、第１の実施形態に係る転送データテーブルのデータ構造の一例を示す図である。
【図７】図７は、第１の実施形態に係る受信用メモリ管理テーブルのデータ構造の一例を示す図である。
【図８】図８は、第１の実施形態に係る第１の転送部による処理手順を示すフローチャートである。
【図９】図９は、転送処理と同期せずにメモリ領域に格納されたデータの読み書きを検出した場合の処理手順を示すフローチャートである。
【図１０】図１０は、第１の実施形態に係る転送処理の手順を示すフローチャートである。
【図１１】図１１は、第１の実施形態に係る停止制御部による仮想マシンの移行処理の手順を示すフローチャートである。
【図１２】図１２は、第１の実施形態に係る第２の転送部による処理手順を示すフローチャートである。
【図１３】図１３は、第１の実施形態に係る第２の転送部によるデータの転送処理と同期せずに移行先の情報処理装置Ｐｄで動作する仮想マシンが未転送のメモリ領域に格納されたデータの読み書きを必要とした場合に発生する割込み転送処理の処理手順を示すフローチャートである。
【図１４】図１４は、第１の実施形態に係る第２の転送部によるデータの転送処理と同期せずに移行先の情報処理装置Ｐｄで動作する仮想マシンが未転送のディスク領域に格納されたデータの読み書きを必要とした場合に発生する割込み転送処理の処理手順を示すフローチャートである。
【図１５】図１５は、第１の実施形態に係る第１の受信部による処理手順を示すフローチャートである。
【図１６】図１６は、第１の実施形態に係る展開処理の処理手順を示すフローチャートである。
【図１７】図１７は、第１の実施形態に係る起動制御部による処理手順を示すフローチャートである。
【図１８】図１８は、第１の実施形態に係る第２の受信部による処理手順を示すフローチャートである。
【図１９】図１９は、第１の実施形態に係る移行先の情報処理装置Ｐｄで動作する仮想マシンが未転送のメモリを要求し、転送処理とは非同期でページフォルトが発生したときの、第２の受信部による処理手順を示すフローチャートである。
【図２０】図２０は、第１の実施形態に係る移行先の情報処理装置Ｐｄで動作する仮想マシンがディスクの読み出しを要求し、転送処理とは非同期で仮想マシンが情報処理装置ＰｄにディスクＩ／Ｏを要求したときの、第２の受信部による処理手順を示すフローチャートである。
【図２１】図２１は、コンピュータシステムによる処理を実行するための仮想マシンの移行プログラムによる情報処理がコンピュータを用いて具体的に実現されることを示す図である。
【発明を実施するための形態】
【００１４】
以下に、開示する情報処理装置、仮想マシンの移行方法及び仮想マシンの移行プログラムの実施形態について、図面に基づいて詳細に説明する。なお、本実施形態により開示する発明が限定されるものではない。各実施形態は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【００１５】
（第１の実施形態）
図１は、第１の実施形態に係るコンピュータシステムの全体構成例を示す図である。図１に示すように、コンピュータシステムは、情報処理装置１０と、情報処理装置４０とを有する。図１に示すように、情報処理装置１０と、情報処理装置４０とが、任意のネットワーク５を介して互いに通信可能に接続される。
【００１６】
情報処理装置１０及び情報処理装置４０は、例えばデータベースサーバなどであり、契約者である利用者に対してサービスを提供する。このため情報処理装置１０及び情報処理装置４０には、サービスを利用するクライアント端末（図１には図示しない）がネットワーク５を介して接続される。なお、図１では、情報処理装置１０と、情報処理装置４０とを示したが、コンピュータシステムに含まれる情報処理装置の数は、図１に図示した数に限定されるものではない。
【００１７】
図１に示すように、情報処理装置１０は、ハードウェア２１と、ホストＯＳ２２と、仮想マシンソフトウェア２３とを有する。
【００１８】
ハードウェア２１は、情報処理装置１０を構成する電子回路や周辺機器であり、例えば、メモリ、ＣＰＵなどである。また、ハードウェア２１は、ディスクのイメージファイルを記憶する。つまり、ハードウェア２１は、仮想マシン３０上で起動させるゲストＯＳ３２のイメージを記憶する。なお、ゲストＯＳ３２については、後述する。
【００１９】
ホストＯＳ２２は、仮想マシン３０を動作させる基盤となるＯＳであり、ハードウェア２１を用いて実行される。仮想マシンソフトウェア２３は、ハードウェア２１を用いて仮想マシン３０を提供するソフトウェアであり、ここでは、仮想マシン３０を動作させる。例えば、仮想マシンソフトウェア２３は、仮想ディスク、仮想メモリ、仮想ＣＰＵなどを含んだ仮想ハードウェア３１をゲストＯＳ３２に割当てて、仮想マシン３０を動作させる。
【００２０】
仮想マシン３０ａは、例えば、仮想ハードウェア３１ａと、ゲストＯＳ３２ａとを有する。仮想ハードウェア３１ａは、仮想マシンソフトウェア２３から提供された仮想ディスク、仮想物理メモリ、仮想ＣＰＵなどを用いてゲストＯＳ３２ａを動作させて、各種処理を実行する仮想的な情報処理装置である。ゲストＯＳ３２ａは、プログラムやアプリケーションを動作させる。仮想マシン３０ｂの構成は、仮想マシン３０ａの構成と同様である。すなわち、仮想マシン３０ｂは、仮想ハードウェア３１ｂと、ゲストＯＳ３２ｂとを有する。なお、以下では、仮想マシン３０ａと仮想マシン３０ｂとを区別しない場合には、仮想マシン３０と記載する。同様に、仮想ハードウェア３１ａと仮想ハードウェア３１ｂとを区別しない場合には、仮想ハードウェア３１と記載する。また、ゲストＯＳ３２ａとゲストＯＳ３２ｂとを区別しない場合には、ゲストＯＳ３２と記載する。また、図１では、情報処理装置１０で仮想マシン３０が２台動作する場合を図示したが、情報処理装置１０で動作する仮想マシン３０の数は、任意に変更可能である。
【００２１】
情報処理装置４０は、ハードウェア５１と、ホストＯＳ５２と、仮想マシンソフトウェア５３と、仮想マシン６０ａと、仮想マシン６０ｂとを有する。情報処理装置４０の構成は、情報処理装置１０の構成と同様であるので詳細な説明を省略する。また、仮想マシン６０ａの構成は仮想マシン３０の構成と同様であり、仮想ハードウェア６１ａと、ゲストＯＳ６２ａとを有する。同様に、仮想マシン６０ｂの構成は仮想マシン３０の構成と同様であり、仮想ハードウェア６１ｂと、ゲストＯＳ６２ｂとを有する。なお、以下では、仮想マシン６０ａと仮想マシン６０ｂとを区別しない場合には、仮想マシン６０と記載する。同様に、仮想ハードウェア６１ａと仮想ハードウェア６１ｂとを区別しない場合には、仮想ハードウェア６１と記載する。また、ゲストＯＳ６２ａとゲストＯＳ６２ｂとを区別しない場合には、ゲストＯＳ６２と記載する。また、図１では、情報処理装置４０で仮想マシン６０が２台動作する場合を図示したが、情報処理装置４０で動作する仮想マシン６０の数は、任意に変更可能である。
【００２２】
このようなコンピュータシステムにおいて、例えば、情報処理装置１０において障害の予兆を検出した場合、情報処理装置１０で動作させる仮想マシン３０を他の情報処理装置４０に移行する。なお、実行中の仮想マシン３０を物理的に異なるホスト間で移行することを「ライブ移行」と言う。なお、以下の説明では、障害の予兆を検出した際に仮想マシン３０を起動している情報処理装置１０を「移行元の情報処理装置」或いは「移行元の物理マシン」と記載する。また、ライブ移行後に仮想マシン３０を動作させる情報処理装置４０を「移行先の情報処理装置」或いは「移行先の物理マシン」と記載する。
【００２３】
続いて、図２及び図３を用いて、第１の実施形態に係るライブ移行について説明する。図２は、第１の実施形態に係る仮想マシン３０が有する仮想ハードウェア３１の構成例を示す図であり、図３は、第１の実施形態に係るコンピュータシステムにおけるライブ移行の処理動作を示す図である。
【００２４】
図２に示す例では、移行元の情報処理装置Ｐｓで動作する仮想マシン３０の仮想ハードウェア３１の構成と、ライブ移行後に移行先の情報処理装置Ｐｄで動作する仮想マシン３０の仮想ハードウェア３１の構成とを示す。なお、説明の便宜上、移行元の情報処理装置Ｐｓで動作する仮想マシン３０を「仮想マシンＡ」と記載し、移行先の情報処理装置Ｐｄで動作する仮想マシン３０を「仮想マシンＢ」と記載する。
【００２５】
図２に示すように、仮想マシンＡの仮想ハードウェア３１は、仮想ＣＰＵ７１（仮想ＣＰＵ＃０〜仮想ＣＰＵ＃Ｎを含む）、仮想メモリ７２、仮想ＮＩＣ７３、仮想ディスク７４（仮想ディスク＃０及び仮想ディスク＃１を含む）のほか、ライブ移行用の仮想デバイス７５を有する。なお、仮想ディスク７４は情報処理装置１０と情報処理装置４０とで共有される共有ディスクを利用してもよい。
【００２６】
仮想ＣＰＵ７１は、情報処理装置１０が有する物理ＣＰＵにおける所定処理能力を仮想マシン３０で動作するゲストＯＳ３２が使用するＣＰＵとして割り当てることで実現された仮想的なＣＰＵであり、各種の演算処理を実行する。また、仮想ＣＰＵ７１は、図示しない仮想レジスタを有する。仮想レジスタは、情報処理装置１０が有する物理レジスタ・物理メモリ・物理ディスクにおける所定領域を仮想マシン３０で動作するゲストＯＳ３２が使用する領域として割り当てることで実現された仮想的なレジスタである。例えば、仮想レジスタは、仮想ＣＰＵ７１によって仮想メモリ７２から読み出されたプログラムやデータを記憶する。
【００２７】
仮想メモリ７２は、例えばＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）、ＶＧＡ（Video  Graphics  Array）などであり、情報処理装置１０が有する物理メモリにおける所定領域を仮想マシン３０で動作するゲストＯＳ３２が使用するメモリとして割り当てることで実現された仮想的なメモリである。
【００２８】
仮想ＮＩＣ７３は、ゲストＯＳからＮＩＣとして認識され、物理ＣＰＵで動作するソフトウェアとして実現される。また仮想ＮＩＣ７３が物理ＮＩＣを制御することで、ゲストＯＳは物理ＮＩＣを通じて他装置と通信することができる。
【００２９】
仮想ディスク７４は、情報処理装置１０が有する物理ディスクにおける所定領域を仮想マシン３０で動作するゲストＯＳ３２が使用する領域として割り当てることで実現された仮想的なディスクである。
【００３０】
ライブ移行用の仮想デバイス７５は、ゲストＯＳ上で動作するデバイス・ドライバーを経由して、ゲストＯＳ上の各種データを参照・更新する。なお、ライブ移行用の仮想デバイス７５が有する機能をＢＩＯＳ（Basic  Input/Output  System）やファームウェアで実装してもよい。また、以下では、ライブ移行用の仮想デバイス７５を、「仮想デバイス７５」と記載する。
【００３１】
なお、仮想マシンＢの仮想ハードウェア３１の構成は、仮想マシンＡの仮想ハードウェア３１の構成と同様であるので、同一の符号を付与し詳細な説明は省略する。また、以下の説明では、移行元の情報処理装置を「Ｐｓ」、移行先の情報処理装置を「Ｐｄ」、移行対象の仮想マシンを「ＶＭ」、ＶＭを構成する仮想ＣＰＵ、仮想メモリ、仮想ディスク、仮想デバイスをそれぞれｃｐｕ、ｍｅｍ、ｄｉｓｋ、ｖｄと記載する場合がある。また、ＶＭ、ｃｐｕ、ｍｅｍ、ｄｉｓｋ、ｖｄの添字には動作している情報処理装置を記載する。例えば、「ＶＭ[Ｐｓ]」は、移行元の情報処理装置Ｐｓで動作している仮想マシンＡのことを示し、「ＶＭ[Ｐｄ]」は、移行先の情報処理装置Ｐｄで動作している仮想マシンＢのことを示す。
【００３２】
図３では、移行元の情報処理装置Ｐｓで動作させる仮想マシンＡを、移行先の情報処理装置Ｐｄに移行させる場合を示す。図３には２つの縦軸を示しており、左側に示す縦軸は移行元の情報処理装置Ｐｓの時間経過を示し、右側に示す縦軸は移行先の情報処理装置Ｐｄの時間経過を示す。
【００３３】
図３に示すように、仮想マシンＡを起動させている移行元の情報処理装置Ｐｓは、障害の予兆を検出した場合、アクセス頻度が高いなど、プレコピーの対象とするメモリ領域を決定する（ステップＳ１）。ここで言う「メモリ領域」とは、仮想メモリ７２の領域を示す。そして、移行元の情報処理装置Ｐｓは、メモリのトラッキング機能を有効化する（ステップＳ２）。これにより、移行元の情報処理装置Ｐｓは、メモリ領域に対する読み出しや書き込みを把握可能となる。
【００３４】
移行元の情報処理装置Ｐｓは、アクセス頻度の高いメモリ領域を、移行先の情報処理装置Ｐｄにコピーする（ステップＳ３）。移行元の情報処理装置Ｐｓは、コピー処理の終了後、仮想マシンＡを停止する（ステップＳ４）。なお、図３では、移行元の情報処理装置Ｐｓの時間経過を示す縦軸において、仮想マシンＡが起動中である期間を太線矢印で示す。
【００３５】
移行元の情報処理装置Ｐｓは、仮想マシンＡを停止させた後、ＣＰＵ情報と、書き込み頻度が高いメモリ領域とを、移行先の情報処理装置Ｐｄにコピーする（ステップＳ５）。そして、移行先の情報処理装置Ｐｄは、仮想マシンＢを動作させる（ステップＳ６）。
【００３６】
移行元の情報処理装置Ｐｓは、移行先の情報処理装置Ｐｄにおいて仮想マシンＢが起動した後、未コピーのメモリ領域を移行先の情報処理装置Ｐｄにコピーする（ステップＳ７）。続いて、移行元の情報処理装置Ｐｓは、ディスク領域を移行先の情報処理装置Ｐｄにコピーする（ステップＳ８）。
【００３７】
なお、ステップＳ７及びステップＳ８の実行中に、仮想マシンＢが未コピーのメモリ領域や未コピーのディスク領域に対してアクセスした場合、移行元の情報処理装置Ｐｓは、アクセスされた未コピーのメモリ領域や未コピーのディスク領域を移行先の情報処理装置Ｐｄにコピーする。移行元の情報処理装置Ｐｓは、コピー処理の終了後、仮想マシンＡを削除する（ステップＳ９）。なお、図３では、移行先の情報処理装置Ｐｄの時間経過を示す縦軸において、仮想マシンＢが起動中である期間を太線矢印で示す。
【００３８】
このように、アクセス頻度の高いメモリ領域をプレコピー処理として転送してから仮想マシンを移行させることで、仮想マシンを異なる情報処理装置に移行させる際に、仮想マシンの移行時間を短くし、かつライブ移行後の性能の低下を軽減することができる。
【００３９】
以下では、ライブ移行のより詳細について図４〜図２０を用いて説明する。図４では、仮想デバイス７５が実現する機能部１００について説明する。図４は、仮想デバイス７５が実現する機能部１００の構成例を示す図である。図４に示すように仮想デバイス７５が実現する機能部１００は、転送用メモリ管理テーブル１０１と、転送データテーブル１０２と、受信用メモリ管理テーブル１０３と、受信データテーブル１０４と、第１の転送部１１１と、停止制御部１１２と、第２の転送部１１３と、第１の受信部１１４と、起動制御部１１５と、第２の受信部１１６とを有する。仮想デバイス７５が有する機能のうち、第１の転送部１１１、停止制御部１１２、及び第２の転送部１１３は、移行元の情報処理装置Ｐｓにおいて機能し、第１の受信部１１４、起動制御部１１５及び第２の受信部１１６は、移行先の情報処理装置Ｐｄにおいて機能する。
【００４０】
転送用メモリ管理テーブル１０１は、移行先の情報処理装置Ｐｄに転送した物理メモリの履歴と、メモリトラッキング機能が有効化された後に、読み書きされた物理メモリとを記憶する。図５は、第１の実施形態に係る転送用メモリ管理テーブル１０１のデータ構造の一例を示す図である。図５に示すように、転送用メモリ管理テーブル１０１は、例えば、「アドレス」と、「データＩＤ」と、「読み出し回数」と、「書き込み回数」と、「転送済フラグ」とを対応付けた情報を記憶する。
【００４１】
ここで、転送用メモリ管理テーブル１０１が記憶する「アドレス」は、データが格納されている仮想マシン上の物理アドレスを示す。また、転送用メモリ管理テーブル１０１が記憶する「データＩＤ」は、アドレスに対応付けて格納されているデータを一意に識別するための識別子を示す。また、転送用メモリ管理テーブル１０１が記憶する「読み出し回数」は、対応するアドレスにデータが読み出された回数を示す。また、転送用メモリ管理テーブル１０１が記憶する「書き込み回数」は、対応するアドレスにデータが書き込まれた回数を示す。また、転送用メモリ管理テーブル１０１が記憶する「転送済フラグ」は、対応するアドレスを移行先の情報処理装置Ｐｄに転送し、かつアドレスへのデータ書き込みにより無効化されていないかどうかを識別した情報を示す。
【００４２】
転送データテーブル１０２は、移行元の情報処理装置Ｐｓで動作する仮想マシンの物理メモリ内のデータ情報を記憶する。図６は、第１の実施形態に係る転送データテーブル１０２のデータ構造の一例を示す図である。図６に示すように、転送データテーブル１０２は、例えば、「データＩＤ」と、「ハッシュ値」と、「データ」とを対応付けた情報を記憶する。
【００４３】
ここで、転送データテーブル１０２が記憶する「データＩＤ」は、データを一意に識別するための識別子を示す。また、転送データテーブル１０２が記憶する「ハッシュ値」は、データをハッシュ変換した値を示す。また、転送データテーブル１０２が記憶する「データ」は、移行元の情報処理装置Ｐｓから移行後の情報処理装置Ｐｄに転送した物理メモリのデータを示す。なお、転送データテーブルが記憶する「データＩＤ」は、転送用メモリ管理テーブル１０１が記憶する「データＩＤ」と対応する。
【００４４】
受信用メモリ管理テーブル１０３は、移行元の情報処理装置Ｐｓから受信した物理メモリの履歴を記憶する。図７は、第１の実施形態に係る受信用メモリ管理テーブル１０３のデータ構造の一例を示す図である。図７に示すように、受信用メモリ管理テーブル１０３は、例えば、「仮想マシンの物理アドレス」と、「ホストマシンの仮想アドレス」と、「書き込み可能フラグ」とを対応付けた情報を記憶する。
【００４５】
ここで、受信用メモリ管理テーブル１０３は、「ホストマシンの仮想アドレス」に「ｎｕｌｌ」が格納される場合、「仮想マシンの物理アドレス」に対応付けられたデータを受信していないことを示す。また、「ホストマシンの仮想アドレス」に「ｎｕｌｌ」が格納されていない場合、すなわち、「仮想マシンの物理アドレス」に対応付けられたデータを受信している場合、「書き込み可能フラグ」には「オン」又は「オフ」のいずれかが格納される。ここで、受信用メモリ管理テーブル１０３は、「書き込み可能フラグ」に「オフ」が格納される場合、書き込みを禁止していることを示し、「書き込み可能フラグ」に「オン」が格納される場合、書き込みを許可していることを示す。
【００４６】
受信データテーブル１０４は、移行先の情報処理装置Ｐｄで動作する仮想マシンの物理メモリ内のデータ情報を記憶する。受信データテーブル１０４のデータ構造は、図６に示した転送データテーブル１０２のデータ構造と同一であるので、図示は省略する。すなわち、受信データテーブル１０４は、例えば、「データＩＤ」と、「ハッシュ値」と、「データ」とを対応付けた情報を記憶する。
【００４７】
ここで、受信データテーブル１０４が記憶する「データ」は、「書き込み可能フラグ」がオフに設定されている場合、受信用メモリ管理テーブルの「ホストマシンの仮想アドレス」として利用可能である。なお、「書き込み可能フラグ」をオンに設定するときは、メモリ領域を確保してコピー処理が必要となる。
【００４８】
第１の転送部１１１は、仮想マシンＡを他の情報処理装置４０に移行させる際に、メモリ領域に格納された情報のうち、仮想マシンＡの移行直後に仮想マシンＢによるアクセス頻度の予測値が所定の閾値よりも高い情報を他の情報処理装置４０に転送する。
【００４９】
例えば、第１の転送部１１１は、メモリ領域に格納された情報のうち仮想マシンＡ内で動作中のプロセスが利用している物理メモリの一覧を取得する。より具体的には、第１の転送部１１１は、仮想マシンＡの直近（例えば、１分）でロードアベレージが０ではないプロセス・スレッドが利用可能な仮想メモリ（メモリ空間）が参照する物理メモリの一覧を、チャンク（ページ・サイズ（例えば、Ｉｎｔｅｌ６４，ＡＭＤ６４では４ＫｉＢ）の乗数、例えば、６４ＫｉＢ）単位で取得する。ここで、第１の転送部１１１は、カーネルメモリによって管理されるプロセス・スレッド情報を参照する方法で物理メモリの一覧を収集する。なお、取得した物理メモリの一覧のことを「プレコピー対象情報」と呼ぶ。
【００５０】
続いて、第１の転送部１１１は、仮想マシンＡのメモリトラッキング機能を有効化する。これにより第１の転送部１１１は、仮想マシンＡによるメモリ領域への読み書きを、ページ単位で検出できるようになる。
【００５１】
そして、第１の転送部１１１は、収集したプレコピー対象情報に記憶されるメモリ領域に格納されたデータを、移行先の情報処理装置Ｐｄに転送する。ここで、第１の転送部１１１は、データを圧縮して転送する。より具体的には、第１の転送部１１１は、仮想マシンの移行直後にアクセス頻度の予測値が所定の閾値よりも高い情報であって、同一の情報が他の情報処理装置４０に転送済みではない場合に、当該情報と当該情報が格納される位置情報とを他の情報処理装置４０に転送し、同一の情報が他の情報処理装置４０に転送済みである場合に、当該情報が格納される位置情報を他の情報処理装置４０に転送する。
【００５２】
例えば、第１の転送部１１１は、ブロック・サイズ（例えば、８ＫｉＢ）でメモリの内容のハッシュ値を取得する。なお、ここで言う「メモリの内容」とは、メモリ領域に格納されたデータを示す。そして、第１の転送部１１１は、同一のハッシュ値を持つ転送済ページがあり、転送データテーブル１０２の「メモリ」内容を照合し同一であればメモリ位置とデータＩＤとを「ページ情報」として転送する。一方、第１の転送部１１１は、ハッシュ値またはメモリ内容が同一の転送済ページがない場合には、メモリ位置と、新たに割り当てたデータＩＤと、データとを含んだ「ページ情報」として転送する。第１の転送部１１１は、データの転送後に、転送用メモリ管理テーブル１０１の「転送済フラグ」をオンにする。
【００５３】
また、第１の転送部１１１は、転送中にページへの読み出しを検出した時、ページを含むブロック領域をプレコピーの対象にする。そして、第１の転送部１１１は、ページ単位で読み出し件数をカウントして、カウントした値をアドレスと対応付けて転送用メモリ管理テーブル１０１に記憶させる。
【００５４】
また、第１の転送部１１１は、転送中にページへの書き込みを検出した時、ページ単位で書き込み件数をカウントし、カウントした値をアドレスと対応付けて転送用メモリ管理テーブル１０１に記憶させる。ここで、第１の転送部１１１は、転送中にページへの書き込みを検出した時、該ページはプレコピーの対象外とする。すなわち、第１の転送部１１１は、内容が頻繁に変更されるプロセス・スレッドのスタック領域をプレコピー対象から除外する。言い換えると、第１の転送部１１１は、アクセス頻度の予測値が所定の閾値よりも高い情報であって、当該情報が更新されていない場合に、当該情報を他の情報処理装置４０に転送する。なお、第１の転送部１１１は、すでにデータを転送したページへの書き込みを検出した場合も同様に、転送用メモリ管理テーブル１０１にアドレスと書き込み回数と転送済フラグとを対応付けて登録する。
【００５５】
停止制御部１１２は、第１の転送部１１１によって情報が転送された後に、仮想マシンＡを停止させて、仮想マシンＡの起動に用いられる構成情報を他の情報処理装置４０に転送する。ここで、仮想マシンＡの起動に用いられる構成情報には、ＣＰＵ情報やＢＩＯＳなどのＲＯＭの情報などが含まれる。
【００５６】
例えば、停止制御部１１２は、仮想マシンＡを停止する。そして、停止制御部１１２は、仮想マシンＡが使用していたＣＰＵ情報や、ＢＩＯＳなどのＲＯＭの情報を移行先の情報処理装置Ｐｄに転送する。なお、ＣＰＵ情報には、移行前の仮想マシンが実行していたプログラム及びプログラムの実行位置を示す情報などが含まれる。
【００５７】
続いて、停止制御部１１２は、各ＣＰＵのＴＬＢ（Translation  Look‐aside  Buffer）に登録されている物理メモリ、またはプレコピー中に実行されたプロセス・スレッドのスタックメモリについて、未転送のメモリ情報を転送する。このＴＬＢに登録されている物理メモリやスタックメモリには、移行前の仮想マシンが各種演算処理を実行する際に、参照したデータや更新したデータが含まれる。
【００５８】
また、停止制御部１１２は、第１の転送部１１１によって転送された情報のうち、仮想マシンが起動される前に更新された情報を特定した無効化情報を他の情報処理装置４０に転送する。言い換えると、停止制御部１１２は、プレコピー処理で転送したデータのうち、データの転送後に変更されたメモリ位置の一覧を示す無効化情報を生成し、生成した無効化情報を移行先の情報処理装置Ｐｄに転送する。そして、停止制御部１１２は、移行後の仮想マシンによる無効化情報に登録された情報へのアクセスを禁止させる。
【００５９】
第２の転送部１１３は、他の情報処理装置４０において、仮想マシンＢが起動された場合、未転送のリソース情報を他の情報処理装置４０に転送する。なお、リソース情報には、「メモリ領域に格納されたデータ」及び「ディスク領域に格納されたデータ」が含まれる。なお、リソース情報のことを「ポストコピー情報」とも言う。
【００６０】
例えば、第２の転送部１１３は、「読み出し回数の多いメモリ領域に格納されたデータ」、「書き込み回数の多いメモリ領域に格納されたデータ」、「ディスク領域に格納されたデータ」の順番で残ったポストコピー情報を転送する。ここで第２の転送部１１３は、ポストコピー情報のコピー時には、第１の転送部１１１と同様にデータを圧縮して転送する。ただし、第２の転送部１１３は、ディスク情報については、同一内容のページ転送の圧縮を行わない。
【００６１】
また、第２の転送部１１３は、他の情報処理装置４０で動作させる仮想マシンＢによって参照される情報を当該他の情報処理装置４０から要求された場合、当該情報を優先的に当該他の情報処理装置４０に転送する。例えば、第２の転送部１１３は、移行先の情報処理装置Ｐｄからデータの取得要求を受付けた場合、要求されたデータを移行先の情報処理装置Ｐｄに転送する。ここで、第２の転送部１１３は、「ページフォルトが起こったメモリ領域」、「読み出しが行われたディスク領域」、「ポストコピー処理」の優先順位でデータをコピーする。「ポストコピー処理」とは、ポストコピー情報を転送する処理を示す。
【００６２】
第２の転送部１１３は、ポストコピー処理の終了後、仮想マシンＡを削除する。なお、第２の転送部１１３が、ディスク領域に格納されたデータを移行先の情報処理装置Ｐｄに転送するので、コンピュータシステムでは、共有ディスクを設けなくてもよい。
【００６３】
第１の受信部１１４は、他の情報処理装置１０で動作する仮想マシンＡの移行直後に仮想マシンＢによるアクセス頻度の予測値が所定の閾値よりも高い情報を当該他の情報処理装置１０から受信する。そして、第１の受信部１１４は、受信した情報をメモリ領域に格納する。
【００６４】
ここで、複数のメモリ空間が１つの物理メモリを指すことが可能である。このため、第１の受信部１１４は、移行先のメモリ領域に既に転送済みの物理メモリの情報があれば、物理メモリの識別子を基に仮想マシンのアドレス空間と物理メモリとを対応付けた変換テーブルを変更するだけでよい。すなわち、第１の受信部１１４は、新たに物理メモリの割り当てと展開の処理を実行しなくてもよい。これにより、第１の受信部１１４は、従来の圧縮転送処理(ｇｚｉｐなど)に比べ、特に移行先の情報処理装置Ｐｄで動作する仮想マシンの展開処理において、ＣＰＵやメモリの負荷を低減できる。
【００６５】
起動制御部１１５は、仮想マシンＡの停止後に、仮想マシンＡの起動に用いられる構成情報を、他の情報処理装置１０から受信し、受信した構成情報を用いて仮想マシンＢを起動させる。
【００６６】
また、起動制御部１１５は、無効化情報を受信した場合、転送されたメモリ位置に関するメモリを無効化する。
【００６７】
第２の受信部１１６は、仮想マシンＢを起動させた後に、未転送の情報を他の情報処理装置１０から受信する。
【００６８】
また、第２の受信部１１６は、仮想マシンＢが参照するデータのうち、メモリ領域やディスク領域に転送されていないデータへのアクセスが行われた場合、仮想マシンＡにデータを要求する。例えば、第２の受信部１１６は、メモリ領域に転送されていないデータについてはページフォルトで検出する。そして、第２の受信部１１６は、移行元の情報処理装置Ｐｓから要求したデータを取得してメモリ領域やディスク領域を更新する。これにより仮想マシンＢは、取得したデータを用いて処理を継続可能となる。なお、第２の受信部１１６は、データを受信する前にディスクへの書き込みが行われた場合、受信したデータは破棄する。
【００６９】
次に、図８〜図１４を用いて、移行元の情報処理装置Ｐｓにおける処理手順について説明する。図８は、第１の実施形態に係る第１の転送部１１１による処理手順を示すフローチャートである。図８に示すように、第１の転送部１１１は、メモリ領域に格納された情報のうち、転送対象の物理メモリの一覧（プレコピー対象情報）を取得する（ステップＳ１０１）。例えば、第１の転送部１１１は、メモリ領域に格納された情報のうち仮想マシンＡ内で動作中のプロセスが利用している物理メモリの一覧を取得する。続いて、第１の転送部１１１は、メモリトラッキング機能を有効化する（ステップＳ１０２）。
【００７０】
第１の転送部１１１は、プレコピー処理を終了するか否かを判定する（ステップＳ１０３）。すなわち、第１の転送部１１１は、プレコピー対象情報に記憶されるメモリ領域に格納されたデータの全てを転送したか否かを判定する。ここで、第１の転送部１１１は、プレコピー処理を終了していないと判定した場合（ステップＳ１０３、Ｎｏ）、メモリ領域に格納されたデータの書き込みを検出したか否かを判定する（ステップＳ１０４）。なお、ここでは、プレコピー対象情報に記憶されるメモリ領域に加えて、仮想マシンＡに割当てられたメモリ領域を対象とする。
【００７１】
ここで、第１の転送部１１１は、メモリ領域に格納されたデータの書き込みを検出したと判定した場合（ステップＳ１０４、Ｙｅｓ）、ステップＳ１０３に移行して、プレコピー処理を終了するか否かを判定し、次の物理メモリを移行先の情報処理装置Ｐｄに転送する処理を引き続き実行する。また、第１の転送部１１１は、メモリ領域に格納されたデータの書き込みを検出しなかったと判定した場合（ステップＳ１０４、Ｎｏ）、ステップＳ１０５に移行して、物理メモリの一覧を移行先の情報処理装置Ｐｄに転送する処理を引き続き実行する。なお、第１の転送部１１１は、プレコピー処理を終了したと判定した場合（ステップＳ１０３、Ｙｅｓ）、処理を終了する。
【００７２】
図９は、図８のフローチャートを実行中に、転送処理と同期せずにメモリ領域に格納されたデータの読み書きを検出した場合の処理手順を示すフローチャートである。ここで、第１の転送部１１１は、メモリ領域に格納されたデータの読み書きが行われた場合、メモリトラッキングによる割り込み処理などで図９の処理を開始する。第１の転送部１１１は、この処理では、メモリへの書き込みが検出したか否かを判定する（ステップＳ１１１）。第１の転送部１１１は、メモリ領域に格納されたデータの読み出しを検出したと判定した場合（ステップＳ１１１、Ｎｏ）、読み出し回数を１増やす（ステップＳ１１２）。例えば、第１の転送部１１１は、読み出しを検出したデータが格納されるアドレスと、読み出し回数とを対応付けて転送用メモリ管理テーブル１０１に記憶させ、割り込みなどの処理を終了する。
【００７３】
第１の転送部１１１は、メモリ領域に格納されたデータの書き込みを検出したと判定した場合（ステップＳ１１１、Ｙｅｓ）、書き込み回数を１増やし（ステップＳ１１３）、転送済みフラグをオフにする（ステップＳ１１４）。例えば、第１の転送部１１１は、書き込みを検出したデータが格納されるアドレスと、書き込み回数と、転送済みフラグとを対応付けて転送用メモリ管理テーブル１０１に記憶させ、割り込みなどの処理を終了する。
【００７４】
続いて図１０を用いて、データを移行先の情報処理装置Ｐｄに転送する転送処理の詳細について説明する。図１０は、第１の実施形態に係る転送処理の手順を示すフローチャートである。なお、この処理は、図８に示すステップＳ１０５の処理に対応する。
【００７５】
図１０に示すように、第１の転送部１１１は、ブロック・サイズ単位でメモリ領域から読み出したデータのハッシュ値を取得する（ステップＳ２０１）。続いて、第１の転送部１１１は、転送データテーブル１０２を参照し、取得したハッシュ値と同一のハッシュ値が存在するか否かを判定する（ステップＳ２０２）。
【００７６】
ここで、第１の転送部１１１は、取得したハッシュ値と同一のハッシュ値が存在すると判定した場合（ステップＳ２０２、Ｙｅｓ）、メモリの内容が同一であるか否かを判定する（ステップＳ２０３）。なお、ここで言う「メモリの内容」とは、仮想マシンの物理メモリ領域に格納されたデータを示す。例えば、第１の転送部１１１は、転送データテーブル１０２を参照し、ハッシュ値を取得したデータが登録されているか否かを判定する。ここで、第１の転送部１１１は、ハッシュ値を取得したデータが格納されているアドレスが、転送データテーブル１０２に登録されている場合、ハッシュ値を取得したデータが更新されており、メモリの内容が同一ではないと判定する。また、第１の転送部１１１は、ハッシュ値を取得したデータが、転送データテーブル１０２に登録されている場合、ハッシュ値を取得したデータが更新されておらずメモリの内容が同一であると判定する。
【００７７】
ここで、第１の転送部１１１は、メモリの内容が同一であると判定した場合（ステップＳ２０３、Ｙｅｓ）、移行先の情報処理装置ＰｄにデータＩＤと、ハッシュ値を取得したデータが格納されたメモリ領域のアドレスを転送する（ステップＳ２０５）。一方、第１の転送部１１１は、メモリの内容が同一ではないと判定した場合（ステップＳ２０３、Ｎｏ）、データＩＤと、ハッシュ値と、ハッシュ値を取得したデータが格納されたメモリ領域のアドレスとを移行先の情報処理装置Ｐｄに転送する（ステップＳ２０４）。また、第１の転送部１１１は、取得したハッシュ値と同一のハッシュ値が存在しないと判定した場合（ステップＳ２０２、Ｎｏ）、ステップＳ２０４に移行し、データＩＤと、ハッシュ値と、ハッシュ値を取得したデータが格納されたメモリ領域のアドレスとを移行先の情報処理装置Ｐｄに転送する。
【００７８】
次に、図１１を用いて、停止制御部１１２による仮想マシンの移行処理について説明する。図１１は、第１の実施形態に係る停止制御部１１２による仮想マシンの移行処理の手順を示すフローチャートである。図１１に示すように、停止制御部１１２は、仮想マシンＡを停止させる（ステップＳ３０１）。そして、停止制御部１１２は、ＣＰＵ情報を移行先の情報処理装置Ｐｄに転送する（ステップＳ３０２）。ここで、ＣＰＵ情報には、仮想マシンＡが起動中に実行していたプログラム及びプログラムの実行位置を示す情報などが含まれる。そして、停止制御部１１２は、ＴＬＢに登録されている物理メモリ、スタックメモリについて未転送のデータを転送する（ステップＳ３０３）。なお、ステップＳ３０２及びステップＳ３０３における詳細な処理手順は、図１０に示した転送処理の手順と同様である。
【００７９】
続いて、停止制御部１１２は、無効化情報を移行先の情報処理装置Ｐｄに転送する（ステップＳ３０４）。例えば、停止制御部１１２は、転送用メモリ管理テーブル１０１に登録されているデータのうち、「転送済フラグ」がオフのデータを特定する。そして、停止制御部１１２は、特定した転送用メモリ管理テーブル１０１の「アドレス」を無効化情報として登録し、移行先の情報処理装置Ｐｄに転送する。
【００８０】
次に図１２を用いて、第２の転送部１１３による処理手順を説明する。図１２は、第１の実施形態に係る第２の転送部１１３による処理手順を示すフローチャートである。図１２に示すように、第２の転送部１１３は、メモリ領域に格納されたデータのうち未転送であったデータの転送が終了したか否かを判定する（ステップＳ４０１）。
【００８１】
ここで、第２の転送部１１３は、メモリ領域に格納されたデータのうち未転送であったデータの転送が終了していないと判定した場合（ステップＳ４０１、Ｎｏ）、ステップＳ４０２に移行してメモリ領域に格納されたデータを移行先の情報処理装置Ｐｄに転送する。第２の転送部１１３は、メモリ領域に格納されたデータを「ポストコピー情報」として移行先の情報処理装置Ｐｄに「読み出し回数が多い」、「書き込み回数が多い」、「物理アドレスの値が小さい」の順番で転送する（ステップＳ４０２）。なお、ステップＳ４０２における詳細な処理手順は、図１０に示した転送処理の手順と同様である。
【００８２】
一方、第２の転送部１１３は、メモリ領域に格納されたデータのうち未転送であったデータの転送が終了したと判定した場合（ステップＳ４０１、Ｙｅｓ）、ステップＳ４０３に移行する。
【００８３】
第２の転送部１１３は、ディスク領域に格納されたデータのうち未転送であったデータの転送が終了したか否かを判定する（ステップＳ４０３）。ここで、第２の転送部１１３は、ディスク領域に格納されたデータのうち未転送であったデータの転送が終了していないと判定した場合（ステップＳ４０３、Ｎｏ）、ステップＳ４０４に移行して引き続きディスク領域に格納されたデータを移行先の情報処理装置Ｐｄに転送する。第２の転送部１１３は、ディスク領域に格納されたデータを「ポストコピー情報」として移行先の情報処理装置Ｐｄに転送する（ステップＳ４０４）。
【００８４】
一方、第２の転送部１１３は、ディスク領域に格納されたデータのうち未転送であったデータの転送が終了したと判定した場合（ステップＳ４０３、Ｙｅｓ）、処理を終了する。
【００８５】
次に、図１３及び図１４を用いて、第２の転送部１１３による割込み転送処理の処理手順について説明する。図１３は、第１の実施形態に係る第２の転送部１１３によるデータの転送処理と同期せずに移行先の情報処理装置Ｐｄで動作する仮想マシンＢが未転送のメモリ領域に格納されたデータの読み書きを必要とした場合に発生する割込み転送処理の処理手順を示すフローチャートである。ここで、第２の転送部１１３は、移行先の情報処理装置Ｐｄからメモリの転送要求を受付けたことを契機に図１３の割込み転送処理を開始する。この処理では、第２の転送部１１３は、第２の転送部１１３による「ポストコピー情報」の転送処理を中断し（ステップＳ５０１）、要求されたメモリ領域に格納されたデータを移行先の情報処理装置Ｐｄに転送する割込み転送処理を実行する（ステップＳ５０２）。なお、このステップＳ５０２における詳細な処理手順は、図１０に示した転送処理の手順と同様である。第２の転送部１１３は、割込み転送処理が完了したら、第２の転送部１１３による「ポストコピー情報」の転送処理を再開し（ステップＳ５０３）、割込み転送処理を終了する。
【００８６】
図１４は、第１の実施形態に係る第２の転送部１１３によるデータの転送処理と同期せずに移行先の情報処理装置Ｐｄで動作する仮想マシンＢが未転送のディスク領域に格納されたデータの読み書きを必要とした場合に発生する割込み転送処理の処理手順を示すフローチャートである。ここで、第２の転送部１１３は、移行先の情報処理装置Ｐｄからディスクの転送要求を受付けたことを契機に図１４の割込み転送処理を開始する。この処理では、第２の転送部１１３は、第２の転送部１１３による「ポストコピー情報」の転送処理を中断し（ステップＳ５１１）、要求されたディスク領域に格納されたデータを移行先の情報処理装置Ｐｄに転送する割込み転送処理を実行する（ステップＳ５１２）。第２の転送部１１３は、割込み転送処理が完了したら、第２の転送部１１３による「ポストコピー情報」の転送処理を再開し（ステップＳ５１３）、割込み転送処理を終了する。
【００８７】
次に、図１５〜図２０を用いて、移行先の情報処理装置Ｐｄにおける処理手順について説明する。図１５は、第１の実施形態に係る第１の受信部１１４による処理手順を示すフローチャートである。図１５に示すように、第１の受信部１１４は、「ページ情報」を移行元の情報処理装置Ｐｓから受信したか否かを判定する（ステップＳ６０１）。
【００８８】
第１の受信部１１４は、「ページ情報」を移行元の情報処理装置Ｐｓから受信したと判定した場合（ステップＳ６０１、Ｙｅｓ）、「ページ情報」の展開処理を実行する（ステップＳ６０２）。なお、「ページ情報」の展開処理の詳細については後述する。一方、第１の受信部１１４は、「ページ情報」を移行元の情報処理装置Ｐｓから受信しなかったと判定した場合（ステップＳ６０１、Ｎｏ）、引き続き、「ページ情報」を移行元の情報処理装置Ｐｓから受信したか否かを判定する。
【００８９】
第１の受信部１１４は、ステップＳ６０２の後、転送予定の全ての「ページ情報」の受信を終了したか否かを判定する（ステップＳ６０３）。ここで、第１の受信部１１４は、転送予定の全ての「ページ情報」の受信を終了したと判定した場合（ステップＳ６０３、Ｙｅｓ）、処理を終了する。一方、第１の受信部１１４は、転送予定の全ての「ページ情報」の受信を終了しなかったと判定した場合（ステップＳ６０３、Ｎｏ）、ステップＳ６０１に移行して、引き続き「ページ情報」を移行元の情報処理装置Ｐｓから受信したか否かを判定する。
【００９０】
次に、図１６を用いて、ページ情報の展開処理の処理手順について説明する。図１６は、第１の実施形態に係る展開処理の処理手順を示すフローチャートである。なお、この処理は、図１５に示すステップＳ６０２の処理に対応する。
【００９１】
図１６に示すように、第１の受信部１１４は、データがコピー済みであるか否かを判定する（ステップＳ７０１）。ここで、第１の受信部１１４は、データがコピー済みではないと判定した場合（ステップＳ７０１、Ｎｏ）、受信したデータをメモリ領域に格納し、仮想マシンからの書き込みアクセス権を削除する（ステップＳ７０２）。これにより、受信データテーブル１０４の「データ」の上書きによるメモリ内容の破損を防止する。例えば、第１の受信部１１４は、ハッシュ値として受信したデータを復号化してメモリ領域に格納する。一方、第１の受信部１１４は、データがコピー済みであると判定した場合（ステップＳ７０１、Ｙｅｓ）、ステップＳ７０２をスキップする。第１の受信部１１４は、ページ情報に含まれるアドレスを物理メモリに対応付けて格納する（ステップＳ７０３）。ステップＳ７０３の終了後、第１の受信部１１４は、「ページ情報」の展開処理を終了する。
【００９２】
次に、図１７を用いて、起動制御部１１５による処理手順について説明する。図１７は、第１の実施形態に係る起動制御部１１５による処理手順を示すフローチャートである。図１７に示すように、起動制御部１１５は、ＣＰＵ情報を移行元の情報処理装置Ｐｓから受信したか否かを判定する（ステップＳ８０１）。ここで、起動制御部１１５は、ＣＰＵ情報を移行元の情報処理装置Ｐｓから受信しなかったと判定した場合（ステップＳ８０１、Ｎｏ）、ステップＳ８０１に移行して、引き続きＣＰＵ情報を移行元の情報処理装置Ｐｓから受信したか否かを判定する。
【００９３】
一方、起動制御部１１５は、ＣＰＵ情報を移行元の情報処理装置Ｐｓから受信したと判定した場合（ステップＳ８０１、Ｙｅｓ）、ＣＰＵ情報の展開処理を実行する（ステップＳ８０２）。なお、起動制御部１１５によるＣＰＵ情報の展開処理は、図１６に示した第１の受信部１１４によるページ情報の展開処理と同様である。
【００９４】
続いて、起動制御部１１５は、転送予定の全てのＣＰＵ情報を受信したか否かを判定する（ステップＳ８０３）。ここで、起動制御部１１５は、転送予定の全てのＣＰＵ情報を受信していないと判定した場合（ステップＳ８０３、Ｎｏ）、ステップＳ８０１に移行して、引き続きＣＰＵ情報を移行元の情報処理装置Ｐｓから受信したか否かを判定する。一方、起動制御部１１５は、転送予定の全てのＣＰＵ情報を受信したと判定した場合（ステップＳ８０３、Ｙｅｓ）、無効化情報を移行元の情報処理装置Ｐｓから受信する（ステップＳ８０４）。
【００９５】
そして、起動制御部１１５は、無効化情報に登録されたメモリ領域を無効化し（ステップＳ８０５）、仮想マシンＢを起動させる（ステップＳ８０６）。起動制御部１１５は、ステップＳ８０６の後、処理を終了する。
【００９６】
次に、図１８〜図２０を用いて、第２の受信部１１６による処理手順について説明する。図１８は、第１の実施形態に係る第２の受信部１１６による処理手順を示すフローチャートである。図１８に示すように、第２の受信部１１６は、転送予定の全てのポストコピー情報を受信したか否かを判定する（ステップＳ９０１）。ここで、第２の受信部１１６は、転送予定の全てのポストコピー情報を受信したと判定した場合（ステップＳ９０１、Ｙｅｓ）、処理を終了する。一方、第２の受信部１１６は、転送予定のポストコピー情報が残存すると判定した場合（ステップＳ９０１、Ｎｏ）、ステップＳ９０２に移行する。
【００９７】
第２の受信部１１６は、転送された情報にデータを含むと判定した場合（ステップＳ９０２、Ｙｅｓ）、転送されたデータの展開処理を実行する（ステップＳ９０３）。なお、第２の受信部１１６によるポストコピー情報の展開処理は、図１３に示した第１の受信部１１４によるページ情報の展開処理と同様である。一方、第２の受信部１１６は、転送された情報にデータを含まないと判定した場合（ステップＳ９０２、Ｎｏ）、ステップＳ９０４に移行する。
【００９８】
第２の受信部１１６は、ポストコピーされた情報がメモリ領域のポストコピー情報であるか否かを判定する（ステップＳ９０４）。第２の受信部は、ポストコピーされた情報がメモリ領域のポストコピー情報であると判定した場合（ステップＳ９０４、Ｙｅｓ）、展開されたメモリ領域を仮想マシンの物理メモリにマッピングし、仮想マシンからの書き込みアクセス権を削除し（ステップＳ９０５）、ステップＳ９０１に移行する。
【００９９】
一方、第２の受信部１１６は、ポストコピー情報がメモリ領域のポストコピー情報ではないと判定した場合（ステップＳ９０４、Ｎｏ）、すなわちディスク領域のポストコピー情報であると判定した場合、該当するディスク領域が仮想マシンによって書き込まれているか否かを判定する（ステップＳ９０６）。第２の受信部１１６は、該当するディスク領域が仮想マシンによって書き込まれていないと判定した場合（ステップＳ９０６、Ｎｏ）、受信したポストコピー情報をディスクに格納する（ステップＳ９０７）。ステップＳ９０６、およびＳ９０７の処理が完了したら、ステップＳ９０１に移行する。
【０１００】
続いて、図１９は、第１の実施形態に係る移行先の情報処理装置Ｐｄで動作する仮想マシンＢが未転送のメモリを要求し、転送処理とは非同期でページフォルトが発生したときの、第２の受信部１１６による処理手順を示すフローチャートである。ここで、仮想マシンＢが未転送のメモリを参照したときに、ホストマシンでページフォルトが発生する。第２の受信部１１６は、ページフォルトが発生したことを契機に以下の処理を実行する。
【０１０１】
第２の受信部１１６は、ページフォルトが発生した仮想マシンＢの物理メモリアドレスが受信済みであるか否かを判定する（ステップＳ９１１）。第２の受信部１１６は、未転送のデータを参照したと判定した場合（ステップＳ９１１、Ｎｏ）、仮想マシンＢが参照したデータを移行元の情報処理装置Ｐｓに要求し、メモリ内容の受信処理を実行する（ステップＳ９１２）。一方、第２の受信部１１６は、未転送のデータを参照していないと判定した場合（ステップＳ９１１、Ｙｅｓ）、ステップＳ９１３に移行する。
【０１０２】
第２の受信部１１６は、ページフォルトの原因が、メモリの読み出しによるものか、メモリの書き込みによるものかを判定する（ステップＳ９１３）。第２の受信部１１６は、ページフォルトの原因が、メモリの書き込みによるものと判定した場合（ステップＳ９１３、Ｙｅｓ）、メモリ書き込み用のページを新たに割り当て、受信したデータをコピーする（ステップＳ９１４）。ステップＳ９１３、およびステップ９１４の後、この処理を終了する。一方、第２の受信部１１６は、ページフォルトの原因が、メモリの書き込みによらないと判定した場合（ステップＳ９１３、Ｎｏ）、すなわちページフォルトの原因が、メモリの読み出しによるものと判定した場合、処理を終了する。
【０１０３】
図２０は、第１の実施形態に係る移行先の情報処理装置Ｐｄで動作する仮想マシンＢがディスクの読み出しを要求し、転送処理とは非同期で仮想マシンが情報処理装置にディスクＩ／Ｏを要求したときの、第２の受信部１１６による処理手順を示すフローチャートである。ここで、仮想マシンＢが未転送のディスク領域に対して読み出しを行うと、仮想マシンの処理がホストマシンに復帰する。第２の受信部１１６は、ディスクの読み出しが要求されたことを契機に以下の処理を実行する。すなわち、第２の受信部１１６は、仮想マシンＢが参照したデータを移行元の情報処理装置Ｐｓに要求し、所定のディスク領域に書き出す（ステップＳ９２１）。この後、第２の受信部１１６は、処理を終了する。
【０１０４】
上述したように、第１の実施形態に係る情報処理装置１０において、アクセス頻度の高いメモリ領域をプレコピー処理として転送してから仮想マシンを移行させることで、仮想マシンを異なる情報処理装置に移行させる際に、仮想マシンの移行時間を短くし、かつライブ移行後の性能の低下を軽減することができる。
【０１０５】
具体的には、アクセス頻度の高いメモリ領域をプレコピー処理として転送することで、仮想マシンの停止期間を短縮化できる。また、アクセス頻度の高いメモリ領域をプレコピー処理として転送することで、仮想マシンの移行後にページフォルトの発生を低減することにより、移行後の仮想マシンの性能が低下することを軽減できる。このように、第１の実施形態によれば、仮想マシンの停止期間の短縮化と、仮想マシンの再開後にページフォルトの発生頻度の軽減とを両立することができる。
【０１０６】
また、仮想マシンでは、同一の物理アドレスに格納されたデータを異なる仮想アドレスに対応付けて管理する場合があるが、第１の実施形態によれば、アクセス頻度の高いメモリ領域のうち、移行直前に仮想マシン上で動作しているプロセス・スレッドのアドレス空間に該当する物理メモリのみをプレコピー処理として転送する。ここで、第１の実施形態によれば、例えば、４ＫｉＢ又は８ＫｉＢ単位で識別子をつけ、同一の情報がある場合に、送信済の識別子のみ転送する。これにより、移行先の情報処理装置Ｐｄでメモリ・ディスクの展開・コピーが不要となり、ＣＰＵやメモリの負荷を軽減することができる。
【０１０７】
また、第１の実施形態によれば、内容が頻繁に変更されるプロセス・スレッドのスタック領域をプレコピー対象から除外する。これにより、移行先の情報処理装置Ｐｄでメモリ・ディスクの展開・コピー回数を軽減することができるので、ＣＰＵやメモリの負荷を軽減することができる。
【０１０８】
また、第１の実施形態によれば、プレコピー処理で転送したデータのうち、データの転送後に変更されたメモリ位置の一覧を示す無効化情報を生成し、生成した無効化情報を移行先の情報処理装置Ｐｄに転送する。そして、移行先の情報処理装置Ｐｄでは、無効化情報に登録されたメモリ領域へのアクセスを禁止する。これにより、移行元の情報処理装置Ｐｓと移行先の情報処理装置Ｐｄとでデータの整合性を図ることができる。
【０１０９】
（第２の実施形態）
さて、これまで本発明の実施形態について説明したが、本発明は上述した実施形態以外にも、その他の実施形態にて実施されてもよい。そこで、以下では、その他の実施形態を示す。
【０１１０】
（システム構成）
また、本実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部又は一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部又は一部を公知の方法で自動的に行うこともできる。この他、上述文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については（例えば、図１〜図２０）、特記する場合を除いて任意に変更することができる。
【０１１１】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。
【０１１２】
（プログラム）
図２１は、コンピュータシステムによる処理を実行するための仮想マシンの移行プログラムによる情報処理がコンピュータを用いて具体的に実現されることを示す図である。図２１に例示するように、コンピュータ１０００は、例えば、メモリ１０１０と、ＣＰＵ１０２０と、ハードディスクドライブインタフェース１０３０と、ディスクドライブインタフェース１０４０と、シリアルポートインタフェース１０５０と、ビデオアダプタ１０６０と、ネットワークインタフェース１０７０とを有する。これらの各部は、バス１０８０によって接続される。
【０１１３】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１およびＲＡＭ１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input/Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１１００に接続される。ディスクドライブ１１００には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース１０５０には、例えば、マウス１１１０およびキーボード１１２０が接続される。ビデオアダプタ１０６０には、例えば、ディスプレイ１１３０が接続される。
【０１１４】
ここで、図２１に例示するように、ハードディスクドライブ１０９０は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３、プログラムデータ１０９４を記憶する。すなわち、開示の技術に係る仮想マシンの移行プログラムは、コンピュータによって実行される指令が記述されたプログラムモジュール１０９３として、例えばハードディスクドライブ１０９０に記憶される。具体的には、上記実施形態で説明した仮想デバイス７５の各部と同様の情報処理を実行する手順各々が記述されたプログラムモジュール１０９３が、ハードディスクドライブ１０９０に記憶される。
【０１１５】
また、仮想マシンの移行プログラムによる情報処理に用いられるデータは、プログラムデータ１０９４として、例えばハードディスクドライブ１０９０に記憶される。そして、ＣＰＵ１０２０が、ハードディスクドライブ１０９０に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出し、各種の手順を実行する。
【０１１６】
なお、仮想マシンの移行プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０９０に記憶される場合に限られない。例えば、プログラムモジュール１０９３やプログラムデータ１０９４は、着脱可能な記憶媒体に記憶されても良い。この場合、ＣＰＵ１０２０は、ディスクドライブ１１００などの着脱可能な記憶媒体を介してデータを読み出す。また、同様に、仮想マシンの移行プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ネットワーク（ＬＡＮ（Local  Area  Network）、ＷＡＮ（Wide  Area  Network）等）を介して接続された他のコンピュータに記憶されても良い。この場合、ＣＰＵ１０２０は、ネットワークインタフェース１０７０を介して他のコンピュータにアクセスすることで各種データを読み出す。
【０１１７】
（その他）
なお、本実施形態で説明した仮想マシンの移行プログラムは、インターネットなどのネットワークを介して配布することができる。また、仮想マシンの移行プログラムは、ハードディスク、フレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行することもできる。
【符号の説明】
【０１１８】
１０、４０  情報処理装置
３０、６０  仮想マシン
７５        仮想デバイス
１０１      転送用メモリ管理テーブル
１０２      転送データテーブル
１０３      受信用メモリ管理テーブル
１０４      受信データテーブル
１１１      第１の転送部
１１２      停止制御部
１１３      第２の転送部
１１４      第１の受信部
１１５      起動制御部
１１６      第２の受信部
【図１】
2015022380.tif 000003
【図２】
2015022380.tif 000004
【図３】
2015022380.tif 000005
【図４】
2015022380.tif 000006
【図５】
2015022380.tif 000007
【図６】
2015022380.tif 000008
【図７】
2015022380.tif 000009
【図８】
2015022380.tif 000010
【図９】
2015022380.tif 000011
【図１０】
2015022380.tif 000012
【図１１】
2015022380.tif 000013
【図１２】
2015022380.tif 000014
【図１３】
2015022380.tif 000015
【図１４】
2015022380.tif 000016
【図１５】
2015022380.tif 000017
【図１６】
2015022380.tif 000018
【図１７】
2015022380.tif 000019
【図１８】
2015022380.tif 000020
【図１９】
2015022380.tif 000021
【図２０】
2015022380.tif 000022
【図２１】
2015022380.tif 000023