(57)【特許請求の範囲】
【請求項１】
第１物理計算機と、
前記第１物理計算機に接続された第２物理計算機と
を備え、
前記第１物理計算機は、制御デバイスと、前記制御デバイスに接続される記憶デバイスとを有し、
前記第１物理計算機の前記制御デバイスは、仮想計算機を構築し、前記仮想計算機上で所定のゲストプログラムを実行可能であり、
前記記憶デバイスの一部の領域は、前記仮想計算機における記憶デバイスである仮想記憶デバイスとして用いられており、
前記第１物理計算機は、前記記憶デバイスに対して、前記制御デバイスによらずデータを格納可能な転送デバイスを有し、
前記制御デバイスは、前記第１物理計算機の前記仮想計算機を、前記ゲストプログラムを実質的に実行させつつ、前記第２物理計算機に移動させるライブマイグレーションを実行する際に、前記仮想計算機に割り当てられた前記仮想記憶デバイスに対する一定時間におけるデータの書込み量を低減するように制御するようになっており、
前記制御デバイスは、
前記転送デバイスに対して前記ゲストプログラムによるデータ取得要求を発行し、
前記転送デバイスから前記データ取得要求に対する応答であるデータ取得応答があった場合に、前記データ取得応答があったことを前記ゲストプログラムに報告するための割込みを一時的に保留し、
前記データ取得応答があったことを前記ゲストプログラムに報告するための割込みを一時的に保留した場合に、前記データ取得応答に対応する取得したデータのデータ長と、保留を行っている保留時間とに基づいて、当該データ取得応答の報告のための割込みの保留を制御する、
計算機システム。
【請求項２】
前記制御デバイスは、
前記データ取得応答に対応する取得したデータのデータ長と、保留を行っている保留時間とに基づいて、前記当該データ取得応答の報告のための割込みの保留を解除し、
前記データ取得応答の報告のための割込みを実行する
請求項１に記載の計算機システム。
【請求項３】
前記制御デバイスは、
前記ゲストプログラムにおいて前記データ取得要求に対するタイムアウトとなる前に、前記データ取得要求に対応する前記データ取得応答の報告のための割込みを行う
請求項１に記載の計算機システム。
【請求項４】
前記制御デバイスは、
前記ライブマイグレーションの実行時の所定の時点に、前記仮想記憶デバイスを、データの書込みを禁止する書込み保護状態とする
請求項１に記載の計算機システム。
【請求項５】
前記制御デバイスは、
前記仮想記憶デバイスに対する書込みデータのデータ量が所定値以下の場合に、前記仮想記憶デバイスの前記書込み保護状態を解除する
請求項４に記載の計算機システム。
【請求項６】
前記制御デバイスは、
前記仮想記憶デバイスにおける更新が発生した領域を特定可能な情報を前記記憶デバイスに格納し、
前記仮想記憶デバイスの更新された領域のデータを、前記第２物理計算機に送信する
請求項１乃至請求項５のいずれか一項に記載の計算機システム。
【請求項７】
前記制御デバイスは、
前記第２物理計算機に対して、前記仮想計算機と同じ新たな仮想計算機を構築するために必要なデータの転送を完了した後に、前記新たな仮想計算機を起動させる指示を行う
請求項６に記載の計算機システム。
【請求項８】
制御デバイスと記憶デバイスとを有する物理計算機上で仮想計算機を構築することを前記物理計算機に実行させるためのコンピュータプログラムであって、
前記物理計算機の前記制御デバイスは、前記仮想計算機上で所定のゲストプログラムを実行可能であり、
前記記憶デバイスの一部の領域は、前記仮想計算機における記憶デバイスである仮想記憶デバイスとして用いられており、
前記コンピュータプログラムは、
前記物理計算機の前記仮想計算機を、前記ゲストプログラムを実質的に実行させつつ、他の物理計算機に移動させるライブマイグレーションを実行させる際に、前記仮想計算機に割り当てられた前記仮想記憶デバイスに対する一定時間におけるデータの書込み量を低減させるように制御することを前記物理計算機に実行させるようになっており、
転送デバイスに対して前記ゲストプログラムによるデータ取得要求を発行し、
前記転送デバイスから前記データ取得要求に対する応答であるデータ取得応答があった場合に、前記データ取得応答があったことを前記ゲストプログラムに報告するための割込みを一時的に保留し、
前記データ取得応答があったことを前記ゲストプログラムに報告するための割込みを一時的に保留した場合に、前記データ取得応答に対応する取得したデータのデータ長と、保留を行っている保留時間とに基づいて、当該データ取得応答の報告のための割込みの保留を制御する、
ことを前記物理計算機に実行させるコンピュータプログラム。
【請求項９】
前記ライブマイグレーションの実行時の所定の時点に、前記仮想記憶デバイスを、データの書込みを禁止する書込み保護状態とさせる
ことを更に前記物理計算機に実行させる請求項８に記載のコンピュータプログラム。
【請求項１０】
第１物理計算機と、第２物理計算機とを備える計算機システムにおける制御方法であって、
前記第１物理計算機は、制御デバイスと、前記制御デバイスに接続される記憶デバイスとを有し、
前記第１物理計算機の前記制御デバイスは、仮想計算機を構築し、前記仮想計算機上で所定のゲストプログラムを実行可能であり、
前記記憶デバイスの一部の領域は、前記仮想計算機における記憶デバイスである仮想記憶デバイスとして用いられており、
前記第１物理計算機の前記制御デバイスは、前記第１物理計算機の前記仮想計算機を、前記ゲストプログラムを実質的に実行させつつ、前記第２物理計算機に移動させるライブマイグレーションを実行する際に、前記仮想計算機に割り当てられた前記仮想記憶デバイスに対する一定時間におけるデータの書込み量を低減させるように制御するようになっており、
前記第１物理計算機の前記制御デバイスは、転送デバイスに対して前記ゲストプログラムによるデータ取得要求を発行し、
前記第１物理計算機の前記制御デバイスは、前記転送デバイスから前記データ取得要求に対する応答であるデータ取得応答があった場合に、前記データ取得応答があったことを前記ゲストプログラムに報告するための割込みを一時的に保留し、
前記第１物理計算機の前記制御デバイスは、前記データ取得応答があったことを前記ゲストプログラムに報告するための割込みを一時的に保留した場合に、前記データ取得応答に対応する取得したデータのデータ長と、保留を行っている保留時間とに基づいて、当該データ取得応答の報告のための割込みの保留を制御する、
制御方法。
【請求項１１】
前記第１物理計算機の前記制御デバイスは、前記ライブマイグレーションの実行時の所定の時点に、前記仮想記憶デバイスを、データの書込みを禁止する書込み保護状態とする
請求項１０に記載の制御方法。
【請求項１２】
第１物理計算機と、
前記第１物理計算機に接続された第２物理計算機と
を備え、
前記第１物理計算機は、制御デバイスと、前記制御デバイスに接続される記憶デバイスとを有し、
前記第１物理計算機の前記制御デバイスは、仮想計算機を構築し、前記仮想計算機上で所定のゲストプログラムを実行可能であり、
前記記憶デバイスの一部の領域は、前記仮想計算機における記憶デバイスである仮想記憶デバイスとして用いられており、
前記第１物理計算機は、前記記憶デバイスに対して、前記制御デバイスによらずデータを格納可能な転送デバイスを有し、
前記制御デバイスは、前記第１物理計算機の前記仮想計算機を、前記ゲストプログラムを実質的に実行させつつ、前記第２物理計算機に移動させるライブマイグレーションを実行する際に、前記仮想計算機に割り当てられた前記仮想記憶デバイスに対する一定時間におけるデータの書込み量を低減するように制御するようになっており、
前記制御デバイスは、
前記転送デバイスに対して前記ゲストプログラムによるデータ取得要求を発行し、
前記転送デバイスから前記データ取得要求に対する応答であるデータ取得応答があった場合に、前記データ取得応答があったことを前記ゲストプログラムに報告するための割込みを一時的に保留し、
前記制御デバイスは、
前記ライブマイグレーションの実行時の所定の時点に、前記仮想記憶デバイスを、データの書込みを禁止する書込み保護状態とし、
前記仮想記憶デバイスに対する書込みデータのデータ量が所定値以下の場合に、前記仮想記憶デバイスの前記書込み保護状態を解除する、
計算機システム。
【請求項１３】
制御デバイスと記憶デバイスとを有する物理計算機上で仮想計算機を構築することを前記物理計算機に実行させるためのコンピュータプログラムであって、
前記物理計算機の前記制御デバイスは、前記仮想計算機上で所定のゲストプログラムを実行可能であり、
前記記憶デバイスの一部の領域は、前記仮想計算機における記憶デバイスである仮想記憶デバイスとして用いられており、
前記コンピュータプログラムは、
前記物理計算機の前記仮想計算機を、前記ゲストプログラムを実質的に実行させつつ、他の物理計算機に移動させるライブマイグレーションを実行させる際に、前記仮想計算機に割り当てられた前記仮想記憶デバイスに対する一定時間におけるデータの書込み量を低減させるように制御することを前記物理計算機に実行させるようになっており、
転送デバイスに対して前記ゲストプログラムによるデータ取得要求を発行し、
前記転送デバイスから前記データ取得要求に対する応答であるデータ取得応答があった場合に、前記データ取得応答があったことを前記ゲストプログラムに報告するための割込みを一時的に保留し、
前記ライブマイグレーションの実行時の所定の時点に、前記仮想記憶デバイスを、データの書込みを禁止する書込み保護状態とし、
前記仮想記憶デバイスに対する書込みデータのデータ量が所定値以下の場合に、前記仮想記憶デバイスの前記書込み保護状態を解除する、
ことを前記物理計算機に実行させるコンピュータプログラム。
【請求項１４】
第１物理計算機と、第２物理計算機とを備える計算機システムにおける制御方法であって、
前記第１物理計算機は、制御デバイスと、前記制御デバイスに接続される記憶デバイスとを有し、
前記第１物理計算機の前記制御デバイスは、仮想計算機を構築し、前記仮想計算機上で所定のゲストプログラムを実行可能であり、
前記記憶デバイスの一部の領域は、前記仮想計算機における記憶デバイスである仮想記憶デバイスとして用いられており、
前記第１物理計算機の前記制御デバイスは、前記第１物理計算機の前記仮想計算機を、前記ゲストプログラムを実質的に実行させつつ、前記第２物理計算機に移動させるライブマイグレーションを実行する際に、前記仮想計算機に割り当てられた前記仮想記憶デバイスに対する一定時間におけるデータの書込み量を低減させるように制御するようになっており、
前記第１物理計算機の前記制御デバイスは、転送デバイスに対して前記ゲストプログラムによるデータ取得要求を発行し、
前記第１物理計算機の前記制御デバイスは、前記転送デバイスから前記データ取得要求に対する応答であるデータ取得応答があった場合に、前記データ取得応答があったことを前記ゲストプログラムに報告するための割込みを一時的に保留し、
前記第１物理計算機の前記制御デバイスは、前記ライブマイグレーションの実行時の所定の時点に、前記仮想記憶デバイスを、データの書込みを禁止する書込み保護状態とし、
前記第１物理計算機の前記制御デバイスは、前記仮想記憶デバイスに対する書込みデータのデータ量が所定値以下の場合に、前記仮想記憶デバイスの前記書込み保護状態を解除する、
制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一の物理計算機から他の物理計算機へ、実質的に動作状態にある仮想計算機を移動させる技術に関する。
【背景技術】
【０００２】
従来、物理計算機において、仮想計算機を動作させることが行われている。また、１の物理計算機で動作している仮想計算機を他の物理計算機に移動させる技術として、特許文献１に記載されている技術が知られている。特許文献１には、実計算機上で動作している仮想計算機を別の実計算機上に移動させる際、管理部により、転送元の仮想計算機を停止させ、転送先の仮想計算機を別の実計算機上に定義し、その起動を抑止した状態で、転送元の仮想計算機の構成情報及び転送先の仮想計算機の構成情報を変更し、構成情報の変更後に、転送先の仮想計算機の起動の抑止を解除する技術が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−３３４０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、認証サービスや予約システムなど、多くのサービスは、２４時間、１年中にわたって無停止でのサービスの提供が要求される場合が多い。このような無停止でのサービスの提供を実現するには、２４時間、１年中にわたって稼動することのできる物理計算機が必要となる。しかしながら、実際には、不具合の発生により、物理計算機を停止しなければならないことがある。物理計算機に発生する不具合としては、ファームウェアの不具合や、物理計算機の各部位の物理的な劣化などによる故障、物理計算機の能力を超える負荷によるシステム停止などがある。
【０００５】
ファームウェアの不具合は、不具合箇所のコードが走る前に、ファームウェアを交換したり、または、修正されたファームウェアが適用されている別の装置を用いたりすることができれば、発生することはない。また、物理計算機の劣化は、修正可能なエラー（correctable error(CE)）として、事前にファームウェアに、報告が上がる場合があるので、correctable error発生時に、別の物理計算機に、サービスを移動できれば、サービスを停止しなくて済む。また、物理計算機の能力以上の負荷がかかりそうになる前に、能力の高い物理計算機にサービスを移動できれば、システム停止することなくサービスを続けることができる。
【０００６】
このように、物理計算機に縛られずにサービスを無停止で、物理計算機間を移動できれば、２４時間、１年中無停止でのサービスを提供することが可能となる。
【０００７】
ここで、物理計算機そのものに、サービスを提供するＯＳ（operating
system）やアプリケーションをインストールしている場合には、サービスを提供するＯＳを無停止で、他の物理計算機に移動することができない。
【０００８】
これに対して、特許文献１に記載された技術のように、ＯＳの下に、仮想計算機をソフトウェア的に作ると、この仮想計算機を物理計算機間で移動することが可能である。
【０００９】
しかしながら、特許文献１に記載された技術では、仮想計算機の移動が完了するまで仮想計算機の動作を停止させる必要がある。
【００１０】
これに対して、仮想計算機が処理の実行を継続して行っている際に、ＯＳに認知されないほど短い間(数ｍｓから１秒間程度)仮想計算機を停止させることを適宜行いつつ、仮想計算機を他の物理計算機に移動させることにより、実質的に無停止で仮想計算機を他の物理計算機に移動させたかのように見せるライブマイグレーション（live migration：活性状態移動)の技術がある。
【００１１】
仮想計算機を構成するための部位として、ＳＡＮ (Storage Area
Network)等の高速なデータ転送が可能なネットワークにデータを流すＨＢＡ (Host Bus Adapter)デバイスが必要となるが、ＨＢＡデバイスを、全てソフトウェアにより仮想化またはエミュレーション (模擬：emulation)すると、エミュレーションのために使用する物理プロセッサ(physical processor)の処理が必要となる。ＨＢＡを物理プロセッサによってエミュレーションすると、エミュレーションしないで、物理ＨＢＡを使用する場合よりも、データ転送帯域の低下やデータ転送レイテンシ（latency：転送遅延）の増大等のデータ性能低下を招く。
【００１２】
エミュレーションによるデータ性能低下を、エミュレーションしない場合に比べて、例えば、１０％以下に抑えるための技術としては、ＨＢＡの機能であるＮＰＩＶ(N_Port ID virtualization)を使用し、仮想計算機に、物理ＨＢＡそのものではなく、ＮＰＩＶで作った仮想ポート（port)を見せる技術が考えられる。仮想計算機にＮＰＩＶを見せることで、ＤＭＡ(direct memory access)転送やネットワークに流すパケットの生成など、物理プロセッサで実行する必要があった処理を、物理ＨＢＡに実行させることができるようになる。このように、一部の処理を物理ＨＢＡで実行させることができるため、データ転送帯域の低下や、データ転送レイテンシの増大を、低く抑えることができる。
【００１３】
また、ＮＰＩＶによると、１つのポートを複数のポートとして使用できるため、１つのポートを使用中でも、別のポートを使用して、データ転送をすることが可能である。
ここで、ＨＢＡと、ストレージ（storage：記憶装置)との間でデータ転送をする前には、必ずＨＢＡポートからＳＡＮファブリック（fablic）へのログイン（承認)が必要である。このログインを行うための時間（ログイン時間）は、ＳＡＮの構成によっては、数分かかることもある。ＮＰＩＶポートを割り当てた仮想計算機も同様に、ＨＢＡと、ストレージ（storage：記憶装置)との間でデータ転送をする前には、ログインする必要がある。
【００１４】
例えば、ライブマイグレーションにおいては、転送元の物理計算機でＮＰＩＶをログアウトさせ、その後、転送先の物理計算機でＮＰＩＶをログインさせる必要があるが、上記したようにログインには数分かかることもあるので、転送先の物理計算機の仮想計算機では、ストレージとの間のデータ転送が数分間止まってしまう可能性がある。
【００１５】
このようなログインに関わるデータ転送の停止を解決するための方法としては、１つの物理的なポートを複数ポートとして共有して使用することができるＮＰＩＶ技術を利用し、移動対象のＮＰＩＶポートがログイン中に、もう１つのＮＰＩＶポートもログインさせ、移動対象のＮＰＩＶポートと異なるポートにデータを流すようにし、移動対象のＮＰＩＶポートをログアウトさせ、転送先の物理計算機において、移動対象のＮＰＩＶポートに対応させるＮＰＩＶポートをログインする方法がある。この方法によると、転送先の物理計算機での仮想計算機が動作する場合において、ストレージとの間のデータ転送が数分止まることがない。
【００１６】
ここで、仮想計算機が、処理におけるストレージとの間のデータ転送を、物理計算機の最大データ転送帯域に近い性能を出している環境下で行っている場合において、ライブマイグレーションを行うことを想定する。ライブマイグレーションをするためのデータの転送路として、ストレージとの間のデータ転送帯域よりも性能の低い転送路が使用されることもある。ライブマイグレーションにおいては、転送元の仮想計算機のメモリ（ゲストメモリ）の内容を、転送先の仮想計算機のメモリに反映させる必要があるが、メモリに対して読込まれるデータの帯域が、ライブマイグレーションのためのデータ転送路の帯域よりも大きいと、転送元の仮想計算機のメモリの内容を、転送先の仮想計算機のメモリに反映させる処理が追いつかなくなってしまい、ライブマイグレーションがいつまでも終了しないという事態が発生する可能性がある。
【００１７】
本発明は、上記課題に鑑みなされたものであり、その目的は、仮想計算機を他の物理計算機に適切に移動させることのできる技術を提供することにある。
【課題を解決するための手段】
【００１８】
計算機システムは、第１物理計算機と、第１物理計算機に接続される第２物理計算機とを備える。第１物理計算機は、制御デバイスと、制御デバイスに接続される記憶デバイスとを有する。第１物理計算機の制御デバイスは、仮想計算機を構築し、仮想計算機上で所定のゲストプログラムを実行可能である。記憶デバイスの一部の領域は、仮想計算機における記憶デバイスである仮想記憶デバイスとして用いられる。制御デバイスは、第１物理計算機の仮想計算機を、ゲストプログラムを実質的に実行させつつ、第２物理計算機に移動させるライブマイグレーションを実行する際に、仮想計算機に割り当てられた仮想記憶デバイスに対する一定時間におけるデータの書込み量を低減させるように制御する。
【発明の効果】
【００１９】
一の物理計算機で動作する仮想計算機を、他の物理計算機にライブマイグレーションにより適切に移動させることができる。
【図面の簡単な説明】
【００２０】
【図１】図１は、実施形態に係る計算機システムの構成図である。
【図２】図２は、実施形態に係る転送元物理計算機上で動作するプログラムにより実行される処理のフローチャートである。
【図３】図３は、実施形態に係るＨＢＡ転送処理を説明する第１の図である。
【図４】図４は、実施形態に係るＨＢＡ転送処理を説明する第２の図である。
【図５】図５は、実施形態に係るＤＭＡデータ転送量および平均ＤＭＡデータ転送量の関係を説明する第１の図である。
【図６】図６は、実施形態に係るＤＭＡデータ転送量および平均ＤＭＡデータ転送量の関係を説明する第２の図である。
【図７】図７は、実施形態に係るＨＢＡのリクエストキューを説明する第１の図である。
【図８】図８は、実施形態に係るＨＢＡのレスポンスキューを説明する第１の図である。
【図９】図９は、実施形態に係るＨＢＡのリクエストキューを説明する第２の図である。
【図１０】図１０は、実施形態に係るＨＢＡのレスポンスキューを説明する第２の図である。
【図１１】図１１は、実施形態に係る転送先物理計算機上で動作するプログラムにより実行される処理のフローチャートである。
【図１２】図１２は、実施形態に係るＥＰＴを説明する図である。
【図１３】図１３は、実施形態に係るＥＰＴ中のＥＰＴ  ＰＴテーブルのエントリを説明する図である。
【図１４】図１４は、実施形態に係るＥＰＴ中のＥＰＴ  ＰＤテーブルのエントリを説明する図である。
【図１５】図１５は、実施形態に係るゲストプログラムによるゲストメモリへの書込み処理を説明する第１の図である。
【図１６】図１６は、実施形態に係るゲストプログラムによるゲストメモリへの書込み処理を説明する第２の図である。
【図１７】図１７は、実施形態に係る実ＨＢＡ仮想ポートの使用時における、ゲストアドレスと、ハイパバイザアドレスとの対応関係を示す図である。
【図１８】図１８は、実施形態に係るダミーＨＢＡ仮想ポートの使用時における、ゲストアドレスと、ハイパバイザアドレスとの対応関係を示す図である。
【発明を実施するための形態】
【００２１】
以下、図面を用いて実施形態を説明する。なお、以下に説明する実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００２２】
なお、以後の説明では、「ａａａテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていても良い。データ構造に依存しないことを示すために「ａａａテーブル」を「ａａａ情報」と呼ぶことができる。
【００２３】
また、以後の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Central  Processing  Unit））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）、や通信制御装置（例えばＮＩＣ、ＨＢＡ）を用いながら行うため、処理の主語がプロセッサとされても良い。また、プログラムを主語として説明された処理は、プロセッサ或いはそのプロセッサを有するデバイス（例えば、計算機等）が行う処理としても良い。また、プログラムの一部又は全ては専用ハードウェアによって実現されても良い。また、コンピュータプログラムは、プログラムソースから各デバイスにインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ又は記憶メディアであっても良い。
【００２４】
本実施形態の概要について説明する。
【００２５】
ライブマイグレーションのためのデータの転送路のデータ転送帯域よりも高いデータ転送帯域を持つデバイス（図１のメモリ２１１等）のデータをライブマイグレーションにより移動する場合には、そのデバイスのデータ転送帯域（一定時間におけるデータ転送量）を制御する必要がある。
【００２６】
転送元の仮想計算機１０４を構成している物理計算機のデータ転送が、物理プロセッサ（physical processor）２１０のエミュレーションにより実現しているのではなく、ハードウェア（例えば、ＨＢＡ２１２）の機能を使用してデータ転送機能を実現している場合、物理プロセッサ２１０による介入や、エミュレーションなしに物理デバイスによりＤＭＡ転送が行われ、仮想計算機１０４に割り当てたられたメモリ２１１（ゲストメモリ１０９）に直接書込みや読み込みが行われる。このような場合には、物理デバイスによるＤＭＡ転送の帯域制御をする必要がある。
【００２７】
また、物理プロセッサ２１０による介入が可能な仮想計算機１０４に割り当てられたゲストメモリ１０９へのデータの書込みもライブマイグレーションのための転送路のデータ転送帯域よりも高いデータ転送帯域があるため、このデータ書込みも転送帯域を制御する必要がある。
【００２８】
ＤＭＡ転送の帯域制御する方法のうち、物理デバイスが転送している転送帯域自体を制御する方法としては、物理デバイスの内部機構を変更して、ＤＭＡ転送の帯域を制御する他にはない。物理デバイスの内部機構の変更は困難であるので、物理デバイスが転送している転送帯域自体を制御することは困難である。
【００２９】
したがって、ＤＭＡ転送が最大の性能により常に実行されている場合には、ＤＭＡ転送の帯域を制御する方法がない。しかしながら、ＤＭＡ転送を実行する時間と、ＤＭＡ転送を実行しない時間とを制御することにより、実質的なＤＭＡ転送の帯域を制御することができる。ここで、実質的なＤＭＡ転送の帯域は、ＤＭＡ転送していない時間（すなわち、帯域が０となる時間）とＤＭＡ転送を実行している時間とを足し合わせた合計時間で、この合計時間内に行われたＤＭＡデータ転送量を割った値である。
【００３０】
そこで、本実施形態においては、ＤＭＡ転送していない時間を制御することにより、ＤＭＡ転送の帯域を制御する。例えば、ＤＭＡ転送していない時間を作るために、物理プロセッサ２１０による介入が可能なデバイスの割込み報告を遅らせることで、ＤＭＡ転送していない時間を制御する。割込み報告を遅らせることで、ディスク読み込み等のＤＭＡ転送による仮想計算機１０４に割り当てられたゲストメモリ１０９への書込み頻度を制御する。このように、仮想計算機１０４に割り当てられたゲストメモリ１０９への書込み頻度を制御できるので、ライブマイグレーションのためのデータの転送路を用いて、適切にデータの転送を行うことができる。
【００３１】
また、物理プロセッサ２１０による介入が可能な仮想計算機１０４に割り当てられたゲストメモリ１０９への書込みは、物理プロセッサ２１０の書込み保護機能を使用して帯域制御する。書込み保護例外（すなわち、書込み保護がされている領域に対するデータの書込み要求）が発生した後、データが実際にゲストメモリ１０９に書き込まれるようにするには、書込み保護例外を解除しなくてはならないが、書込み保護例外の解除を遅延させることで、ゲストメモリ１０９に対する書込み帯域を制御する。書込み保護機能を使った帯域制御は、ゲストメモリ１０９に対する書込み帯域を制御することができるので、ディスク(disk：不揮発性記憶装置)へのデータ書込み等といった、物理プロセッサ２１０によって、書込みデータをいったん仮想計算機に割り当てたゲストメモリ１０９へ書き込んでからデバイスに書込みを依頼するようなデータ書込みの帯域制限にも使用することが可能である。このように、仮想計算機１０４に割り当てられたゲストメモリ１０９への書込み帯域を制御できるので、ライブマイグレーションのためのデータの転送路を用いて、適切にデータの転送を行うことができる。
【００３２】
次に、実施形態に係る計算機システムについて詳細に説明する。
【００３３】
図１は、実施形態に係る計算機システムの構成図である。
【００３４】
計算機システムは、転送元の仮想計算機を動作させる転送元物理計算機（Source
machine：第１物理計算機の一例）２００と、仮想計算機の転送先となる転送先物理計算機（Destination machine：第２物理計算機の一例）２０１と、ファイバーチャネルスイッチ（ＦＣ−ＳＷ）２３０と、ストレージ２３１と、イーサネットスイッチ（Ethernet-SW：イーサネットは登録商標）２３２とを含む。転送元物理計算機２００と転送先物理計算機２０１とは、イーサネットスイッチ２３２を介して接続されている。本実施形態では、転送元物理計算機２００と転送先物理計算機２０１との間の通信帯域は、例えば、１Ｇｂｐｓである。本実施形態では、イーサネットスイッチ２３２を介して接続されたネットワークを、ライブマイグレーションのためのデータの転送路としている。転送元物理計算機２００と、ストレージ２３１とは、ＦＣ−ＳＷ２３０を介して接続されている。転送先物理計算機２０１と、ストレージ２３１とは、ＦＣ−ＳＷ２３０を介して接続されている。なお、本実施形態では、転送元物理計算機２００又は転送先物理計算機２０１と、ストレージ２３１との間の回線の通信帯域は、イーサネットスイッチ２３２を介した転送元物理計算機２００と転送先物理計算機２０１との間の通信帯域よりも広く、例えば、８Ｇｂｐｓである。ストレージ２３１は、記憶領域を、転送元物理計算機２００又は転送先物理計算機２０１が利用するデータを格納する１以上のＬＵ（Logical unit）２３４を管理する。ストレージ２３１は、ＦＣ−ＳＷ２３０に登録されているＷＷＮ(World Wide Name)をもつＨＢＡのみが、ＬＵ２３４を読み書きできるように、アクセス制限を行っている。
【００３５】
転送元物理計算機２００は、制御デバイスの一例としての物理プロセッサ（Physical
processor）２１０と、記憶デバイスの一例としてのメモリ（Memory）２１１と、転送デバイスの一例としてのＨＢＡ（Host Bus Adapter）２１２と、ＮＩＣ（Network Interface Controller）２１３とを有する。物理プロセッサ２１０は、各種プログラム（例えば、ゲストプログラム１００等）を実行し、各種処理（例えば、デバイスのエミュレーション（emulation）等）を実行する。メモリ２１１は、各種プログラムや、各種プログラムが処理に利用するデータを記憶する。ＨＢＡ２１２は、ストレージ２３１に対するデータの書込み、又はストレージ２３１からのデータの読み出しを実行する。ＨＢＡ２１２は、ＤＭＡ転送を行うことができる。ストレージ２３１にデータを書込む際には、ＨＢＡ２１２に書込みたいデータを含む書込み要求を送信すると、データの書込み要求を受けたＨＢＡ２１２がＦＣ−ＳＷ２３０を経由し、ストレージ２３１へデータを書込む。また、ストレージ２３１からデータを読込む際には、ＨＢＡ２１２に読込み要求を送信すると、データの読込み要求を受けたＨＢＡ２１２がストレージ２３１からＦＣ−ＳＷ２３０を経由し、データを読込む。ＮＩＣ２１３は、イーサネットスイッチ２３２を介して接続された他の装置（例えば、転送先物理計算機２０１）との間のデータ転送を行う。本実施形態では、ＮＩＣ２１３を介して、転送元物理計算機２００の仮想計算機１０４で実行するプログラム（ゲストプログラム）１００や、ライブマイグレーション時に転送先物理計算機２０１に送る各種データを転送する。
【００３６】
ＨＢＡ２１２は、はＮＰＩＶ(N_Port ID virtualization)技術により、１つのＨＢＡポートを、複数のＷＷＮを持つ複数の仮想的なポートとして動作することができ、ＷＷＮごとに別々に、ＬＵ２３４への読み書きを制御することができる。すなわち、物理的にＦＣ−ＳＷ２３０に接続されているＨＢＡポートが１つでも、仮想的な複数のＨＢＡポートがそれぞれ、別々に、読み書きする対象のＬＵ２３４を選択することができ、それらＬＵ２３４に別々にデータを読み書きすることができる。
【００３７】
転送先物理計算機２０１は、物理プロセッサ２２０と、メモリ２２１と、ＨＢＡ２２３と、ＮＩＣ２２２とを有する。なお、各構成は、転送元物理計算機２００の同名の構成と同様である。
【００３８】
転送元物理計算機２００は、物理プロセッサ２１０、メモリ２１１、ＮＩＣ２１３、ＨＢＡ２１２等の物理デバイスを所定の時間ごとに使用者を分ける方法や、物理デバイスの使用領域を分ける方法を使用することで、１以上の仮想的な計算機（仮想計算機）１０４、１０５として動作することができる。例えば、転送元物理計算機２００は、転送元ハイパバイザ１９０を物理プロセッサ２１０により実行することで、仮想計算機を構築することができる。転送元ハイパバイザ１９０は、転送元ＬＰＡＲ(logical partition)１５０、転送元シャドウＬＰＡＲ１６０、割込みプログラム（interrupt program）１５２等を記憶する。転送元ハイパバイザ１９０及び転送元ＬＰＡＲ１５０を物理プロセッサ２１０が実行することにより、転送元仮想計算機１０４が構築され、転送元ハイパバイザ１９０及び転送元シャドウＬＰＡＲ１６０を物理プロセッサ２１０が実行することにより、転送元シャドウ仮想計算機１０５が構築される。
【００３９】
転送先物理計算機２０１も、物理プロセッサ２２０、メモリ２２１、ＮＩＣ２２３、ＨＢＡ２２２等の物理デバイスを所定の時間ごとに使用者を分ける方法や、物理デバイスの使用領域を分ける方法を使用することで、１以上の仮想的な計算機（仮想計算機）１０６、１０７として動作することができる。例えば、転送先物理計算機２０１は、転送先ハイパバイザ１９１を物理プロセッサ２２０により実行することで、仮想計算機を構築することができる。転送先ハイパバイザ１９１は、転送先シャドウＬＰＡＲ１７０、割込みプログラム（interrupt program）１７２等を記憶する。なお、ライブマイグレーション後においては、転送先ハイパバイザ１９１は、転送先ＬＰＡＲ１８０を更に記憶する。転送先ハイパバイザ１９１及び転送先シャドウＬＰＡＲ１７０を物理プロセッサ２２０が実行することにより、転送先シャドウ仮想計算機１０６が構築され、また、転送先ハイパバイザ１９１及び転送先ＬＰＡＲ１８０を物理プロセッサ２２０が実行することにより、転送先仮想計算機１０７が構築される。転送元ハイパバイザ１９０と転送先ハイパバイザ１９１は、いわゆる仮想化機構である。
【００４０】
転送元仮想計算機１０４は、ユーザに対して提供される計算機であり、この転送元仮想計算機１０４上において、ゲストプログラム１００が実行される。ゲストプログラム１００としては、ＯＳや、ストレージ２３１との間のデータの入出力を伴うアプリケーション等がある。転送元仮想計算機１０４は、仮想プロセッサ（VProcessor）１０８と、ゲストメモリ(Guest memory)１０９と、仮想ＮＩＣ（VNIC）１１０と、実ＨＢＡ仮想ポート（Real HBA vport）１１１と、ダミーＨＢＡ仮想ポート（Dummy HBA Vport）１１２とを含む。仮想プロセッサ１０８は、物理プロセッサ２１０の資源の一部が提供されることにより実現される仮想的なプロセッサである。ゲストメモリ１０９は、メモリ２１１の一部の領域が割り当てられているメモリである。仮想ＮＩＣ１１０は、ＮＩＣ２１３の機能を用いて構成される仮想的なＮＩＣである。実ＨＢＡ仮想ポート１１１及びダミーＨＢＡ仮想ポート１１２は、ＨＢＡ２１２のＮＰＩＶ機能を使用して構成される、仮想的なＨＢＡポートである。なお、転送元仮想計算機１０４上で動作するゲストプログラム１００に対しては、実ＨＢＡ仮想ポート１１１またはダミーＨＢＡ仮想ポート１１２のいずれかのＨＢＡポートが利用可能に提供される。なお、転送先仮想計算機１０７も、ライブマイグレーションが実行されると、最終的には転送元仮想計算機１０４と同様な構成となる。転送先仮想計算機１０７において、ゲストプログラム１００と同様なゲストプログラム１０３が実行される。
【００４１】
転送元シャドウ仮想計算機１０５は、転送元物理計算機２００から転送先物理計算機２０１に、仮想計算機を移動させるライブマイグレーションにおけるデータの転送における転送元物理計算機２００側の処理を実行するための計算機である。転送元シャドウ仮想計算機１０５上で、仮想計算機を移動させるライブマイグレーションにおけるデータの転送（具体的には、転送元ＬＰＡＲ１５０と、ゲストメモリ１０９を複製するためのデータ（複製データ）の転送）を実行するためのプログラムである転送元ＬＰＡＲムーバ１０１が実行される。転送元シャドウ仮想計算機１０５は、仮想プロセッサ１２０と、ゲストメモリ１２１と、仮想ＮＩＣ１２２とを含む。仮想プロセッサ１０２は、物理プロセッサ２１０の資源の一部が提供されることにより実現される仮想的なプロセッサである。ゲストメモリ１２１は、メモリ２１１の一部の領域が割り当てられているメモリである。仮想ＮＩＣ１２２は、ＮＩＣ２１３の機能を用いて構成される仮想的なＮＩＣである。
【００４２】
転送先シャドウ仮想計算機１０６は、転送元物理計算機２００から転送先物理計算機２０１に、仮想計算機を移動させるライブマイグレーションにおけるデータの転送における転送先物理計算機２０１側の処理を実行するための計算機である。転送先シャドウ仮想計算機１０６上で、仮想計算機を移動させるライブマイグレーションにおけるデータの転送を実行するためのプログラムである転送先ＬＰＡＲムーバ１０２が実行される。転送先シャドウ仮想計算機１０６は、仮想プロセッサ１３０と、ゲストメモリ１３１と、仮想ＮＩＣ１３２とを含む。なお、各構成は、転送元シャドウ仮想計算機１０５の同名の構成と同様である。
【００４３】
割込みプログラム１５２は、物理プロセッサ２１０、ＮＩＣ２１３、及びＨＢＡ２１２からの割込みを受け、転送元ＬＰＡＲ１５０または、転送元シャドウＬＰＡＲ１６０へ割込みがあったことを伝えるプログラムである。割込みプログラム１５２は、実施形態に係る帯域制御をしていない場合には、転送元ＬＰＡＲ１５０の後述するＩＲＲテーブル(Interrupt Request Register Table)１５８または、転送元シャドウＬＰＡＲ１６０の後述するＩＲＲテーブル１６５に割込みがあったことを記録する。
【００４４】
一方、割込みプログラム１５２は、実施形態に係る帯域制御を実施する場合において、ライブマイグレーション中は、割込み保留条件(割込み保留条件については、後に説明する)に合致した場合には、割込みを保留する。この時、割込みプログラム１５２は、割込みを保留する場合には、保留する割込みに対応する割込みベクトル（interrupt vector）を示す情報を後述する保留割込みテーブル（pending interrupt table）１５７に登録する。ここで、割込みベクトルは、割込みの種類を示す番号である。また、割込みプログラム１５２は、保留する割込みによってゲストプログラム１００に報告される、ＤＭＡによる書込みデータ長（更新データ長）と、発生した時刻(例えば、x86系プロセッサのtsc: time stamp counter)とを後述する保留データテーブル（Pending data table）１５６に記録する。
【００４５】
転送元ＬＰＡＲ１５０は、Ｌプロセッサプログラム１５１と、ＬＰＡＲプログラム１５３と、ＥＰＴ（extended page table）１５４と、ゲストアドレステーブル（guest address table）１５５と、保留データテーブル１５６と、保留割込みテーブル１５７と、ＩＲＲテーブル１５８と、ＩＳＲ（In-Service Register）テーブル１５９とを含む。
【００４６】
Ｌプロセッサプログラム１５１は、書込み保護等によりゲストプログラム１００を直接物理プロセッサ２１０で実行できない場合に、ゲストプログラム１００に割り込んで実行されるプログラムである。
【００４７】
Ｌプロセッサプログラム１５１は、ゲストプログラム１００から制御が渡された際、ＩＲＲテーブル１５８の内容を確認し、ＩＲＲテーブル１５８に登録されている割込みベクトルの内、最も優先度が高い割込みベクトルについてＩＳＲテーブル１５９に登録する。この時、Ｌプロセッサプログラム１５１は、ＩＳＲテーブル１５９に登録した割込みベクトルに対応するＩＰＲテーブル１５８のビットを落として、当該割込みベクトルの記録を取り消す。なお、x86系プロセッサでは、割込みベクトルは８ビットで表され、上位４ビットが割込み報告の優先順位を表している。上位４ビットの値が大きいほど、優先度が高い割込みベクトルであることを意味している。
【００４８】
転送元ＬＰＡＲ１５０は、ゲストプログラム１００がメモリ２１１を使用できるように、ＥＰＴ１５４を設定し、ハイパバイザ１９０が管理しているメモリ２１１の或る部分の領域を割当てる。このメモリ２１１の割り当てられた領域がゲストメモリ１０９の領域となる。
【００４９】
ＥＰＴ１５４は、転送元仮想計算機１０４のゲストメモリ１０９における物理アドレス（ゲストアドレス）が、ハイパバイザ１９０が管理しているメモリ２１１の領域のどのアドレス(ハイパバイザアドレス)に対応しているかを示すアドレス変換テーブルである。ここで、ゲストアドレスは、ゲストプログラム１００で利用される物理アドレスである。なお、ＥＰＴ１５４は、ネストテッドページテーブル（Nested page Table）と呼ばれることがある。
【００５０】
また、ＥＰＴ１５４は、ゲストメモリ１０９における４ＫＢページ単位、または２ＭＢページ単位のそれぞれの領域について、当該領域のデータについての書込み保護、読込み保護、命令実行保護、キャッシュ属性等のメモリアクセスにかかわる属性を保存している。ここで、ページとは、プロセッサがメモリアクセス属性を変えることのできる最小単位である。
【００５１】
ＬＰＡＲプログラム１５３は、転送元仮想計算機１０４の起動時に、ゲストプログラム１００にゲストメモリ１０９を割り当てる際にＥＰＴ１５４を設定する。また、ＬＰＡＲプログラム１５３は、ライブマイグレーションを実施する際に、ゲストメモリ１０９の全ての領域を、書込み保護属性とするようにＥＰＴ１５４を書き換える。
【００５２】
ゲストアドレステーブル１５５は、書込み保護例外、すなわち、書込み保護がされている領域へのデータの書込みを起こしたゲストプログラム１００が使用している物理アドレス（ゲストメモリアドレス）と、保護例外を起こした時の時刻（tsc)とを格納する。
【００５３】
保留データテーブル１５６は、ゲストプログラム１００に報告されるＤＭＡによる書込みデータ長（更新データ長）と、発生した時刻とを記憶する。
【００５４】
保留割込みテーブル１５７は、保留されている割込みを示す割込みベクトルを登録する。本実施形態では、保留割込みテーブル１５７は、複数（例えば、２５６）のビットで構成されたビットテーブルであり、各ビットが、発生する可能性がある各割込みベクトルと対応している。例えば、保留する割込みを示す割込みベクトルが５０（０ｘ３２）である場合には、保留割込みテーブル１５７の５０ビット目のビットが１に設定される。
【００５５】
ＩＲＲテーブル１５８は、発生した割込みを示す割込みベクトルを登録するためのテーブルである。ＩＲＲテーブル１５８は、複数（例えば、２５６）のビットで構成されたビットテーブルであり、各ビットが、発生する可能性のある各割込みベクトルと対応している。例えば、発生した割込みを示す割込みベクトルが５０（０ｘ３２）である場合には、ＩＲＲテーブル１５８の５０ビット目のビットが１に設定される。
【００５６】
ＩＳＲテーブル１５９は、ゲストプログラム１００に報告している割込みを示す割込みベクトルを登録するためのテーブルである。ＩＳＲテーブル１５９は、複数（例えば、２５６）のビットで構成されたビットテーブルであり、各ビットが、発生する可能性のある各割込みベクトルと対応している。例えば、ゲストプログラム１００に報告している割込みを示す割込みベクトルが５０（０ｘ３２）である場合には、ＩＳＲテーブル１５９の５０ビット目のビットが１に設定される。
【００５７】
転送先ＬＰＡＲ１８０は、ライブマイグレーションが終了する際においては、転送元ＬＰＡＲ１５０と同様な構成となる。なお、転送先ＬＰＡＲ１８０は、転送元ＬＰＡＲ１５０が、停止するまで、動作しないように管理される。また、同様に、転送先ＬＰＡＲ１８０により構築される転送先仮想計算機１０７及び転送先仮想計算機１０７上で動作するゲストプログラム１０３についても、転送元ＬＰＡＲ１５０が停止するまで、動作しないで、待機しておくように管理される。
【００５８】
転送元シャドウＬＰＡＲ１６０は、Ｌプロセッサプログラム１６１と、ＬＰＡＲプログラム１６３と、ＥＰＴ１６４と、ＩＲＲテーブル１６５と、ＩＳＲテーブル１６６とを含む。転送元シャドウＬＰＡＲ１６０の各構成は、上述した保留に関わる動作を行わないこと以外は、転送元ＬＰＡＲ１５０の同名の構成と同様な処理を行う。また、転送先シャドウＬＰＡＲ１７０は、転送元シャドウＬＰＡＲ１６０と同様な構成である。
【００５９】
次に、実施形態に係るライブマイグレーションについて説明する。
【００６０】
ライブマイグレーションにおいては、ゲストプログラム１００を転送先物理計算機２０１に複製することで、ゲストプログラム１００が転送先物理計算機２０１に移動したかのように見せる。この際に、転送元ＬＰＡＲ１５０が管理している転送元仮想計算機１０４のゲストメモリ１０９等の状態を、徐々に、転送先物理計算機２０１の転送先仮想計算機１０７に反映することで、仮想的に転送元仮想計算機１０４が移動したかのように見せる。
【００６１】
図２は、実施形態に係る転送元の物理計算機上で動作するプログラムにより実行される処理のフローチャートである。同図においては、ライブマイグレーションにおける処理、すなわち、転送元仮想計算機１０４の複製処理を、各プログラム単位のフローチャートとして示している。
【００６２】
まず、図２の一番右側のフローチャートを参照して、割込みプログラム１５２による処理について説明する。
【００６３】
割込みプログラム１５２は、転送元物理計算機２００の割込み要求が上がるまで、待機する（ステップＳ１００）。この待機中は、物理プロセッサ２０１が、割込みプログラム１５２を走らせない状態としている。そして、転送元物理計算機２００から割込み要求が上がると、物理プロセッサ２１０が割込みプログラム１５２に制御を渡して、割込みプログラム１５２を起こす。
【００６４】
物理プロセッサ２１０から起こされた割込みプログラム１５２は、転送元物理計算機２００からの割込みを受け付け（ステップＳ１０１）、割込み先ＬＰＡＲを特定する（ステップＳ１０２）。割込み先ＬＰＡＲ (例えば、転送元ＬＰＡＲ１５０または転送元シャドウＬＰＡＲ１６０)の特定方法は、割込み種類（割込みベクトルの番号)によって異なる。
【００６５】
ここでは、以下に、ＨＢＡ２１２に係る割込みを例として説明する。ＨＢＡ２１２へ要求を行う際には、Ｌプロセッサプログラム１５１が、どのＮＰＩＶ（HBA vport)への要求なのかを示すＩＤを付けて要求を行うと、要求に対する応答時には、ＨＢＡ２１２の特定レジスタに要求時のＩＤが格納されていので、当該ＩＤに基づいて、どのＮＰＩＶの応答なのかを把握することができるようになっている。そこで、ＨＢＡ２１２へ要求をかける前に、ＬＰＡＲ（例えば、転送元ＬＰＡＲ１５０または転送元シャドウＬＰＡＲ１６０)ごとに、使用するＨＡＢ仮想ポート（HBA vport）のＩＤを対応付けておけば、ＨＢＡ２１２の特定のレジスタに格納されたＩＤに基づいて、応答時に割込みを報告すべきＬＰＡＲを特定することができる。
【００６６】
割込み先ＬＰＡＲを特定した後に、割込みプログラム１５２は、ゲストプログラム１００へのその割込みの報告を保留すべきか否かを判定する（ステップＳ１０３）。
【００６７】
具体的には、割込みプログラム１５２は、割込みの報告対象のゲストプログラム１００が動作している転送元仮想計算機１０４のゲストメモリ１０９の中で、転送先仮想計算機１０７に反映されていない領域を確認し、反映していない領域のデータが、ライブマイグレーション用のデータ転送路（マイグレーション用転送路）を使用して、所定時間以内に転送先仮想計算機１０７に転送可能かを判定し、所定時間以内に転送可能である場合には、報告を保留する必要がないと判定し、所定時間以内に転送可能でない場合には、報告を保留すべきと判定する。
【００６８】
ここで、判定の基準となる所定時間としては、ライブマイグレーション時にゲストプログラム１００、１０３が停止しても問題ない時間、すなわち、ゲストプログラム１００，１０３の実質的な実行に問題ない時間を５００ｍｓと仮定した場合には、ゲストプログラム１００の停止中にゲストメモリ１０９の内容を転送先仮想計算機１０７に反映することができる時間（例えば１００ｍｓ）として良い。なお、ゲストプログラム１００、１０３が停止しても問題ない時間としては、ストレージ２３１のディスクシーク時間や、ＯＳ内のタイムアウト時間などを考慮し、ゲストプログラム１００、１０３がタイムアウト検出によって停止することがない時間であって良い。
【００６９】
ステップＳ１０３の判定により、報告を保留すべきと判定した場合（ステップＳ１０３でＹｅｓ）には、割込みプログラム１５２は、保留割込みテーブル１５７に、保留する割込みを示す割込みベクトルを登録し（保留割込みテーブル１５７の割込みベクトルに対応するビットを１に設定し）、保留データテーブル１５６に、ＤＭＡにより更新されたデータ長（更新データ長）と、このときの時刻（保留時刻）とを保存する（ステップＳ１０４）。例えば、保留時刻としては、x86系プロセッサを使用している場合には、TSC (time stamp counter)を使用することができる。また、更新データ長としては、HBA212のようなSCSIデバイスを使用している場合には、ゲストプログラム１００が、Fibre channel protocol for SCSI規格で定められているFCP_DL field (FCP data length field)に設定した値から求めることができる。
【００７０】
なお、以前に保留している割込みがある場合には、割込みプログラム１５２は、保留データテーブル１５６に記録している更新データ長に新たに保留する割込みに対応する更新データ長を加算した加算後の更新データ長を、新たな更新データ長として記録し、保留時刻は、前回記録した保留時刻のまま値を変えない。
【００７１】
一方、ステップＳ１０３の判定により、報告を保留する必要がないと判定した場合（ステップＳ１０３でＮｏ）には、割込みプログラム１５２は、保留データテーブル１５６に保留している割込みがあるか否か確認し（ステップＳ１０５）、保留している割込みがある場合には、保留データテーブル１５６の保留時刻と現在の時刻との差分から、保留時間を算出する。
【００７２】
割込みプログラム１５２は、保留データテーブル１５６の更新データ長を、算出した保留時間で割った値と、マイグレーション用転送路の帯域とを比較する。比較の結果、保留データテーブル１５６の更新データ長を、算出した保留時間で割った値が、マイグレーション用転送路の帯域よりも大きい場合には、割込みプログラム１５２は、保留している割込みの保留を続ける。一方、保留データテーブル１５６の更新データ長を、算出した保留時間で割った値が、マイグレーション用転送路の帯域よりも小さいか、または、等しい場合には、割込みプログラム１５２は、保留されている割込みが、後述するステップＳ１０７で、ゲストプログラム１００に報告すべき割込みがあると判定される割込みであると認識する。なお、保留時間が、ゲストプログラム１００による割込みタイムアウト時間よりも大きくなる前に、割込みの保留を解除しなくてはならないので、割込みプログラム１５２は、更新データ長を保留時間で割った値と、マイグレーション用の転送路の帯域の値との比較に関係なく、ゲストプログラム１００のタイムアウト時間となる前に、ゲストプログラム１００に割込みを上げるようにしている。
【００７３】
ライブマイグレーションでは、後述するステップＳ３０４でゲストメモリ１０９の領域に書込み保護を実施した後において、ゲストプログラム１００がゲストメモリ１０９に更新をかけたページについては、転送先物理計算機２０１の転送先仮想計算機１０７に反映して、ゲストプログラム１００、１０３にとって、転送元仮想計算機１０４と、転送先仮想計算機１０７とを同じ状態とする必要がある。このような状態にするために、ライブマイグレーションの実行中には、ＤＭＡによるゲストメモリ１０９の更新についても転送先物理計算機２０１の転送先仮想計算機１０７のゲストメモリ１４１に反映させる必要がある。
【００７４】
そこで、本実施形態では、割込みプログラム１５２は、転送元物理計算機２００から割込みプログラム１５２に上げられるＤＭＡ完了の割込み時に、ＨＢＡ２１２にゲストプログラム１００が教えているＤＭＡテーブルを解析して、ＤＭＡにより更新されるゲストメモリ１０９の領域の先頭アドレスと、領域の大きさとを特定し、この領域の更新内容を転送先仮想計算機１０７のゲストメモリ１４１に反映できるようにするために、当該更新の内容を記録するようにしている。すなわち、割込みプログラム１５２は、割込みを保留する場合であっても、保留しない場合であっても、割込みがＤＭＡ完了の割込みである場合には、更新されたゲストメモリ１０９の領域を、ＥＰＴ１５４に記録する（ステップＳ１０６）。更新されたゲストメモリ１０９の領域についてのＥＰＴ１５４への記録方法は、物理プロセッサ２１０がゲストメモリ１０９に書込みを行う場合における記録方法と同様であるため、後に併せて説明する。
【００７５】
次いで、割込みプログラム１５２は、ゲストプログラム１００に報告すべき割込みがあるか否かを確認する（ステップＳ１０７）。例えば、上述したように、保留データテーブル１５６の更新データ長を保留時間で割った値が、マイグレーション用転送路の帯域よりも小さいかまたは、等しい場合には、ステップＳ１０７でゲストプログラム１００に報告すべき割込みがあると判定するように認識されているので、報告すべき割込みがあると判定される。ここで、保留データテーブル１５６の更新データ長を保留時間で割った値が、マイグレーション用転送路の帯域よりも小さいかまたは、等しい場合とは、保留している割込みに対応するゲストメモリ１０９の更新されたデータのデータ量が、未反映のデータがゲストメモリ１０９に滞留することなく転送先物理計算機２０１に転送できるデータ量であることを意味している。
【００７６】
この結果、ゲストプログラム１００に報告すべき割込みがある場合（ステップＳ１０７でＹｅｓ）には、割込みプログラム１５２は、報告すべき割込みを示す割込みベクトルに対応するＩＲＲテーブル１５８のビットを１に設定することにより、割込みの報告の要求を行う（ステップＳ１０８）。なお、割込みプログラム１５２は、報告すべき割込みを示す割込みベクトルに対応するＩＲＲテーブル１５８のビットを１に設定する場合には、当該割込みベクトルに対応する保留割込みテーブル１５７のビットを０に設定する。
【００７７】
この結果、ステップＳ２０７において、Ｌプロセッサプログラム１５１に割込みが受信されることとなる。なお、ゲストプログラム１００に報告すべき割込みがない場合（ステップＳ１０７でＮｏ）には、ゲストプログラム１００は、処理をステップＳ１００に進める。
【００７８】
ここで、ゲストプログラム１００からＬプロセッサプログラム１５１に制御が移った際に、仮想プロセッサ１０８の割込みフラグが、割込み許可になっている場合には、Ｌプロセッサプログラム１５１が、ＩＲＲテーブル１５８の各ビットを確認し、ビットが１に設定されている場合には、１に設定されているビットに対応する割込みベクトルのうちの最も優先度が高い割込みベクトルに対応するＩＳＲテーブル１５９のビットを１に設定し、ＩＳＲテーブル１５９のビットを１に設定した割込みベクトルに対応するＩＲＲテーブル１５８のビットを０に設定する。そして、Ｌプロセッサプログラム１５１が、ゲストプログラム１００に制御を移す際に、ＩＳＲテーブル１５９の１に設定されているビットに対応する割込みベクトルが示す割込みに対する処理を実行するためのゲストプログラム１００の割込みハンドラーに制御が移るようにする。
【００７９】
次に、ＨＢＡ２１２のＤＭＡ帯域制御方法について説明する。なお、ＤＭＡ帯域制御方法は、ゲストメモリ１０９に対する書込みの帯域を制御する方法の一例である。
【００８０】
図３は、実施形態に係るＨＢＡ転送処理を説明する第１の図である。図４は、実施形態に係るＨＢＡ転送処理を説明する第２の図である。
【００８１】
図３は、ＨＢＡ２１２のＤＭＡ帯域制御を行う場合における各構成の関係を示し、図４は、ＨＢＡ２１２のＤＭＡ帯域制御を行わない場合における各構成の関係を示している。
【００８２】
ゲストプログラム１００は、ＳＣＳＩコマンドをＨＢＡ２１２に要求する際には、要求（リクエスト）を出す前に、ＨＢＡ２１２に対するリクエストを格納するためのリクエストキュー７０１のゲストメモリ１０９における先頭アドレスとリクエストキュー７０１の大きさと、をＨＢＡ２１２に設定する。また、ゲストプログラム１００は、ＨＢＡ２１２からの応答（レスポンス）を格納するためのレスポンスキュー７０２のゲストメモリ１０９における先頭アドレスとレスポンスキュー７０２の大きさと、をＨＢＡ２１２に設定する。
【００８３】
ここで、リクエストキュー７０１及びレスポンスキュー７０２について説明する。
【００８４】
図７は、実施形態に係るＨＢＡのリクエストキューを説明する第１の図である。図８は、実施形態に係るＨＢＡのレスポンスキューを説明する第１の図である。図９は、実施形態に係るＨＢＡのリクエストキューを説明する第２の図である。図１０は、実施形態に係るＨＢＡのレスポンスキューを説明する第２の図である。
【００８５】
ゲストプログラム１００を実行するプロセッサ２１０は、図７に示すように、ＨＢＡ２１２に実行させるリクエストをリクエストキュー７０１の最後尾のリクエストの次の空領域に格納する。一方、ＨＢＡ２１２は、図７に示すように、リクエストキュー７０１の先頭のリクエストを取得し、このリクエストに対応するデータをストレージ２３１から取得する処理を実行する。
【００８６】
また、ＨＢＡ２１２は、リクエストを処理した結果であるレスポンスを、図８に示すように、レスポンスキュー７０２の最後尾のレスポンスの次の空領域に格納する。一方、ゲストプログラム１００を実行するプロセッサ２１０は、レスポンスに対する報告を受け取っている場合には、レスポンスキュー７０２の先頭のレスポンスを取得する。
【００８７】
図３の説明に戻り、割込みプログラム１５２は、ＨＢＡ２１２からレスポンスの割込みを受信すると（図２のステップＳ１０１）、このレスポンスの報告を保留すべきか否かを判定し（図２のステップＳ１０３）、その結果、報告を保留すべきと判定した場合（図２のステップＳ１０３でＹｅｓ）には、保留割込みテーブル１５７に、レスポンスに対応する割込みベクトルを登録する（割込みテーブル１５７の割込みベクトルに対応するビットに１を設定する）とともに、保留データテーブル１５６に更新データ長と、保留時刻とを記録する。
【００８８】
この結果、割込みプログラム１５２により、図２のステップＳ１０７で、ゲストプログラム１００に報告すべき割込みがあると判定されるまで、保留割込みテーブル１５７に登録された割込みベクトルに対応するＩＲＲ１５８のビットが１に設定されることがなく、ＩＳＲ１５９のこの割込みベクトルに対応するビットが１に設定されることがない。
【００８９】
これにより、ゲストプログラム１００を実行するプロセッサ２１０に対して、この割込みベクトルが示すレスポンスについての報告が行われないので、ゲストプログラム１００は、レスポンスキュー７０２からレスポンスを取り出さない。したがって、ゲストプログラム１００が取得するデータの実質的な帯域を減少することができる。
【００９０】
このようなレスポンスについての割込みの報告の保留回数が多くなると、図１０に示すように、用意されているレスポンスキュー７０２がレスポンスで一杯になってしまう。この結果、ＨＢＡ２１２は、リクエストを処理した処理結果であるレスポンスをレスポンスキュー７０２に格納することができなくなってしまうので、ＨＢＡ２１２は、リクエストキュー７０１から新たなリクエストを取得することを停止する。
【００９１】
このように、ＨＢＡ２１２がリクエストキュー７０１からリクエストを取得することを停止すると、この後、図９に示すように、リクエストキュー７０１がリクエストで一杯になってしまう。この結果、ゲストプログラム１００によるリクエストが停止することとなる。
【００９２】
このように、ＤＭＡ完了のレスポンスの報告を保留して遅らせることで、ＤＭＡの実質的な転送帯域を制御して、ＤＭＡ転送によるゲストメモリ１０９への書込みの転送帯域を低減することができる。
【００９３】
一方、ステップＳ１０３の判定の結果、報告を保留すべきでないと判定した場合（図２のステップＳ１０３でＮｏ）には、図２のステップＳ１０７で、ゲストプログラム１００に報告すべき割込みがあると判定されることとなるので、図４に示すように、割込みプログラム１５２は、レスポンスの報告を示す割込みベクトルに対応するＩＲＲ１５８のビットを１に設定する。これにより、この後、ＩＳＲ１５９のこの割込みベクトルに対応するビットが１に設定され、ゲストプログラム１００にレスポンスの報告がされることとなり、ゲストプロラグム１００を実行するプロセッサ２１０が、レスポンスキュー７０２の先頭のレスポンスを取得する。
【００９４】
図５は、実施形態に係るＤＭＡデータ転送量および平均ＤＭＡデータ転送量の関係を説明する第１の図である。図６は、実施形態に係るＤＭＡデータ転送量および平均ＤＭＡデータ転送量の関係を説明する第２の図である。
【００９５】
図５は、図４に示すように、割込みの保留制御を行っていない場合におけるＤＭＡデータ転送量および平均ＤＭＡデータ転送量の関係を示し、図６は、図３に示すように、割込みの保留制御を行った場合におけるＤＭＡデータ転送量および平均ＤＭＡデータ転送量の関係を示している。ここで、図５及び図６においては、横軸に時間をとり、その軸上においてＨＢＡ２１２による割込み（ＨＢＡ  ＩＮＴ）と、プロセッサ２１０によるタイマ割込み（Ｔｉｍｅｒ  ＩＮＴ）との発生時点を示している。ＨＢＡ  ＩＮＴは、リクエストを処理した後に、割込みプログラム１５２にレスポンスを報告する場合に発生する。タイマ割込みは、例えば、所定の時間毎に発生する。このタイマ割込みは、ゲストプログラム１００に対して割込みを報告する際の契機となる。
【００９６】
図５及び図６においても、ＨＢＡ２１２が１つのリクエストを処理する毎にゲストメモリ１０９にＤＭＡ転送するデータ転送量（ＤＭＡデータ転送量）は、同じデータ量となっている。
【００９７】
図５においては、割込みプログラム１５２がレスポンスについてのＨＢＡ  ＩＮＴを受けた場合に、各タイマ割込みによりレスポンスをゲストプログラム１００に報告し、ＨＢＡ２１２により次のＤＭＡ転送が行われる。したがって、単位時間当たりのＤＭＡデータ転送量を示す平均ＤＭＡデータ転送量は、図５に示すようになる。
【００９８】
ここで、ライブマイグレーションを実行している場合には、ライブマイグレーション用転送路の帯域（すなわち、通信速度）よりも平均ＤＭＡデータ転送量が小さければ、ゲストメモリ１０９におけるＤＭＡ転送で更新されたデータの全てを、転送先物理計算機２０１の転送先仮想計算機１０７のゲストメモリ１４１に複製することができる。一方、平均ＤＭＡデータ転送量よりもライブマイグレーション用転送路の帯域よりも平均ＤＭＡデータ転送量が大きければ、ゲストメモリ１０９におけるＤＭＡ転送で更新された全てのデータを、転送先物理計算機２０１の転送先仮想計算機１０７のゲストメモリ１４１に複製することができず、一部のデータが転送元物理計算機２００（具体的には、ゲストメモリ１０９）に滞留してしまうこととなる。
【００９９】
図６においては、割込みプログラム１５２がレスポンスについてのＨＢＡ  ＩＮＴを受けた場合に、ゲストプログラム１００へのＨＢＡ  ＩＮＴの報告を保留する場合がある。これにより、リクエストキュー７０１にリクエストが溜まり、レスポンスキュー７０２にレスポンスが溜まることとなり、ＤＭＡ転送の実行が一時的に停止される。したがって、平均ＤＭＡデータ転送量は、図６に示すように、図５の平均ＤＭＡデータ転送量よりも低くなる。これにより、割込み保留制御を行わないと、ＤＭＡ転送で更新された全てのデータを、転送先物理計算機２０１の転送先仮想計算機１０７に複製することができない場合であっても、割込み保留制御を行うことにより、ＤＭＡ転送で更新された全てのデータを、転送先物理計算機２０１の転送先仮想計算機１０７に適切に複製することができるようになる。
【０１００】
以上に、ＤＭＡ転送における帯域制御方法を説明した。
【０１０１】
次に、物理プロセッサ２１０によるゲストメモリ１０９のデータの更新時における書込みの帯域制御方法を説明する。
【０１０２】
ライブマイグレーションでは、ゲストプログラム１００、１０３が動作していない時間を短くすることで、ゲストプログラム１００、１０３が停止していないように、すなわち実質的に動作しているように見せている。実施形態では、実質的に動作しているように見せるために、ゲストプログラム１００の停止時間が５００ｍｓ以下となるようにしている。
【０１０３】
ゲストプログラム１００の停止時間を短くしているので、ライブマイグレーション中に、ゲストプログラム１００が動作することとなり、ゲストプログラム１００によりゲストメモリ１０９の内容が書き換えられることがある。ライブマイグレーションにおいては、このように書き換えられたゲストメモリ１０９の内容も、転送先物理計算機２０１上の転送先仮想計算機１０７のゲストメモリ１４１に反映させる必要がある。
【０１０４】
更に、ゲストプログラム１００がゲストメモリ１０９に対して更新できないようにした後において、転送先仮想計算機１０７に反映させるために送信するデータ量を、少なくする必要がある。
【０１０５】
ゲストプログラム１００がゲストメモリ１０９に対して更新できないようにした後において送信するデータ量としては、本実施形態では、例えば、１００ｍｓ以内で転送先物理計算機２０１に転送できる量としている。
【０１０６】
また、ゲストメモリ１０９以外のＬＰＡＲプログラム１５３の内部状態（転送元仮想計算機１０４を構成するためのプログラム内部で保存している変数やデータの値)の転送や、その他の割込み停止処理等は、停止時間（５００ｍｓ）−ゲストメモリ１０９に関するデータの転送時間（１００ｍｓ）＝４００ｍｓ以内に収まるようにしている。
【０１０７】
図２の説明に戻り、ＬＰＡＲプログラム１５３による処理を説明する。ＬＰＡＲプログラム１５３による処理は、図２の右から２番目のフローチャートである。
【０１０８】
転送元のＬＰＡＲプログラム１５３は、転送元ＬＰＡＲムーバ１０１からライブマイグレーション開始指示（図２のステップＳ４００）を受けると、ゲストメモリ１０９に対する書込み保護を行う。具体的には、ＬＰＡＲプログラム１５３は、転送元仮想計算機１０４上で動作しているゲストプログラム１００がゲストメモリ１０９へ書込みしようとした領域が分かるように、書込み例外を物理プロセッサ２１０に報告し、ゲストプログラム１００からＬプロセッサプログラム１５１に制御が切り替わるようにする（ステップＳ３００）。
【０１０９】
ここで、物理プロセッサ２１０、２２０が管理するＥＰＴ（１５４、１６４、１７４、１８４）について説明する。
【０１１０】
物理プロセッサ２１０、２２０は、ＥＰＴ（１５４、１６４、１７４、１８４）に、仮想計算機（１０４、１０５、１０６、１０７）上で動作するプログラム（１００、１０１、１０２、１０３）が使用するゲストメモリ（１０９、１２１、１３１、１４１）のアドレス（ゲストアドレス：プログラムが、認識しているメモリやデバイス等の番地)と、ハイパバイザ（１９０、１９１）が使用するアドレス（ハイパバイザアドレス：ハイパバイザが認識しているメモリやデバイス等の番地)との対応関係を定義する。すなわち、ＥＰＴ（１５４、１６４、１７４、１８４）を用いることにより、ゲストアドレスをハイパバイザアドレスに変換することができる。
【０１１１】
図１２は、実施形態に係るＥＰＴを説明する図である。なお、図１２は、４ＫＢ単位で、ゲストアドレスと、ハイパバイザアドレスとを変換する場合におけるＥＰＴを示している。
【０１１２】
ＥＰＴ（１５４、１６４、１７４、１８４）は、図１２に示すように、複数段（例えば、４段）の複数のテーブルにより構成されている。なお、ＥＰＴ１５４、１６４、１７４、１８４の構成は同様であるので、以下は、ＥＰＴ１５４を例に説明する。ＥＰＴ１５４は、上位段のテーブルから順に、ＥＰＴ  ＰＭＬ４テーブル３０２と、１以上のＥＰＴ  ＰＤＰテーブル３０３と、１以上のＥＰＴ  ＰＤテーブル３０４と、１以上のＥＰＴ  ＰＴテーブル３０５とを有する。また、ＥＰＴ１５４は、ＥＰＴＰ（extended page table pointer）３０１を有する。
【０１１３】
ＥＰＴＰ３０１は、ＥＰＴ  ＰＭＬ４テーブル３０２が格納されている先頭ハイパバイザアドレス（ハイパバイザアドレスの１２ビット目から５１ビット目までのビット群のみ)を格納する。なお、ハイパバイザアドレスの５２ビット目から６３ビット目は０であり、０ビット目から１１ビット目はオフセット（ゲストメモリ３００の０ビット目から１１ビット目のビット群と同じ）であるので、ＥＰＴＰ３０１に格納されたハイパバイザアドレスの１２ビット目から５１ビット目までのビット群から、ハイパバイザアドレスを特定することができる。
【０１１４】
各段のテーブル（３０２、３０３、３０４、３０５）は、それぞれ１つが、例えば、４ＫＢの大きさであり、各テーブルには、例えば、５１２個のエントリ（登録行）が格納される。各テーブルにおけるエントリを示すインデックスの大きさは、エントリが５１２個であるので、９ビットとなっている。
【０１１５】
各テーブルの５１２個のエントリの内で、ハイパバイザアドレス３０６への変換のために使用するエントリは、ゲストアドレス３００の所定の範囲に格納されているインデックスに基づいて特定される。ＥＰＴ  ＰＭＬ４テーブル３０２のインデックス（ＥＰＴ  ＰＭＬ４テーブルインデックス）は、ゲストアドレス３００の４７ビット目から３９ビット目までのビット群であり、ＥＰＴ  ＰＤＰテーブル３０３のインデックス（ＥＰＴ  ＰＤＰテーブルインデックス）は、ゲストアドレス３００の３８ビット目から３０ビット目までのビット群であり、ＥＰＴ  ＰＤテーブル３０４のインデックス（ＥＰＴ  ＰＤテーブルインデックス）は、ゲストアドレス３００の２９ビット目から２１ビット目までのビット群であり、ＥＰＴ  ＰＴテーブル３０５のインデックス（ＥＰＴ  ＰＴテーブルインデックス）は、ゲストアドレス３００の２０ビット目から１２ビット目までのビット群である。
【０１１６】
ＥＰＴ  ＰＭＬ４テーブル３０２の各エントリには、当該エントリを指し示すＥＰＴ  ＰＭＬ４テーブルインデックスを含むゲストアドレスの変換時に参照すべき、ＥＰＴ  ＰＤＰテーブル３０３の先頭ハイパバイザアドレス（ハイパバイザアドレスの１２ビット目から５１ビット目までのビット群)が格納されている。
【０１１７】
また、ＥＰＴ  ＰＤＰテーブル３０３の各エントリには、当該エントリを指し示すＥＰＴ  ＰＤＰテーブルインデックスを含むゲストアドレスの変換時に参照すべき、ＥＰＴ  ＰＤテーブル３０４の先頭ハイパバイザアドレス（ハイパバイザアドレスの１２ビット目から５１ビット目までのビット群)が格納されている。
【０１１８】
また、ＥＰＴ  ＰＤテーブル３０４の各エントリには、当該エントリを指し示すＥＰＴ  ＰＤテーブルインデックスを含むゲストアドレスの変換時に参照すべき、ＥＰＴ  ＰＴテーブル３０５の先頭ハイパバイザアドレス（ハイパバイザアドレスの１２ビット目から５１ビット目までのビット群)が格納されている。
【０１１９】
図１３は、実施形態に係るＥＰＴ中のＥＰＴ  ＰＴテーブルのエントリを説明する図である。
【０１２０】
ＥＰＴ  ＰＴテーブル３０５の各エントリには、当該エントリを指し示すＥＰＴ  ＰＴテーブルインデックスを含むゲストアドレスに対応するハイパバイザアドレス（ハイパバイザアドレスの１２ビット目から５１ビット目までのビット群)が格納されている。
【０１２１】
また、ＥＰＴ  ＰＴテーブル３０５のエントリ（ＥＰＴ  ＰＴエントリ）４００の１ビット目は、当該エントリが示す領域に対するデータの書込みを許可するか否かを示すビットである。このビットが０である場合には、当該エントリが示す領域は書込み保護の対象（書込み不許可）であることを意味しており、ゲストプログラム１００がゲストメモリ１０９の対応する領域に書込みを実施しようとした際には、物理プロセッサ２１０に書込み例外が報告され、ゲストプログラム１００からＬプロセッサプログラム１５３に制御が移される。ただし、書込み例外を物理プロセッサ２１０に報告するのは、ゲストメモリ１０９のうち、ＥＰＴ  ＰＴエントリ４００で変換することのできるゲストアドレスに対応する４ＫＢの空間（ページ）に書込みを行った場合である。図２のステップＳ３００において、ＬＰＡＲプログラム１５３によりＥＰＴ  ＰＴエントリ４００の１ビット目に０が設定される。
【０１２２】
更に、本実施形態では、ＥＰＴ  ＰＴエントリ４００における、物理プロセッサ２１０、２２０が無視するＥＰＴ１５４の無視ビット（ignore bit）に、以下に示す情報を埋め込むようにしている。なお、無視ビットは、物理プロセッサ２１０、２２０に無視されるビットであるので、その値を１にしても、０にしても、物理プロセッサ２１０、２２０の動作に影響を及ぼさない。
【０１２３】
ゲストアドレスには、ゲストメモリ（１０９、１２１、１３１、１４１）を示すアドレスと、ＨＢＡ（２１２、２２３）やＮＩＣ（２１３、２２２）のレジスタなどのＭＭＩＯ（memory mapped input output：ゲストアドレス空間に割り当てられた入出力装置)を示すアドレスとの２種類がある。
【０１２４】
実施形態においては、ＭＭＩＯ領域よりもゲストメモリ領域の方が、はるかに大きな領域である。また、データ更新量の多いゲストプログラム１００、１０３があるので、ゲストメモリ領域は、ＭＭＩＯ領域よりもデータの更新量が多い。そこで、本実施形態では、ゲストメモリ領域について帯域制限を行うようにしている。
【０１２５】
ＥＰＴ１５４には、ゲストメモリ領域と、ＭＭＩＯ領域とのそれぞれが割り当てられている。ＥＰＴ１５４におけるアドレスに、どちらの領域が割り当てられているのかは、ＥＰＴ１５４が取り扱うハイパバイザアドレスとゲストアドレスとから判定する方法も考えられる。しかしながら、本実施形態では、ゲストメモリ領域であることがＥＰＴ１５４の情報だけで容易且つ迅速に分かるように、ＥＰＴ１５４のエントリにおける無視ビットを、ゲストメモリ領域であるのか、それともＭＭＩＯ領域（又は、未定義領域）であるのかを示すためのビットとしている。
【０１２６】
本実施形態では、図１３に示すようにＥＰＴ  ＰＴエントリ４００の６２ビット目を、ゲストメモリ領域であるのか、それともＭＭＩＯ領域（又は、未定義領域）であるのかを示すためのビットとしている。本実施形態では、ビットが１である場合には、ゲストメモリ領域であることを示し、０である場合には、ＭＭＩＯ領域（又は、未定義の領域）であることを示す。
【０１２７】
更に、本実施形態では、ＥＰＴ１５４のエントリの無視ビットを、ゲストプログラム１００によるゲストメモリ１０９が示す領域への更新が転送先仮想計算機１０７へ反映されていないか否かを示すビットとしている。
【０１２８】
本実施形態では、図１３に示すように、ＥＰＴ  ＰＴエントリ４００の６３ビット目を、更新が転送先仮想計算機１０７へ反映されているのか否かを示すビットとしている。本実施形態では、ビットが１である場合には、当該エントリに対応する領域の更新が転送先仮想計算機１０７に反映されていないことを示し、０である場合には、当該エントリに対応する領域の更新が反映されている、または、ライブマイグレーションを実施していないことを示す。なお、ＥＰＴ  ＰＴエントリ４００の６３ビット目のビットは、ＤＭＡ転送によりゲストメモリ１０９へ書込みが行われた場合にも、同様に、その書込みによる更新が転送先仮想計算機１０７に反映されていないことを示すために使用される。
【０１２９】
以上、４ＫＢ単位で、ゲストアドレスと、ハイパバイザアドレスとを変換する場合を説明したが、例えば、２ＭＢ単位で、ゲストアドレスと、ハイパバイザアドレスとを変換するようにしてもよい。この場合におけるＥＰＴ１５４には、ＥＰＴ  ＰＴテーブル３０５を備えなくてよい。また、ＥＰＴ  ＰＤテーブル３０４のエントリを、以下のようにすれば良い。
【０１３０】
図１４は、実施形態に係るＥＰＴ中のＥＰＴ  ＰＤテーブルのエントリを説明する図である。図１４は、２ＭＢ単位で、ゲストアドレスと、ハイパバイザアドレスとを変換する場合におけるＥＰＴ  ＰＤテーブルのエントリを示している。
【０１３１】
ＥＰＴ  ＰＤテーブル３０４のエントリ（ＥＰＴ  ＰＤエントリ）４０１の７ビット目には、１が格納され、２１ビット目から５１ビット目までには、当該エントリを指し示すＥＰＴ  ＰＤテーブルインデックスを含むゲストアドレスに対応するハイパバイザアドレス（ハイパバイザアドレスの２１ビット目から５１ビット目までのビット群)が格納されている。なお、ゲストアドレスに対応するハイパバイザアドレスは、５２ビット目から６３ビット目は０となり、０ビット目から２０ビット目はオフセット（ゲストメモリ３００の０ビット目から２０ビット目のビット群と同じ）となり、２０ビット目から５１ビット目は、ＥＰＴ  ＰＤテーブル３０４で参照したエントリに含まれている２１ビット目から５１ビット目までのビット群となる。
【０１３２】
ＥＰＴ  ＰＤエントリ４０１の１ビット目は、エントリに対応する領域に書込みを許可するか否かを示すビットである。このビットが０である場合には、エントリに対応する領域は書込み保護の対象（書込み不許可）であることを意味しており、ゲストプログラム１００がゲストメモリ１０９のその領域に書込みを実施した際には、物理プロセッサ２１０に書込み例外が報告され、ゲストプログラム１００からＬプロセッサプログラム１５３に制御が移される。ただし、書込み例外を物理プロセッサ２１０に報告するのは、ゲストメモリ１０９のうち、ＥＰＴ  ＰＤエントリ４０１で変換することのできるゲストアドレスの２ＭＢの空間（ページ）に書込みを行った場合である。
【０１３３】
更に、ＥＰＴ  ＰＤエントリ４０１の６２ビット目を、ゲストメモリ領域であるのか、それともＭＭＩＯ領域（又は、未定義領域）であるのかを示すためのビットとしている。本実施形態では、ビットが１である場合には、ゲストメモリ領域であることを示し、０である場合には、ＭＭＩＯ領域（又は、未定義の領域）であることを示す。
【０１３４】
更に、ＥＰＴ  ＰＤエントリ４０１の６３ビット目を、エントリに対応する領域の更新が転送先仮想計算機１０７へ反映されているのか否かを示すビットとしている。本実施形態では、ビットが１である場合には、エントリに対応する領域の更新が反映されていないことを示し、０である場合には、エントリに対応する領域の更新が反映されている、または、ライブマイグレーションを実施していないことを示す。なお、ＥＰＴ  ＰＤエントリ４０１の６３ビット目のビットは、ＤＭＡによりゲストメモリ１０９へ書込みが行われた場合にも、同様に、エントリに対応する領域の更新が転送先仮想計算機１０７に反映されていないことを示すために使用される。
【０１３５】
図２の説明に戻り、ステップＳ３００でＥＰＴ１５４に書込み不許可設定をした後には、物理プロセッサ２１０（Ｌプロセッサプログラム１５１）は、ゲストアドレスと、ハイパバイザアドレスとの変換結果を一時的に記憶している記憶装置（EPT cache)を無効化する（ステップＳ２０１）。
【０１３６】
また、ステップＳ３００でＥＰＴ１５４に書込み不許可設定をした後には、ＬＰＡＲプログラム１５３は、以下に示すように、実ＨＢＡ仮想ポート１１１と、ダミーＨＢＡ仮想ポート１１２との切替を行う（ステップＳ３０１）。
【０１３７】
実ＨＢＡ仮想ポート１１１と、ダミーＨＢＡ仮想ポート１１２との切替を詳細に説明する。
【０１３８】
図１７は、実施形態に係る実ＨＢＡ仮想ポートの使用時における、ゲストアドレスと、ハイパバイザアドレスとの対応関係を示す図である。図１８は、実施形態に係るダミーＨＢＡ仮想ポートの使用時における、ゲストアドレスと、ハイパバイザアドレスとの対応関係を示す図である。
【０１３９】
図１７に示すように、実ＨＢＡ仮想ポート１１１を使用している際には、ゲストメモリ１０９には、実ＨＢＡ仮想ポート１１１に関する制御情報を格納する実仮想ポート制御テーブル５００が格納されている。また、ダミーＨＢＡ仮想ポート１１２に関する制御情報を格納するダミー仮想ポート制御テーブル５０１は、ハイパバイザメモリ２１１のゲストメモリ１０９と異なる領域に格納されている。
【０１４０】
ここで、ステップＳ３００でＥＰＴ１５４に書込み不許可設定をした後には、ゲストプログラム１００がＨＢＡ２１２の実仮想ポート制御テーブル５００へ書込みしたことを物理プロセッサ２１０により検出できる。
【０１４１】
まず、ＬＰＡＲプログラム１５３は、ダミーＨＢＡ仮想ポート１１２の状態を、ＦＣ−ＳＷ２３０へログイン（login）している実ＨＢＡ仮想ポート１１１の仮想ポートリンク状態と同じ状態にした後に、実仮想ポート制御テーブル５００への書込みを検出できる状態にし、ゲストプログラム１００からの書込みがない間に、実仮想ポート制御テーブル５００の内容をダミー仮想ポート制御テーブル５０１へ全て複製する。
【０１４２】
次いで、ＬＰＡＲプログラム１５３は、ダミー仮想ポート制御テーブル５０１と実仮想ポート制御テーブル５００との内容が等しい間に、ＥＰＴ１５４を書き換えて、実仮想ポート制御テーブル５００のゲストアドレスに対応するハイパバイザアドレスが、図１８に示すように、ダミー仮想ポート制御テーブル５０１のハイパバイザアドレスに対応するように切り替える。
【０１４３】
このゲストアドレスと、ハイパバイザアドレスとの対応関係の切り替えにより、ゲストプログラム１００が実仮想ポート制御テーブル５００と認識しているゲストメモリ領域を、ＨＢＡ２１２がダミー仮想ポート制御テーブル５０１と認識している領域に置き換えることができる。
【０１４４】
このようにすることで、ゲストプログラム１００は、実仮想ポート制御テーブル５００に要求を出したと認識しているが、実際にはダミー仮想ポート制御テーブル５０１に要求を出すことなり、ゲストプログラム１００に認識されることなく、実ＨＢＡ仮想ポート１１１からダミーＨＢＡ仮想ポート１１２へデータの流れを切り替えることができる。
【０１４５】
ここで、上記のようにハイパバイザ１９０がＥＰＴ１５４を操作することより、ポートを切り替える際には、ＨＢＡ２１２の実仮想ポート制御テーブル５００の内容と、ダミー仮想ポート制御テーブル５０１の内容を同じ状態にして切り替える必要がある。ゲストプログラム１００により、実仮想ポート制御テーブル５００へ書込みが行われると、実仮想ポート制御テーブル５００の内容を、ダミー仮想ポート制御テーブル５０１へ複製しなおさなくてはならない。
【０１４６】
そこで、ゲストプログラム１００がゲストメモリ１０９への書込みの帯域制御を行うのと同様に、実仮想ポート制御テーブル５００への書込みの帯域制御を行う。この書込みの帯域制御の処理を、図２を参照して説明する。
【０１４７】
ステップＳ２００で実行されているゲストプログラム１００がゲストメモリ１０９に書込みを実施すると、書込み対象の領域は書込み保護(書込み不許可)とされていれば、Ｌプロセッサプログラム１５１に制御が移り、書込みが検出される（ステップＳ２０２)。
【０１４８】
書込みを検出したＬプロセッサプログラム１５１は、ゲストアドレスを４ＫＢ単位で管理している場合には、書込み対象の領域に対応するＥＰＴ  ＰＴエントリ４００の６３ビット目（ゲストアドレスを２ＭＢ単位で管理している場合には、ＥＰＴ  ＰＤエントリ４０１の６３ビット目）のビットに、書込み保護中に書込みがあったことを示す１を記録する(ステップＳ２０３)。
【０１４９】
ステップＳ２０３の後、Ｌプロセッサプログラム１５１は、転送先物理計算機２０１に反映されていない領域のデータ量と、規定時間（例えば、１００ｍｓ)以内にデータを転送先物理計算機２０１に送り出せる量とを比較する（ステップＳ２０４）。この比較結果が、反映されていない領域のデータ量の方が大きい場合には、Ｌプロセッサプログラム１５１は、この領域を書込み不許可のままにし、当該領域のゲストアドレスと、このときの時刻（例えば、tsc)を保留データテーブル１５６に記録する。さらに、Ｌプロセッサプログラム１５１は、自身を休止状態（プログラム内の命令を物理プロセッサ２１０で実行させない状態)にする（ステップＳ２０６)。
【０１５０】
休止状態にあるＬプロセッサプログラム１５１は、タイマによる定期的に上がる割込みやＨＢＡ２１２から上がる割込みなどで、起こされる（ステップＳ２０７）。割込みで起こされたＬプロセッサプログラム１５１は、割込みを報告するために、ゲストプロセッサ１００に制御を返す（ステップＳ２００）。
【０１５１】
ゲストプログラム１００に割込みを報告する処理をした後に、ゲストプログラム１００が書込み不許可領域に書込みを行うと、再びＬプロセッサプログラム１５１に制御が渡される（ステップＳ２０２)。この後、Ｌプロセッサプログラム１５１は、今回の時刻tscと、以前に実行したステップＳ２０４で保留データテーブル１５６に記録しておいた時刻tscとの差を求める（ステップＳ２０４）。
この差が、４ＫＢのデータを転送先物理計算機２０１へ十分転送可能な時間である場合には、Ｌプロセッサプログラム１５１は、反映されていない領域に対応するＥＰＴ  ＰＴエントリ４００の１ビット目について、書込み不許可を解除して、書込み可能に変更する(ステップＳ２０５)。例えば、イーサネットスイッチ２３２を介した転送路を、１Ｇｂｐｓの理論転送帯域を持つ転送路とする場合、４０ｕｓ以上であれば、４ＫＢのデータを十分転送可能であるので、差が４０ｕｓ以上であれば、十分転送可能な時間であると判定する。
【０１５２】
更に、ＤＭＡによる書込みと、ゲストプログラム１００に仮想的に見せている仮想プロセッサ１０８の数を考慮にいれる必要がある。
【０１５３】
本実施形態では、Ｌプロセッサプログラム１５１は、ＤＭＡによる書込み終了割込みを保留している仮想プロセッサ１０８の数を数え、４０ｕｓに対して保留している仮想プロセッサ１０８の数を掛け合わせた値を算出し、算出した当該値に４０ｕｓを足した値を十分転送可能な時間の基準としている。
【０１５４】
また、割込みを保留してから十分な時間が経過していない場合においても、ゲストプログラム１００がタイマ割込みの処理をしないとゲストプログラム１００の時刻を狂わす原因となる可能性があるので、Ｌプロセッサプログラム１５１は、ゲストプログラム１００が割込み処理中であると認識できる場合は、書込み不許可を解除してゲストプログラム１００に制御を移すようにしている。
【０１５５】
図１５は、実施形態に係るゲストプログラムによるゲストメモリへの書込み処理を説明する第１の図である。図１６は、実施形態に係るゲストプログラムによるゲストメモリへの書込み処理を説明する第２の図である。図１５は、ゲストメモリ１０９への書込みの帯域制御を行っている場合の状態を示し、図１６は、ゲストメモリ１０９への書込みの帯域制御を行っていない場合の状態を示す。
【０１５６】
ここで、ゲストプログラム１００が割込み処理中であることは、図１５に示すように、データを記録していたゲストアドレスと、ゲストプログラム１００からＬプロセッサプログラム１５１に切り替わる原因を作ったゲストアドレスとが不一である場合、仮想プロセッサ１０８に割込み禁止状態フラグ６００が設定されている場合、又はＩＳＲテーブル１５９の割込みベクトルに対応するビットが０でない場合から判定することができる。割込み禁止状態フラグ６００は、ゲストプログラム１００が設定し、フラグ（flag）が１の場合には、割込み報告が可能な状態を示し、フラグが０の場合には、割込み報告を禁止している状態を示している。割込み禁止状態フラグ６００は、Ｌプロセッサプログラム１５１が保持している内部変数であり、ゲストプログラム１００には、仮想プロセッサ１０８の内部レジスタとして仮想的に見せている。
【０１５７】
なお、ゲストアドレステーブル１５５、保留割込みテーブル１５７、ＩＲＲテーブル１５８、ＩＳＲテーブル１５９は、ゲストプログラム１００に仮想的に見せる仮想プロセッサ１０８の数分用意しているので、割込みを保留している仮想プロセッサ１０８の数の判定や、仮想プロセッサ１０８ごとの割込みの制御を行うことができる。
【０１５８】
上記のように、書込みが発生した領域について書込み不許可状態から書込み可能状態にする時間を制御することで、一定時間内にゲストプログラム１００がゲストメモリ１０９へ書き込むデータ量の帯域を制御（例えば、データ量の帯域を低減）することができる。
【０１５９】
引き続いて、図２のステップＳ３０１以降の処理について説明する。
【０１６０】
ＬＰＡＲプログラム１５３は、ステップＳ３０１で、使用する仮想ポートを切り替えた後に、ダミーＨＢＡ仮想ポート１１２のリンク状態（ＦＣ−ＳＷ２３０にloginし、ＬＵへの読み書きが可能である状態など)を転送先物理計算機２０１に転送する前に、仮想ポートのリンク状態を転送する際には、ゲストメモリ１０９への書込みを検出する必要がないので、この間、ゲストメモリ１０９に対する書込み保護を解除する（ステップＳ３０２）。なお、この書込み保護の解除時にも、ＥＰＴ１５４を書き換えるので、物理プロセッサ２１０（Ｌプロセッサプログラム１５１）はゲストアドレスと、ハイパバイザアドレスとの変換結果を一時的に記憶しているキャッシュを無効化する（ステップＳ２０１)。
【０１６１】
仮想ポートのリンク情報を転送した後、ゲストメモリ１０９を転送先仮想計算機１０７に反映する必要があるので、ＬＰＡＲプログラム１５３は、反映できていないゲストメモリ領域を検出するために、再びＥＰＴ１５４の設定を変えて、ゲストメモリ領域を書込み不許可な状態（書込み保護状態）にし、ゲストプログラム１００によるゲストメモリ１０９への更新を検知できる状態とする（ステップＳ３０４)。
【０１６２】
次に、ＬＰＡＲプログラム１５３は、全てのゲストメモリ１０９のデータを転送先仮想計算機１０７に送り出し、次に、書き換えがあった領域、すなわち、ＥＰＴ  ＰＴエントリ４００又はＥＰＴ  ＰＤエントリ４０１の６３ビット目が１になっている領域のデータを、転送先仮想計算機１０７に送り出す（ステップＳ３０５）。このステップＳ３０５では、ＬＰＡＲプログラム１５３は、ＥＰＴ  ＰＴエントリ４００又はＥＰＴ  ＰＤエントリ４０１の６３ビット目が１であり、且つ、書込み不許可状態（すなわち、１ビット目が０である）である領域については、データを転送中に書き換えがなかったと判断できるので、ＥＰＴ  ＰＴエントリ４００又はＥＰＴ  ＰＤエントリ４０１の６３ビット目を１から０に変更する。
【０１６３】
ＬＰＡＲプログラム１５３から、ゲストメモリ１０９への転送要求を受けたＬＰＡＲムーバ１０１は、ライブマイグレーションで使用する転送路（例えば、イーサネットスイッチ２３２を介した転送路）へデータを送信する（ステップＳ４０１）。
【０１６４】
ステップＳ３０５でゲストメモリ１０９の全領域を一通り転送し終わった後に、ＬＰＡＲプログラム１５３は、転送先仮想計算機１０７に反映されていないデータのデータ量と、ライブマイグレーションで使用する転送路の帯域とを比較し、反映されていないデータを１００ｍｓ以内に転送可能であるか否かを判定する（ステップＳ３０６）。
【０１６５】
この結果、転送可能と判定した場合（ステップＳ３０６でＹｅｓ）には、ＬＰＡＲプログラム１５３は、ゲストメモリ１０９からのデータ転送（メモリ転送）を終了し、転送元ＬＰＡＲムーバ１０１に、メモリ転送が終了したことを知らせる（ステップＳ３０７）。転送元ＬＰＡＲムーバ１０１は、メモリ転送終了を受け付ける（ステップＳ４０２)。
【０１６６】
次いで、ＬＰＡＲプログラム１５３は、Ｌプロセッサプログラム１５１へ、プログラムの停止要求をする（ステップＳ３０８）。ここで、Ｌプロセッサプログラム１５１を停止するとは、Ｌプロセッサプログラム１５１を、命令の実行を行えない状態とするとともに、割込みプログラム１５２からの割込み要求に対しても、再びゲストプログラム１００を実行させない状態とすることである。
【０１６７】
ＬＰＡＲプログラム１５３から停止要求を受けたＬプロセッサプログラム１５１は、停止状態に入る（ステップＳ２０８）。このように、Ｌプロセッサプログラム１５１が停止状態である間は、ゲストプログラム１００も動けないので、ゲストメモリ１０９への更新は行われない。更に、ＤＭＡによるゲストメモリ１０９への書込みについても、新たなＤＭＡ転送の要求がなくなるので、ＨＢＡ２１２などへの外部装置に出されたＤＭＡ要求に対する応答が全て報告されれば、ゲストメモリ１０９への書込みが行われなくなる。
【０１６８】
このゲストメモリ１０９への書込みが一切なくなった状態で、ＬＰＡＲプログラム１５３は、転送先仮想計算機１０７に反映されていないゲストメモリ領域のデータを転送する要求を転送元ＬＰＡＲムーバ１０１に渡す（ステップＳ３０９)。ここで、ステップＳ３０９で対象とするデータには、仮想的にゲストプログラム１００に見せている実ＨＢＡ仮想ポート１１１の状態やＶＮＩＣ１１０等のデバイス状態のデータも含まれる。このステップＳ３０９の対象とする全てのデータの転送を終えると、転送先物理計算機２０１には、転送元ＬＰＡＲ１５０と同じ内容の転送先ＬＰＡＲ１８０が存在することとなる。
【０１６９】
データの転送要求を受けた転送元ＬＰＡＲムーバ１０１は、ライブマイグレーション用の転送路へデータを転送する（ステップＳ４０３）。
【０１７０】
ＬＰＡＲプログラム１５３は、ステップＳ３０９での全てのデータの転送を終えると、データ送信完了を送信元ＬＰＡＲムーバ１０１に報告する（ステップＳ３１０)。
【０１７１】
データ送信完了の報告を受けた送信元ＬＰＡＲムーバ１０１は、転送先物理計算機２０１に複製したＬプロセッサプログラム１８１を起動させる等のＬＰＡＲ起動要求を転送先ＬＰＡＲムーバ１０２に送信する（ステップＳ４０４）。このＬＰＡＲ起動要求により、転送先物理計算機２０１には、転送先仮想計算機１０７が構築され、ゲストプログラム１０３が実行されることとなる。
【０１７２】
転送先ＬＰＡＲムーバ１０２が、転送先のＬプロセッサプログラム１８１の起動をかけた後に、転送元ＬＰＡＲムーバ１０１は、終了要求をＬＰＡＲプログラム１５３に送信する。ＬＰＡＲプログラム１５３は、使用していたメモリの開放やダミーＨＢＡ仮想ポート１１２の使用停止などの終了処理を実行し、終了処理要求をＬプロセッサプログラム１５１に送信し、自身を停止する（ステップＳ３１１）。Ｌプロセッサプログラム１５１は、終了処理要求を受信すると（ステップＳ２０９）、使用していたメモリの開放などの終了処理を実行し（ステップＳ２１０）、自身を停止する。
【０１７３】
次に、転送先の物理計算機２０１の処理動作を説明する。
【０１７４】
図１１は、実施形態に係る転送先物理計算機上で動作するプログラムにより実行される処理のフローチャートである。
【０１７５】
転送先物理計算機２０１では、転送先ＬＰＡＲムーバ１０２が転送元物理計算機２００からライブマイグレーションの開始を受け取ると、ＬＰＡＲプログラム１８３に、転送先ＬＰＡＲ１８０の作成を依頼する（ステップＳ５１０）。
【０１７６】
作成依頼を受けたＬＰＡＲプログラム１８３は、転送先ＬＰＡＲ１８０を作成する（ステップＳ５００）。この時点では、転送先ＬＰＡＲ１８０は、転送元ＬＰＡＲ１５０と同じ内容及び状態となっていない。すなわち、この後、転送先ＬＰＡＲ１８０がゲストプログラム１０３（ゲストプログラム１００の複製）に提供する実ＨＢＡ仮想ポート１４３の状態、及びゲストメモリ１４１の内容の全てを、転送元ＬＰＡＲ１５０がゲストプログラム１００に提供していた内容及び状態と等しくするための処理が行われる。
【０１７７】
転送先ＬＰＡＲ１８０のこれらの状態及び内容を等しくするために、転送元物理計算機２００から転送路を介して送られるデータを転送先ＬＰＡＲムーバ１０２が受信し（ステップＳ５１１)、ＬＰＡＲプログラム１８３が受信したデータを、実ＨＢＡ仮想ポート１４３の状態として反映する（ステップＳ５０１）とともに、ゲストメモリ１４１の内容として反映する（ステップＳ５０２）。
【０１７８】
上述したように、転送元仮想計算機１０４と同一の複製とする転送先仮想計算機１０７を作成するために必要な全てのデータを転送先物理計算機２０１に送り終えると、転送元ＬＰＡＲムーバ１０１は、転送先ＬＰＡＲムーバ１０２にＬＰＡＲ起動要求を投げる（ステップＳ４０４）ので、転送先ＬＰＡＲムーバ１０２は、ＬＰＡＲ起動要求を受信すると、ＬＰＡＲプログラム１８３に、Ｌプロセッサプログラム１８１を起動するように要求する（ステップＳ５１２)。ＬＰＡＲプログラム１８３は、転送先ＬＰＡＲムーバ１０２から起動要求を受け取ると、Ｌプロセッサプログラム１８１に開始要求を送信する（ステップＳ５０３）。ここで、Ｌプロセッサプログラム１８１は、転送先ＬＰＡＲ１８０の作成時から、プログラム停止状態（ステップＳ２０８）として待機している。
【０１７９】
Ｌプロセッサプログラム１８１は、ＬＰＡＲプログラム１８３から開始要求を受けると、停止状態から動作を開始し、その後、ゲストプログラム１０３に制御を変える（ステップＳ２００)。この後、Ｌプロセッサプログラム１８１は、転送元のＬプロセッサプログラム１５１のステップＳ２０７と同様な処理を行う。
【０１８０】
なお、転送先の割込みプログラム１７２は、転送元の割込みプログラム１５２における帯域制御に関わる処理以外の処理と同様な処理（ステップＳ１００、Ｓ１０１、Ｓ１０２、Ｓ１０７、Ｓ１０８）を行う。これにより、転送先物理計算機２０１において、転送元仮想計算機１０４と同一の転送先仮想計算機１０７が構築されて動作し、転送先仮想計算機１０７がゲストプログラム１０１と同じゲストプログラム１０３を実行することとなる。これにより、転送元物理計算機２００の仮想計算機が、転送先物理計算機２０１に移動されたこととなる。
【０１８１】
なお、本発明は上記した実施形態に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施形態は本発明を分かりやすく説明するために説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。
【符号の説明】
【０１８２】
１００、１０３  ゲストプログラム、１０１  転送元ＬＰＡＲムーバ、１０２  転送先ＬＰＡＲムーバ、１０４  転送元仮想計算機、１０５  転送元シャドウ仮想計算機、１０６  転送先仮想計算機、１０７  転送先シャドウ仮想計算機、２００  転送元物理計算機、２０１  転送先物理計算機、２２０  ＦＣ−ＳＷ、２３１  ストレージ、２３３  イーサネットスイッチ。
【図１】
0005658197.tif 000002
【図２】
0005658197.tif 000003
【図３】
0005658197.tif 000004
【図４】
0005658197.tif 000005
【図５】
0005658197.tif 000006
【図６】
0005658197.tif 000007
【図７】
0005658197.tif 000008
【図８】
0005658197.tif 000009
【図９】
0005658197.tif 000010
【図１０】
0005658197.tif 000011
【図１１】
0005658197.tif 000012
【図１２】
0005658197.tif 000013
【図１３】
0005658197.tif 000014
【図１４】
0005658197.tif 000015
【図１５】
0005658197.tif 000016
【図１６】
0005658197.tif 000017
【図１７】
0005658197.tif 000018
【図１８】
0005658197.tif 000019