(57)【要約】  計算機（１０１）は、移行元のメモリ（１１０）を構成するメモリブロック（１１０−１）〜（１１０−４）の中から、任意のメモリブロック（１１０−ｉ）を選択する。計算機（１０１）は、メモリブロック（１１０−ｉ）のデータ（ｄｉ）のハッシュ値（ｈｉ）を計算機（１０２）に送信する。計算機（１０２）は、移行先のメモリ（１２０）を構成するメモリブロック（１２０−ｊ）ごとに、メモリブロック（１２０−ｊ）に記憶されているデータ（Ｄｊ）のハッシュ値（Ｈｊ）と、データ（ｄｉ）のハッシュ値（ｈｉ）とを比較する。計算機（１０２）は、比較結果を計算機（１０１）に送信する。計算機（１０１）は、比較結果に基づいて、移行先の記憶領域（１２０）に対するデータ（ｄｉ）の複写の要否を判定する。計算機（１０１）は、データ（ｄｉ）の複写が必要な場合、データ（ｄｉ）を計算機（１０２）に送信する。
2012081099.tif 000002
【特許請求の範囲】
【請求項１】
計算機間のデータ移行を行う移行先の計算機に、
移行元のメモリを構成するいずれかのメモリブロックに記憶されている移行元データのハッシュ値を移行元の計算機から受信する第１の受信工程と、
移行先のメモリを構成するメモリブロックごとに、当該メモリブロックに記憶されている移行先データのハッシュ値と、前記第１の受信工程によって受信された前記移行元データのハッシュ値とを比較する比較工程と、
前記比較工程によって比較された比較結果を前記移行元の計算機に送信する送信工程と、
前記送信工程によって前記比較結果が送信された結果、前記移行先データのハッシュ値と不一致となったハッシュ値の算出元の前記移行元データを前記移行元の計算機から受信する第２の受信工程と、
を実行させることを特徴とするデータ移行プログラム。
【請求項２】
前記第１の受信工程は、
複数の異なるハッシュ関数を用いて算出された前記移行元データの複数のハッシュ値を前記移行元の計算機から受信し、
前記比較工程は、
前記複数の異なるハッシュ関数に含まれるハッシュ関数ごとに、当該ハッシュ関数を用いて算出された、前記移行先データのハッシュ値と、前記第１の受信工程によって受信された前記移行元データのハッシュ値とを比較し、
前記第２の受信工程は、
前記複数の異なるハッシュ関数を用いて算出された前記移行先データの複数のハッシュ値の少なくともいずれかのハッシュ値と不一致となったハッシュ値の算出元の前記移行元データを、前記移行元の計算機から受信することを特徴とする請求項１に記載のデータ移行プログラム。
【請求項３】
前記第１の受信工程は、
さらに、所定の抽出ルールに基づいて前記移行元データから抽出された部分データを前記移行元の計算機から受信し、
前記比較工程は、
前記移行先データのハッシュ値と前記移行元データのハッシュ値とが一致する場合、さらに、前記抽出ルールに基づいて前記移行先データから抽出された部分データと、前記第１の受信工程によって受信された前記移行元データの部分データとを比較し、
前記第２の受信工程は、
前記移行先データの部分データと不一致となった部分データの抽出元の前記移行元データを前記移行元の計算機から受信することを特徴とする請求項１に記載のデータ移行プログラム。
【請求項４】
前記移行先の計算機に、
前記移行先データのハッシュ値と前記移行元データのハッシュ値とが一致する場合、前記移行先の計算機と前記移行元の計算機との間の双方向の通信路のうち通信品質の高い通信路を選択する選択工程を実行させ、
前記送信工程は、
前記選択工程によって前記移行先の計算機から前記移行元の計算機の方向の通信路が選択された場合、所定の抽出ルールに基づいて前記移行先データから抽出された部分データを前記移行元の計算機に送信し、
前記第２の受信工程は、
前記送信工程によって前記移行先データの部分データが送信された結果、前記移行先データの部分データと不一致の部分データの抽出元の前記移行元データを前記移行元の計算機から受信することを特徴とする請求項１に記載のデータ移行プログラム。
【請求項５】
前記送信工程は、
前記選択工程によって前記移行先の計算機から前記移行元の計算機の方向の通信路が選択された場合、前記移行先データを前記移行元の計算機に送信し、
前記第２の受信工程は、
前記送信工程によって前記移行先データが送信された結果、前記移行先データと不一致の前記移行元データを前記移行元の計算機から受信することを特徴とする請求項４に記載のデータ移行プログラム。
【請求項６】
前記比較工程は、
前記移行先データのハッシュ値と前記移行元データのハッシュ値とが一致する場合、さらに、前記移行先の計算機および前記移行元の計算機がアクセス可能なストレージ内の、前記移行先データを記憶する記憶領域のアドレスと、前記移行元データを記憶する記憶領域のアドレスとを比較し、
前記第２の受信工程は、
前記移行先データを記憶する記憶領域のアドレスと不一致のアドレスの記憶領域に記憶されている前記移行元データを前記移行元の計算機から受信することを特徴とする請求項１に記載のデータ移行プログラム。
【請求項７】
計算機間のデータ移行を行う移行元の計算機に、
移行元のメモリを構成するメモリブロックごとに、当該メモリブロックに記憶されている移行元データのハッシュ値を移行先の計算機に送信する第１の送信工程と、
前記第１の送信工程によって送信された前記移行元データのハッシュ値と、移行先のメモリを構成する各メモリブロックに記憶されている移行先データごとのハッシュ値との比較結果を、前記移行先の計算機から受信する受信工程と、
前記受信工程によって受信された比較結果に基づいて、前記移行先のメモリに対する前記移行元データの複写の要否を判定する判定工程と、
前記判定工程によって複写が必要であると判定された場合、前記移行元データを前記移行先の計算機に送信する第２の送信工程と、
を実行させることを特徴とするデータ移行プログラム。
【請求項８】
計算機間のデータ移行を行う移行先の計算機に、
移行先のメモリを構成する各メモリブロックに記憶されている移行先データごとのハッシュ値を移行元の計算機に送信する送信工程と、
前記送信工程によって前記移行先データごとのハッシュ値が送信された結果、前記移行先データごとのハッシュ値と不一致のハッシュ値の算出元の移行元データを、前記移行元の計算機から受信する受信工程と、
を実行させることを特徴とするデータ移行プログラム。
【請求項９】
計算機間のデータ移行を行う移行元の計算機に、
移行先のメモリを構成する各メモリブロックに記憶されている移行先データごとのハッシュ値を移行元の計算機から受信する受信工程と、
移行元のメモリを構成するメモリブロックごとに、当該メモリブロックに記憶されている移行元データのハッシュ値と、前記受信工程によって受信された前記移行先データごとのハッシュ値とを比較する比較工程と、
前記比較工程によって比較された比較結果に基づいて、前記移行先のメモリに対する前記移行元データの複写の要否を判定する判定工程と、
前記判定工程によって複写が必要であると判定された場合、前記移行元データを前記移行先の計算機に送信する送信工程と、
を実行させることを特徴とするデータ移行プログラム。
【請求項１０】
計算機間のデータ移行を行う移行元の計算機に、
移行元のメモリを構成するメモリブロックごとに、当該メモリブロックに記憶されている移行元データの属性情報に基づいて、移行先のメモリに対する前記移行元データの複写の要否を判定する判定工程と、
前記判定工程によって複写が必要であると判定された場合、前記移行元データを移行先の計算機に送信する送信工程と、
を実行させることを特徴とするデータ移行プログラム。
【請求項１１】
前記移行元の計算機に、
前記移行元データの属性情報に基づいて、当該移行元データを記憶する前記メモリブロックが使用されていない空きのメモリブロックか否かを判断する判断工程をさらに実行させ、
前記判定工程は、
前記判断工程によって空きのメモリブロックではないと判断された場合、前記移行元データの複写が必要であると判定することを特徴とする請求項１０に記載のデータ移行プログラム。
【請求項１２】
前記判断工程は、
前記移行元データの属性情報に基づいて、前記移行先の計算機がアクセス可能な記憶装置に前記移行元データが記憶されているか否か判断し、
前記判定工程は、
前記判断工程によって前記記憶装置に前記移行元データが記憶されていないと判断された場合、前記移行元データの複写が必要であると判定することを特徴とする請求項１１に記載のデータ移行プログラム。
【請求項１３】
前記判断工程は、
前記移行元データの属性情報に基づいて、前記移行元のメモリとは異なる他の記憶領域に前記移行元データがバックアップされているか否か判断し、
前記判定工程は、
前記判断工程によってバックアップされていないと判断された場合、前記移行元データの複写が必要であると判定することを特徴とする請求項１２に記載のデータ移行プログラム。
【請求項１４】
前記判断工程は、
前記移行元データの属性情報に基づいて、当該移行元データを記憶する前記メモリブロックが初期化されているか否かを判断し、
前記判定工程は、
前記判断工程によって初期化されていないと判断された場合、前記移行元データの複写が必要であると判定することを特徴とする請求項１３に記載のデータ移行プログラム。
【請求項１５】
計算機間のデータ移行を行う移行先の計算機において、
移行元のメモリを構成するいずれかのメモリブロックに記憶されている移行元データのハッシュ値を移行元の計算機から受信する第１の受信部と、
移行先のメモリを構成するメモリブロックごとに、当該メモリブロックに記憶されている移行先データのハッシュ値と、前記第１の受信部によって受信された前記移行元データのハッシュ値とを比較する比較部と、
前記比較部によって比較された比較結果を前記移行元の計算機に送信する送信部と、
前記送信部によって前記比較結果が送信された結果、前記移行先データのハッシュ値と不一致となったハッシュ値の算出元の前記移行元データを前記移行元の計算機から受信する第２の受信部と、
を備えることを特徴とする計算機。
【請求項１６】
計算機間のデータ移行を行う移行元の計算機において、
移行元のメモリを構成するメモリブロックごとに、当該メモリブロックに記憶されている移行元データのハッシュ値を移行先の計算機に送信する第１の送信部と、
前記第１の送信部によって送信された前記移行元データのハッシュ値と、移行先のメモリを構成する各メモリブロックに記憶されている移行先データごとのハッシュ値との比較結果を、前記移行先の計算機から受信する受信部と、
前記受信部によって受信された比較結果に基づいて、前記移行先のメモリに対する前記移行元データの複写の要否を判定する判定部と、
前記判定部によって複写が必要であると判定された場合、前記移行元データを前記移行先の計算機に送信する第２の送信部と、
を備えることを特徴とする計算機。
【請求項１７】
計算機間のデータ移行を行う移行先の計算機において、
移行先のメモリを構成する各メモリブロックに記憶されている移行先データごとのハッシュ値を移行元の計算機に送信する送信部と、
前記送信部によって前記移行先データごとのハッシュ値が送信された結果、前記移行先データごとのハッシュ値と不一致のハッシュ値の算出元の移行元データを、前記移行元の計算機から受信する受信部と、
を備えることを特徴とする計算機。
【請求項１８】
計算機間のデータ移行を行う移行元の計算機において、
移行先のメモリを構成する各メモリブロックに記憶されている移行先データごとのハッシュ値を移行元の計算機から受信する受信部と、
移行元のメモリを構成するメモリブロックごとに、当該メモリブロックに記憶されている移行元データのハッシュ値と、前記受信部によって受信された前記移行先データごとのハッシュ値とを比較する比較部と、
前記比較部によって比較された比較結果に基づいて、前記移行先のメモリに対する前記移行元データの複写の要否を判定する判定部と、
前記判定部によって複写が必要であると判定された場合、前記移行元データを前記移行先の計算機に送信する送信部と、
を備えることを特徴とする計算機。
【請求項１９】
計算機間のデータ移行を行う移行元の計算機において、
移行元のメモリを構成するメモリブロックごとに、当該メモリブロックに記憶されている移行元データの属性情報に基づいて、移行先のメモリに対する前記移行元データの複写の要否を判定する判定部と、
前記判定部によって複写が必要であると判定された場合、前記移行元データを移行先の計算機に送信する送信部と、
を備えることを特徴とする計算機。
【請求項２０】
計算機間のデータ移行を行う移行先の計算機が、
移行元のメモリを構成するいずれかのメモリブロックに記憶されている移行元データのハッシュ値を移行元の計算機から受信する第１の受信工程と、
移行先のメモリを構成するメモリブロックごとに、当該メモリブロックに記憶されている移行先データのハッシュ値と、前記第１の受信工程によって受信された前記移行元データのハッシュ値とを比較する比較工程と、
前記比較工程によって比較された比較結果を前記移行元の計算機に送信する送信工程と、
前記送信工程によって前記比較結果が送信された結果、前記移行先データのハッシュ値と不一致となったハッシュ値の算出元の前記移行元データを前記移行元の計算機から受信する第２の受信工程と、
を実行することを特徴とするデータ移行方法。
【請求項２１】
計算機間のデータ移行を行う移行元の計算機が、
移行元のメモリを構成するメモリブロックごとに、当該メモリブロックに記憶されている移行元データのハッシュ値を移行先の計算機に送信する第１の送信工程と、
前記第１の送信工程によって送信された前記移行元データのハッシュ値と、移行先のメモリを構成する各メモリブロックに記憶されている移行先データごとのハッシュ値との比較結果を、前記移行先の計算機から受信する受信工程と、
前記受信工程によって受信された比較結果に基づいて、前記移行先のメモリに対する前記移行元データの複写の要否を判定する判定工程と、
前記判定工程によって複写が必要であると判定された場合、前記移行元データを前記移行先の計算機に送信する第２の送信工程と、
を実行することを特徴とするデータ移行方法。
【請求項２２】
計算機間のデータ移行を行う移行先の計算機が、
移行先のメモリを構成する各メモリブロックに記憶されている移行先データごとのハッシュ値を移行元の計算機に送信する送信工程と、
前記送信工程によって前記移行先データごとのハッシュ値が送信された結果、前記移行先データごとのハッシュ値と不一致のハッシュ値の算出元の移行元データを、前記移行元の計算機から受信する受信工程と、
を実行することを特徴とするデータ移行方法。
【請求項２３】
計算機間のデータ移行を行う移行元の計算機が、
移行先のメモリを構成する各メモリブロックに記憶されている移行先データごとのハッシュ値を移行元の計算機から受信する受信工程と、
移行元のメモリを構成するメモリブロックごとに、当該メモリブロックに記憶されている移行元データのハッシュ値と、前記受信工程によって受信された前記移行先データごとのハッシュ値とを比較する比較工程と、
前記比較工程によって比較された比較結果に基づいて、前記移行先のメモリに対する前記移行元データの複写の要否を判定する判定工程と、
前記判定工程によって複写が必要であると判定された場合、前記移行元データを前記移行先の計算機に送信する送信工程と、
を実行することを特徴とするデータ移行方法。
【請求項２４】
計算機間のデータ移行を行う移行元の計算機が、
移行元のメモリを構成するメモリブロックごとに、当該メモリブロックに記憶されている移行元データの属性情報に基づいて、移行先のメモリに対する前記移行元データの複写の要否を判定する判定工程と、
前記判定工程によって複写が必要であると判定された場合、前記移行元データを移行先の計算機に送信する送信工程と、
を実行することを特徴とするデータ移行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ移行を行うデータ移行プログラム、計算機およびデータ移行方法に関する。
【背景技術】
【０００２】
ライブマイグレーションでは、ハードウェア上で動作中の仮想マシンを、ほぼ無停止で他のハードウェアに移動するため、ハードウェア上の仮想マシンが実行中のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）やアプリケーションを、非常に短い停止時間で他のハードウェアに移行することができる。このため、サービスを継続したままハードウェアを保守するといった目的で、ライブマイグレーションが用いられている。【０００３】
また、関連する先行技術として、１台の物理計算機上で動作する仮想マシン間のメモリ共有を行うための技術がある（例えば、下記特許文献１参照。）。また、仮想化環境において、物理資源構成と仮想装置構成を動的に変更するための技術がある（例えば、下記特許文献２参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−３３２０６号公報
【特許文献２】特開２００８−２２５５４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した従来技術では、ライブマイグレーションの際に、移行対象となる仮想マシンに割り当てられているメモリ内容を移行先のハードウェアに複写するため、ハードウェア間のデータの転送量の増大化を招くという問題がある。【０００６】
本発明は、上述した従来技術による問題点を解消するため、計算機間で複写不要なデータの転送を抑止してデータの転送量を削減することができるデータ移行プログラム、計算機およびデータ移行方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するため、開示のデータ移行プログラム、計算機およびデータ移行方法は、移行元のメモリを構成するいずれかのメモリブロックに記憶されている移行元データのハッシュ値を移行元の計算機から受信し、移行先のメモリを構成するメモリブロックごとに、当該メモリブロックに記憶されている移行先データのハッシュ値と、受信された前記移行元データのハッシュ値とを比較し、比較された比較結果を前記移行元の計算機に送信し、前記比較結果が送信された結果、前記移行先データのハッシュ値と不一致となったハッシュ値の算出元の前記移行元データを前記移行元の計算機から受信する。【０００８】
また、上述した課題を解決し、目的を達成するため、開示のデータ移行プログラム、計算機およびデータ移行方法は、移行元のメモリを構成するメモリブロックごとに、当該メモリブロックに記憶されている移行元データのハッシュ値を移行先の計算機に送信し、送信された前記移行元データのハッシュ値と、移行先のメモリを構成する各メモリブロックに記憶されている移行先データごとのハッシュ値との比較結果を、前記移行先の計算機から受信し、受信された比較結果に基づいて、前記移行先のメモリに対する前記移行元データの複写の要否を判定し、複写が必要であると判定された場合、前記移行元データを前記移行先の計算機に送信する。【０００９】
また、上述した課題を解決し、目的を達成するため、開示のデータ移行プログラム、計算機およびデータ移行方法は、移行先のメモリを構成する各メモリブロックに記憶されている移行先データごとのハッシュ値を移行元の計算機に送信し、前記移行先データごとのハッシュ値が送信された結果、前記移行先データごとのハッシュ値と不一致のハッシュ値の算出元の移行元データを、前記移行元の計算機から受信する。【００１０】
また、上述した課題を解決し、目的を達成するため、開示のデータ移行プログラム、計算機およびデータ移行方法は、移行先のメモリを構成する各メモリブロックに記憶されている移行先データごとのハッシュ値を移行元の計算機から受信し、移行元のメモリを構成するメモリブロックごとに、当該メモリブロックに記憶されている移行元データのハッシュ値と、受信された前記移行先データごとのハッシュ値とを比較し、比較された比較結果に基づいて、前記移行先のメモリに対する前記移行元データの複写の要否を判定し、複写が必要であると判定された場合、前記移行元データを前記移行先の計算機に送信する。【００１１】
また、上述した課題を解決し、目的を達成するため、開示のデータ移行プログラム、計算機およびデータ移行方法は、移行元のメモリを構成するメモリブロックごとに、当該メモリブロックに記憶されている移行元データの属性情報に基づいて、移行先のメモリに対する前記移行元データの複写の要否を判定し、複写が必要であると判定された場合、前記移行元データを移行先の計算機に送信する。
【発明の効果】
【００１２】
本データ移行プログラム、計算機およびデータ移行方法によれば、計算機間で複写不要なデータの転送を抑止してデータの転送量を削減することができるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】実施の形態１にかかるデータ移行手法の一実施例を示す説明図である。
【図２】実施の形態２にかかるサーバのハードウェア構成の一例を示すブロック図である。
【図３】実施の形態２にかかるネットワークシステムの一実施例を示す説明図である。
【図４】メモリ管理テーブルの記憶内容の一例を示す説明図（その１）である。
【図５】実施の形態２にかかるサーバの機能的構成を示すブロック図である。
【図６】ハッシュテーブルの記憶内容の一例を示す説明図（その１）である。
【図７】ライブマイグレーションの一例を示す説明図である。
【図８】メモリ管理テーブルの記憶内容の一例を示す説明図（その２）である。
【図９】ハッシュテーブルの記憶内容の一例を示す説明図（その２）である。
【図１０】移行元データおよび移行先データを記憶する共有ストレージの一例を示す説明図である。
【図１１】実施の形態２にかかる移行元のサーバのデータ移行処理手順の一例を示すフローチャートである。
【図１２】実施の形態２にかかる移行先のサーバのデータ移行処理手順の一例を示すフローチャート（その１）である。
【図１３】実施の形態２にかかる移行先のサーバのデータ移行処理手順の一例を示すフローチャート（その２）である。
【図１４】実施の形態２にかかる移行先のサーバのデータ移行処理手順の一例を示すフローチャート（その３）である。
【図１５】メモリブロックテーブルの記憶内容の一例を示す説明図である。
【図１６】実施の形態３にかかるサーバの機能的構成を示すブロック図である。
【図１７】実施の形態３にかかるサーバのデータ移行処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下に添付図面を参照して、この発明にかかるデータ移行プログラム、計算機およびデータ移行方法の好適な実施の形態を詳細に説明する。
【００１５】
（実施の形態１）
図１は、実施の形態１にかかるデータ移行手法の一実施例を示す説明図である。実施の形態１では、移行元のメモリを構成するメモリブロックごとに、メモリブロックに記憶されている移行元データの複写の要否を事前に判定して、複写不要な移行元データの転送を抑止する。
【００１６】
図１において、計算機１０１，１０２は、計算機間のデータ移行を行う機能を有するコンピュータである。ここで、計算機１０１は、移行元のメモリ１１０を備える移行元の計算機である。計算機１０２は、移行先のメモリ１２０を備える移行先の計算機である。
【００１７】
メモリ１１０は、所定のデータ単位で区切られて、メモリブロック１１０−１〜１１０−４に分割されている。メモリ１１０を区切るデータ単位は、任意に設定可能である。例えば、メモリ１１０は、メガバイト単位、ページ単位、ブロック単位で区切られる。１ページは、例えば、４〜６４［ＫＢ（キロバイト）］である。１ブロックは、例えば、複数のページをひとまとめにしたものである。
【００１８】
図１の例では、メモリ１１０を構成するメモリブロック１１０−１〜１１０−４に、移行対象となるデータｄ１〜ｄ４が記憶されている。ここでは、メモリブロック１１０−１〜１１０−４のうち、任意のメモリブロックを「メモリブロック１１０−ｉ」と表記する（ｉ＝１，２，３，４）。また、メモリブロック１１０−ｉに記憶されているデータを「データｄｉ」と表記する。
【００１９】
メモリ１２０は、所定のデータ単位で区切られて、メモリブロック１２０−１〜１２０−９に分割されている。メモリ１２０を区切るデータ単位は、メモリ１１０を区切るデータ単位と同一である。
【００２０】
図１の例では、メモリ１２０を構成するメモリブロック１２０−１〜１２０−９に、データＤ１〜Ｄ９が記憶されている。ここでは、メモリブロック１２０−１〜１２０−９のうち、任意のメモリブロックを「メモリブロック１２０−ｊ」と表記する（ｊ＝１，２，…，９）。また、メモリブロック１２０−ｊに記憶されているデータを「データＤｊ」と表記する。
【００２１】
以下、移行元のメモリ１１０のメモリブロック１１０−１〜１１０−４に記憶されているデータｄ１〜ｄ４を、移行先のメモリ１２０に移行する場合を例に挙げて、実施の形態１にかかるデータ移行手法の一実施例について説明する。
【００２２】
（１）移行元の計算機１０１は、移行元のメモリ１１０を構成するメモリブロック１１０−１〜１１０−４の中から、任意のメモリブロック１１０−ｉを選択する。メモリブロック１１０−ｉの選択処理は、メモリブロック１１０−１〜１１０−４の中から選択されていない未選択のメモリブロックがなくなるまで繰り返し行われる。
【００２３】
（２）移行元の計算機１０１は、選択されたメモリブロック１１０−ｉに記憶されているデータｄｉのハッシュ値（以下、「ハッシュ値ｈｉ」と表記する）を、移行先の計算機１０２に送信する。
【００２４】
ここで、ハッシュ値とは、例えば、算出元となるデータを引数としてハッシュ関数に与えることで算出される固定長の乱数である。ハッシュ関数は、引数として与えられたデータから固定長の疑似乱数を生成する関数である。ハッシュ値の長さは、算出元のデータのビット長より短くなる任意の長さに設定される。
【００２５】
（３）移行先の計算機１０２は、データｄｉのハッシュ値ｈｉを、移行元の計算機１０１から受信する。
【００２６】
（４）移行先の計算機１０２は、移行先のメモリ１２０を構成するメモリブロック１２０−ｊごとに、メモリブロック１２０−ｊに記憶されているデータＤｊのハッシュ値（以下、「ハッシュ値Ｈｊ」と表記する）と、データｄｉのハッシュ値ｈｉとを比較する。なお、図面では、移行先のメモリ１２０の一部を抜粋して表示している。
【００２７】
ここで、ハッシュ値は、算出元のデータが異なれば、同じハッシュ値が算出される確率が非常に低いという特徴を有する。このため、２つのデータｄｉ，Ｄｊのハッシュ値ｈｉ，Ｈｊを比較することで、データｄｉ，Ｄｊの同一性を判断することができる。
【００２８】
図１中、各メモリブロック１１０−ｉ，１２０−ｊを表す□内に示す２ビットの数字は、各データｄｉ，Ｄｊのハッシュ値ｈｉ，Ｈｊを表している。例えば、メモリブロック１１０−１に記憶されているデータｄ１のハッシュ値は「１２」である。また、メモリブロック１２０−１に記憶されているデータＤ１のハッシュ値は「５６」である。
【００２９】
（５）移行先の計算機１０２は、データｄｉのハッシュ値ｈｉとデータＤｊのハッシュ値Ｈｊとの比較結果を、移行元の計算機１０１に送信する。比較結果は、例えば、データｄｉのハッシュ値ｈｉが、全データＤ１〜Ｄ９のハッシュ値Ｈ１〜Ｈ９と一致しなかった、または、ハッシュ値Ｈ１〜Ｈ９のうち少なくともいずれかのハッシュ値Ｈｊと一致したことを表す情報である。
【００３０】
（６）移行元の計算機１０１は、データｄｉのハッシュ値ｈｉと、移行先のメモリ１２０を構成する各メモリブロック１２０−ｊに記憶されているデータＤｊごとのハッシュ値Ｈｊとの比較結果を、移行先の計算機１０２から受信する。
【００３１】
（７）移行元の計算機１０１は、受信した比較結果に基づいて、移行先のメモリ１２０に対するデータｄｉの複写の要否を判定する。ここで、移行元のデータｄｉと移行先のデータＤｊが同一内容のデータであれば、移行先のメモリ１２０に対するデータｄｉの複写は不要となる。
【００３２】
そこで、移行元の計算機１０１が、データｄｉのハッシュ値ｈｉが、データＤ１〜Ｄ９のハッシュ値Ｈ１〜Ｈ９のうち少なくともいずれかのハッシュ値Ｈｊと一致した場合、移行先のメモリ１２０に対するデータｄｉの複写が不要であると判定する。一方、データｄｉのハッシュ値ｈｉが、全データＤ１〜Ｄ９のハッシュ値Ｈ１〜Ｈ９と一致しなかった場合、移行元の計算機１０１が、移行先のメモリ１２０に対するデータｄｉの複写が必要であると判定する。
【００３３】
図１の例では、移行元のデータｄ１のハッシュ値「１２」と移行先のデータＤ２のハッシュ値「１２」が一致する。このため、移行元の計算機１０１が、移行先のメモリ１２０に対するデータｄ１の複写が不要であると判定する。また、移行元のデータｄ４のハッシュ値「７７」と移行先のデータＤ７のハッシュ値「７７」が一致する。このため、移行元の計算機１０１が、移行先のメモリ１２０に対するデータｄ４の複写が不要であると判定する。一方、移行元のデータｄ２，ｄ３は、移行先の全データＤ１〜Ｄ９とハッシュ値が一致しない。このため、移行元の計算機１０１が、移行先のメモリ１２０に対するデータｄ２，ｄ３の複写が必要であると判定する。
【００３４】
（８）移行元の計算機１０１は、データｄｉの複写が必要であると判定された場合、メモリブロック１１０−ｉに記憶されているデータｄｉを、移行先の計算機１０２に送信する。
【００３５】
図１の例では、移行元のデータｄ２，ｄ３の複写が必要であると判定され、移行元のデータｄ１，ｄ４の複写が不要であると判定されている。図１中、「Ｒ」は複写が必要であると判定された判定結果を表し、「ＮＲ」は複写が不要であると判定された判定結果を表している。
【００３６】
このため、移行元の計算機１０１は、移行元のデータｄ１〜ｄ４のうちデータｄ２，ｄ３を、移行先の計算機１０２に送信する。この結果、移行先の計算機１０２において、移行元のデータｄ２，ｄ３が、移行先のメモリ１２０の空き領域に書き込まれる。一方、移行先の計算機１０１から送信されなかった移行元のデータｄ１，ｄ４は、移行先の計算機１０２において、例えば、データｄ１，ｄ４とハッシュ値が同一のデータＤ２，Ｄ７を、移行先のメモリ１２０の空き領域に複写することで生成される。
【００３７】
以上説明した実施の形態１にかかるデータ移行手法によれば、移行元のメモリ１１０を構成するメモリブロック１１０−ｉごとに、メモリブロック１１０−ｉに記憶されているデータｄｉの複写の要否を事前に判定することができる。これにより、移行対象となるデータｄ１〜ｄ４のうち、複写不要なデータｄ１，ｄ４の転送を抑止して、計算機１０１，１０２間のデータの転送量を削減することができる。
【００３８】
（実施の形態２）
実施の形態２では、実施の形態１で説明した計算機１０１，１０２をサーバＳＶ（例えば、後述するサーバＳＶ１，ＳＶ２）に適用した場合について説明する。なお、実施の形態１で説明した内容と同一内容については説明を省略する。
【００３９】
（サーバＳＶのハードウェア構成）
図２は、実施の形態２にかかるサーバのハードウェア構成の一例を示すブロック図である。図２において、サーバＳＶは、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２０１と、メモリ２０２と、ネットワークＩ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０３と、入出力装置２０４と、を備えている。また、各構成部はバス２００によってそれぞれ接続されている。
【００４０】
ここで、ＣＰＵ２０１は、サーバＳＶの全体の制御を司る。メモリ２０２は、データを記憶する記憶装置である。メモリ２０２は、例えば、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）やＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
【００４１】
ネットワークＩ／Ｆ２０３は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２０５に接続され、ネットワーク２０５を介して他のコンピュータに接続される。ネットワークＩ／Ｆ２０３は、ネットワーク２０５と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。ネットワークＩ／Ｆ２０３には、例えば、モデムやＬＡＮアダプタなどを採用することができる。
【００４２】
入出力装置２０４は、データの入出力を行う。入出力装置２０４としては、例えば、文書、画像、機能情報などのデータを表示する表示装置や、文字、数字、各種指示などの入力のためのキーボードなどがある。なお、サーバＳＶは、磁気ディスクや光ディスクなどの記憶装置を備える構成であってもよい。
【００４３】
つぎに、実施の形態２にかかるサーバＳＶを含むネットワークシステム３００について説明する。
【００４４】
（ネットワークシステム３００の一実施例）
図３は、実施の形態２にかかるネットワークシステムの一実施例を示す説明図である。図３において、ネットワークシステム３００は、サーバＳＶ１と、サーバＳＶ２と、を含む構成である。ネットワークシステム３００において、サーバＳＶ１およびサーバＳＶ２は、ネットワーク２０５を介して相互に通信可能に接続されている。
【００４５】
ここで、サーバＳＶ１，ＳＶ２は、ＶＭホストＨＴ１，ＨＴ２を備え、ハードウェア資源を分割して複数の実行環境を構築可能なコンピュータである。ＶＭホストＨＴ１，ＨＴ２は、サーバＳＶ１，ＳＶ２のハードウェア資源（例えば、図２に示したＣＰＵ２０１、メモリ２０２、ネットワークＩ／Ｆ２０３など）を仮想化して、複数の異なるＯＳを実行できるように制御するソフトウェアである。具体的には、例えば、ＶＭホストＨ１，ＨＴ２は、サーバＳＶ１，ＳＶ２のハードウェア資源を分割して構築される実行環境で動作する仮想マシンＶＭによってＯＳを稼働させる。
【００４６】
仮想マシンＶＭは、サーバＳＶ１，ＳＶ２のハードウェア資源を分割して構築される実行環境で動作する仮想的なコンピュータである。仮想マシンＶＭの実体は、具体的には、例えば、プログラムやＯＳなどのソフトウェア、ソフトウェアに与えられる変数、およびソフトウェアを実行させるためのハードウェア資源を指定する情報を含むものである。
【００４７】
図３の例では、サーバＳＶ１のハードウェア資源を分割して構築された実行環境で３台の仮想マシンＶＭ１，ＶＭ２，ＶＭ３が動作している。ＶＭホストＨＴ１は、仮想マシンＶＭ１〜ＶＭ３によって複数の異なるＯＳを稼働させる。また、サーバＳＶ２のハードウェア資源を分割して構築された実行環境で２台の仮想マシンＶＭ４，ＶＭ５が動作している。ＶＭホストＨＴ２は、仮想マシンＶＭ４，ＶＭ５によって複数の異なるＯＳを稼働させる。
【００４８】
仮想マシンＶＭには、各サーバＳＶ１，ＳＶ２の物理メモリ（以下、「物理メモリＰＭ１，ＰＭ２」という）から分割された論理的なメモリが割り当てられている。サーバＳＶ１，ＳＶ２の物理メモリＰＭ１，ＰＭ２は、例えば、図２に示したメモリ２０２である。仮想マシンＶＭのメモリは、ページ単位で区切られて、複数のメモリブロックに分割されている。ページは、ＶＭホストＨＴ１，ＨＴ２が仮想マシンＶＭのメモリを管理するためのデータ単位である。
【００４９】
仮想マシンＶＭのメモリを構成する各メモリブロックは、物理メモリＰＭ１，ＰＭ２を区切って分割されたいずれかのメモリブロックに対応している。各メモリブロックに記憶されているデータは、例えば、ＯＳ、アプリケーションなどのプログラムや、映像、音声などのコンテンツである。
【００５０】
ネットワークシステム３００では、サーバＳＶ間の負荷分散やサーバＳＶの保守を目的として、サーバＳＶ上で動作中の仮想マシンＶＭを、他のサーバＳＶに移行するライブマイグレーションが行われる。ライブマイグレーションを行う場合、移行対象となる仮想マシンＶＭに割り当てられているメモリの内容を移行先のサーバＳＶに複写する。
【００５１】
ここで、仮想マシンＶＭに割り当てられているメモリの全内容を移行先のサーバＳＶに複写すると、サーバＳＶ間のデータの転送量の増大化を招いてしまう。また、移行先のサーバＳＶのメモリ２０２にデータを複写する場合、移行先のサーバＳＶのバス２００を介して、データの複写が行われる。このため、ネットワーク２０５を介して接続されているストレージ装置などにデータを複写する場合に比べて転送コストが高くなる。
【００５２】
そこで、実施の形態２では、仮想マシンＶＭのメモリを構成するメモリブロックごとに、メモリブロックに記憶されているデータの、移行先のサーバＳＶに対する複写の要否を事前に判定して、データの転送量を削減する。
【００５３】
以下の説明では、サーバＳＶ上で動作する任意の仮想マシンＶＭを「仮想マシンＶＭｋ」と表記し、仮想マシンＶＭｋに割り当てられているメモリを「メモリＭｋ」と表記する。また、メモリＭｋを構成するメモリブロックを「メモリブロックｂ１〜ｂｎ」と表記し、メモリブロックｂ１〜ｂｎのうち任意のメモリブロックを「メモリブロックｂｉ」と表記する（ｉ＝１，２，…，ｎ）。また、メモリブロックｂｉに記憶されているデータを「移行元データｄｉ」と表記する。
【００５４】
また、移行先のサーバＳＶの物理メモリＰＭを構成するメモリブロックを「メモリブロックＢ１〜Ｂｍ」と表記し、メモリブロックＢ１〜Ｂｍのうち任意のメモリブロックを「メモリブロックＢｊ」と表記する（ｊ＝１，２，…，ｍ）。また、メモリブロックＢｊに記憶されているデータを「移行先データＤｊ」と表記する。
【００５５】
ここで、各サーバＳＶが用いるメモリ管理テーブルについて説明する。メモリ管理テーブルは、各サーバＳＶが自サーバ上で動作中の仮想マシンＶＭｋに割り当てられているメモリＭｋを管理するための情報である。ここでは、サーバＳＶ１上で動作中の仮想マシンＶＭ３に割り当てられているメモリＭ３を管理するためのメモリ管理テーブル４００を例に挙げて説明する。メモリ管理テーブル４００は、例えば、図２に示したメモリ２０２によって実現される。
【００５６】
（メモリ管理テーブル４００の記憶内容）
図４は、メモリ管理テーブルの記憶内容の一例を示す説明図（その１）である。図４において、メモリ管理テーブル４００は、マシンＩＤ、メモリＩＤ、ブロックＩＤおよびハッシュ値のフィールドを有し、各フィールドに情報を設定することで、仮想マシンＶＭ３のメモリ管理データを記憶している。
【００５７】
ここで、マシンＩＤは、仮想マシンＶＭｋの識別子である。メモリＩＤは、仮想マシンＶＭｋに割り当てられているメモリＭｋの識別子である。ブロックＩＤは、仮想マシンＶＭｋのメモリＭｋを構成するメモリブロックｂｉの識別子である。ハッシュ値は、メモリブロックｂｉに記憶されている移行元データｄｉのハッシュ値ｈｉである。
【００５８】
メモリ管理テーブル４００によれば、仮想マシンＶＭ３に割り当てられているメモリＭ３を構成するメモリブロックｂ１〜ｂ９を特定することができる。また、メモリ管理テーブル４００によれば、メモリブロックｂ１〜ｂ９に記憶されている移行元データｄ１〜ｄ９のハッシュ値ｈ１〜ｈ９を特定することができる。
【００５９】
つぎに、実施の形態２にかかるサーバＳＶ（サーバＳＶ１，ＳＶ２）の機能的構成について説明する。
【００６０】
（サーバＳＶの機能的構成）
図５は、実施の形態２にかかるサーバの機能的構成を示すブロック図である。図５において、サーバＳＶは、受信部５０１と、選択部５０２と、送信部５０３と、判定部５０４と、比較部５０５と、書込部５０６と、を含む構成である。各機能部は、具体的には、例えば、図２に示したメモリ２０２に記憶されたプログラムをＣＰＵ２０１に実行させることにより、または、ネットワークＩ／Ｆ２０３により、その機能を実現する。より具体的には、例えば、各機能部は、図３に示したＶＭホストＨＴ１，ＨＴ２によって実現される。なお、各機能部の処理結果は、メモリ２０２に記憶される。
【００６１】
ライブマイグレーションにおいて、サーバＳＶは、移行対象となる仮想マシンＶＭｋを稼働させている移行元のサーバＳＶとなる場合と、移行対象となる仮想マシンＶＭｋの移行先のサーバＳＶとなる場合がある。ここでは、まず、サーバＳＶが移行元となる場合の各機能部の処理内容について説明する。
【００６２】
・移行元のサーバＳＶの機能的構成
受信部５０１は、仮想マシンＶＭｋの移行指示を受信する。ここで、仮想マシンＶＭｋの移行指示とは、自サーバで動作中の仮想マシンＶＭｋを他サーバに移行するように指示するものである。仮想マシンＶＭｋの移行指示には、例えば、仮想マシンＶＭｋのマシンＩＤと、移行先のサーバＳＶを識別するサーバＩＤが含まれている。
【００６３】
具体的には、例えば、サーバＳＶ１のＶＭホストＨＴ１が、ネットワーク２０５を介して、仮想マシンＶＭ３をサーバＳＶ２に移行するように指示する移行指示を外部のコンピュータから受信する。また、ＶＭホストＨＴ１が、図２に示した入出力装置２０４を用いたユーザの操作入力により、仮想マシンＶＭ３の移行指示を受け付けてもよい。
【００６４】
選択部５０２は、仮想マシンＶＭｋの移行指示が受信された場合、仮想マシンＶＭｋに割り当てられているメモリＭｋを構成するメモリブロックｂ１〜ｂｎの中から、任意のメモリブロックｂｉを選択する。ここで、仮想マシンＶＭ３をサーバＳＶ２に移行するように指示する移行指示が受信された場合を例に挙げて説明する。
【００６５】
この場合、ＶＭホストＨＴ１が、例えば、図４に示したメモリ管理テーブル４００を参照して、仮想マシンＶＭ３に割り当てられているメモリＭ３のメモリブロックｂ１〜ｂ９の中から、任意のメモリブロックｂｉを選択する。選択部５０２による選択処理は、例えば、メモリブロックｂ１〜ｂｎの中から選択されていない未選択のメモリブロックｂｉがなくなるまで繰り返し実行される。
【００６６】
送信部５０３は、選択されたメモリブロックｂｉに記憶されている移行元データｄｉのハッシュ値ｈｉを移行先のサーバＳＶに送信する。ここで、移行元データｄｉのハッシュ値ｈｉは、例えば、移行元のサーバＳＶ１のＶＭホストＨＴ１により、移行元データｄｉを引数としてハッシュ関数に与えることで算出される。
【００６７】
移行元データｄｉのハッシュ値ｈｉの算出タイミングは、例えば、上記選択部５０２によってメモリブロックｂｉが選択された後でもよく、また、メモリブロックｂｉへの移行元データｄｉの記録時または更新時でもよい。算出された移行元データｄｉのハッシュ値ｈｉは、例えば、メモリブロックｂｉのブロックＩＤと関連付けてメモリ管理テーブル４００に記憶される。
【００６８】
具体的には、例えば、ＶＭホストＨＴ１が、メモリ管理テーブル４００を参照して、選択されたメモリブロックｂｉに記憶されている移行元データｄｉのハッシュ値ｈｉを特定する。そして、ＶＭホストＨＴ１が、ネットワーク２０５を介して、特定された移行元データｄｉのハッシュ値ｈｉを、メモリブロックｂｉのブロックＩＤとともに移行先のサーバＳＶ２のＶＭホストＨＴ２に送信する。
【００６９】
また、受信部５０１は、移行元データｄｉのハッシュ値ｈｉと、移行先の物理メモリＰＭを構成する各メモリブロック１２０−ｊに記憶されている移行先データＤｊごとのハッシュ値Ｈｊとの比較結果を、移行先のサーバＳＶから受信する。
【００７０】
ここで、比較結果は、例えば、移行元データｄｉのハッシュ値ｈｉが、全移行先データＤ１〜Ｄｍのハッシュ値Ｈ１〜Ｈｍと一致しなかった、または、ハッシュ値Ｈ１〜Ｈｍのうち少なくともいずれかのハッシュ値Ｈｊと一致したことを表す情報である。また、比較結果は、移行元データｄｉのハッシュ値ｈｉと各移行先データＤｊのハッシュ値Ｈｊとの各々の比較結果を表すものでもよい。
【００７１】
具体的には、例えば、移行元データｄｉのハッシュ値ｈｉが送信された結果、ＶＭホストＨＴ１が、ネットワーク２０５を介して、移行元データｄｉのハッシュ値ｈｉと移行先データＤｊごとのハッシュ値Ｈｊとの比較結果を、移行先のサーバＳＶ２のＶＭホストＨＴ２から受信する。
【００７２】
判定部５０４は、比較された比較結果に基づいて、移行先のサーバＳＶの物理メモリＰＭに対する移行元データｄｉの複写の要否を判定する。具体的には、例えば、ＶＭホストＨＴ１が、移行元データｄｉのハッシュ値ｈｉが、移行先データＤ１〜Ｄｍのハッシュ値Ｈ１〜Ｈｍのうち少なくともいずれかのハッシュ値Ｈｊと一致した場合、移行元データｄｉの複写が不要であると判定する。一方、移行元データｄｉのハッシュ値ｈｉが、全移行先データＤ１〜Ｄｍのハッシュ値Ｈ１〜Ｈｍと一致しなかった場合、ＶＭホストＨＴ１が、移行元データｄｉの複写が必要であると判定する。
【００７３】
また、送信部５０３は、判定された判定結果に基づいて、移行元データｄｉを移行先のサーバＳＶに送信する。具体的には、例えば、移行元データｄｉの複写が必要であると判定された場合、ＶＭホストＨＴ１が、ネットワーク２０５を介して、移行元データｄｉの複写指示をＶＭホストＨＴ２に送信する。複写指示には、例えば、メモリブロックｂｉのブロックＩＤと、移行元データｄｉが含まれている。一方、移行元データｄｉの複写が不要であると判定された場合、ＶＭホストＨＴ１は、移行元データｄｉを移行先のサーバＳＶ２に送信しない。
【００７４】
つぎに、サーバＳＶが移行先となる場合の各機能部の処理内容について説明する。
【００７５】
・移行先のサーバＳＶの機能的構成
受信部５０１は、移行元のサーバＳＶから、移行元のメモリＭｋを構成するメモリブロックｂｉごとに、メモリブロックｂｉに記憶されている移行元データｄｉのハッシュ値ｈｉを受信する。具体的には、例えば、サーバＳＶ２のＶＭホストＨＴ２が、ネットワーク２０５を介して、移行元データｄｉのハッシュ値ｈｉをサーバＳＶ１のＶＭホストＨＴ１から受信する。
【００７６】
比較部５０５は、移行先の物理メモリＰＭを構成するメモリブロックＢｊごとに、メモリブロックＢｊに記憶されている移行先データＤｊのハッシュ値Ｈｊと、受信された移行元データｄｉのハッシュ値ｈｉとを比較する。ここで、移行先データＤｊのハッシュ値Ｈｊは、例えば、移行先のサーバＳＶ２のＶＭホストＨＴ２により、移行先データＤｊを引数としてハッシュ関数に与えることで算出される。
【００７７】
ただし、移行元データｄｉのハッシュ値ｈｉおよび移行先データＤｊのハッシュ値Ｈｊは、同一のアルゴリズム（例えば、同一のハッシュ関数）を用いて算出される。また、移行先データＤｊのハッシュ値Ｈｊの算出タイミングは、例えば、上記比較部５０５による比較処理の実行時でもよく、また、メモリブロックＢｊへの移行先データＤｊの記録時または更新時でもよい。
【００７８】
算出された移行先データＤｊのハッシュ値Ｈｊは、例えば、図６に示すハッシュテーブル６００に記憶される。ここで、ハッシュテーブル６００の具体例について説明する。なお、ハッシュテーブル６００は、例えば、メモリ２０２によって実現される。
【００７９】
図６は、ハッシュテーブルの記憶内容の一例を示す説明図（その１）である。図６において、ハッシュテーブル６００は、移行先のサーバＳＶ２の物理メモリＰＭ２を構成するメモリブロックＢｊごとに、メモリブロックＢｊに記憶されている移行先データＤｊのハッシュ値Ｈｊを記憶している。
【００８０】
具体的には、例えば、ＶＭホストＨＴ２は、ハッシュテーブル６００を参照して、メモリブロックＢｊに記憶されている移行先データＤｊのハッシュ値Ｈｊと、受信された移行元データｄｉのハッシュ値ｈｉとを比較する。
【００８１】
図５の説明に戻り、送信部５０３は、比較された比較結果を移行元のサーバＳＶに送信する。具体的には、例えば、ＶＭホストＨＴ２が、ネットワーク２０５を介して、移行元データｄｉの判定結果を移行元のサーバＳＶ１のＶＭホストＨＴ１に送信する。
【００８２】
また、受信部５０１は、比較結果が送信された結果、移行元のサーバＳＶから移行元データｄｉを受信する。具体的には、例えば、ＶＭホストＨＴ２が、全移行先データＤ１〜Ｄｍのハッシュ値Ｈ１〜Ｈｍと不一致となったハッシュ値ｈｉの算出元の移行元データｄｉの複写指示をＶＭホストＨＴ１から受信する。
【００８３】
書込部５０６は、受信された移行元データｄｉを移行先の物理メモリＰＭに書き込む。具体的には、例えば、移行元データｄｉの複写指示が受信された場合、ＶＭホストＨＴ２が、複写指示に含まれるメモリブロックｂｉの移行元データｄｉを、移行先の物理メモリＰＭの空き領域に書き込む。
【００８４】
この結果、移行先のサーバＳＶ２において、移行元データｄｉが移行先の物理メモリＰＭの空き領域に複写されて、仮想マシンＶＭｋのメモリブロックｂｉが生成される。
【００８５】
また、書込部５０６は、比較された比較結果に基づいて、移行元データｄｉのハッシュ値ｈｉと一致したハッシュ値Ｈｊの算出元の移行先データＤｊを、移行先の物理メモリＰＭに書き込む。具体的には、例えば、ＶＭホストＨＴ２が、移行元データｄｉのハッシュ値ｈｉと一致したハッシュ値Ｈｊの算出元の移行先データＤｊをメモリブロックＢｊから読み出して、移行先の物理メモリＰＭの空き領域に書き込む。
【００８６】
この結果、移行先のサーバＳＶ２において、移行元データｄｉのハッシュ値ｈｉと一致したハッシュ値Ｈｊの算出元の移行先データＤｊが移行先の物理メモリＰＭの空き領域に複写されて、仮想マシンＶＭｋのメモリブロックｂｉが生成される。
【００８７】
上述した説明では、移行元データｄｉのハッシュ値ｈｉと移行先データＤｊのハッシュ値Ｈｊとの比較処理を、移行先のサーバＳＶが行うことにしたが、これに限らない。例えば、移行元のＶＭホストＨＴ１が、移行先のＶＭホストＨＴ２に対して、移行先データＤｊのハッシュ値Ｈｊの送信要求を行って、移行先データＤｊのハッシュ値Ｈｊ（例えば、ハッシュテーブル６００の記憶内容）をＶＭホストＨＴ２から受信する。
【００８８】
そして、移行元のＶＭホストＨＴ１が、移行元データｄｉのハッシュ値ｈｉと移行先データＤｊのハッシュ値Ｈｊとを比較することにしてもよい。この場合、移行元のＶＭホストＨＴ１が、移行元データｄｉのハッシュ値ｈｉと移行先データＤｊのハッシュ値Ｈｊとを比較した比較結果に基づいて、移行先の物理メモリＰＭ２に対する移行元データｄｉの複写の要否を判定する。
【００８９】
ただし、移行元データｄｉの複写が不要である場合、移行先のＶＭホストＨＴ２は、移行元データｄｉとハッシュ値が一致する移行先データＤｊのメモリブロックＢｊのブロックＩＤがわからない。このため、ＶＭホストＨＴ１は、移行元データｄｉのメモリブロックｂｉのブロックＩＤとともに、移行元データｄｉのハッシュ値ｈｉと一致したハッシュ値Ｈｊの算出元の移行先データＤｊのメモリブロックＢｊのブロックＩＤを移行先のＶＭホストＨＴ２に送信する。
【００９０】
この結果、移行先のサーバＳＶ２において、移行元データｄｉのハッシュ値ｈｉと一致したハッシュ値Ｈｊの算出元の移行先データＤｊが移行先の物理メモリＰＭの空き領域に複写されて、仮想マシンＶＭｋのメモリブロックｂｉが生成される。
【００９１】
なお、仮想マシンＶＭｋが実行中のプログラムのコンテキストの切り替えは、例えば、仮想マシンＶＭｋの移行指示があった直後に行われてもよく、また、移行先の物理メモリＰＭに仮想マシンＶＭｋのメモリブロックｂ１〜ｂｎが生成された後に行われてもよい。
【００９２】
コンテキストは、仮想マシンＶＭｋが実行中のプログラムに関する状態情報（例えば、ＣＰＵ２０１のレジスタの値など）である。コンテキストの切り替えは、具体的には、例えば、移行元のＶＭホストＨＴ１が、仮想マシンＭｋに割り当てられているＣＰＵ２０１のレジスタの値を、移行先のサーバＳＶ２のＣＰＵ２０１に複写することで行われる。
【００９３】
ここで、サーバＳＶ１上で動作中の仮想マシンＶＭ３を、サーバＳＶ２に移行する場合を例に挙げて、ライブマイグレーションの一例について説明する。
【００９４】
図７は、ライブマイグレーションの一例を示す説明図である。図７において、仮想マシンＶＭ３のメモリＭ３を構成するメモリブロックｂ１〜ｂ９の移行元データｄ１〜ｄ９のうち、移行元データｄ１，ｄ６，ｄ８の複写が必要であると判定され、移行元データｄ２〜ｄ５，ｄ７，ｄ９の複写が不要であると判定されている。
【００９５】
この場合、ＶＭホストＨＴ１が、複写が必要であると判定された移行元データｄ１，ｄ６，ｄ８の複写指示を移行先のＶＭホストＨＴ２に送信する。そして、ＶＭホストＨＴ２が、移行元データｄ１，ｄ６，ｄ８を物理メモリＰＭ２の空き領域に書き込む。これにより、移行元データｄ１，ｄ６，ｄ８が物理メモリＰＭ２の空き領域に複写されて、仮想マシンＶＭ３のメモリブロックｂ１，ｂ６，ｂ８が生成される。
【００９６】
ここで、移行先データＤ２，Ｄ４，Ｄ８，Ｄ１０，Ｄ１４，Ｄ１６は、複写が不要であると判定された移行元データｄ２〜ｄ５，ｄ７，ｄ９とハッシュ値が一致する移行先データＤｊである。この場合、ＶＭホストＨＴ２が、移行先データＤ２，Ｄ４，Ｄ８，Ｄ１０，Ｄ１４，Ｄ１６を、メモリブロックＢ２，Ｂ４，Ｂ８，Ｂ１０，Ｂ１４，Ｂ１６から読み出して、物理メモリＰＭ２の空き領域に書き込む。これにより、移行先データＤ２，Ｄ４，Ｄ８，Ｄ１０，Ｄ１４，Ｄ１６が物理メモリＰＭ２の空き領域に複写されて、仮想マシンＶＭ３のメモリブロックｂ２〜ｂ５，ｂ７，ｂ９が生成される。
【００９７】
この結果、移行先のサーバＳＶ２の物理メモリＰＭ２に、仮想マシンＶＭ３のメモリブロックｂ１〜ｂ９が生成されて、仮想マシンＶＭ３の移行が完了する。このように、移行元データｄｉの複写の要否を事前に判定して、複写不要なデータｄｉの転送を抑止することで、サーバ間のデータの転送量を削減することができる。
【００９８】
ここで、移行元データｄｉと移行先データＤｊは、データ内容が異なる場合であっても、ハッシュ値ｈｉとハッシュ値Ｈｊが一致（衝突）する可能性がある。このため、ハッシュ値の一致判定のみで移行元データｄｉと移行先データＤｊの同一性の判定を行うと、本来ならば複写の必要がある移行元データｄｉが移行先のサーバＳＶに転送されない場合がある。
【００９９】
この場合、移行先のサーバＳＶにおいて、移行元データｄｉとはデータ内容が異なる移行先データＤｊが複写されて仮想マシンＶＭｋのメモリブロックｂｉが生成される不具合が発生してしまう。そこで、以下に説明する判定手法１〜４により、移行元データｄｉと移行先データＤｊの同一性の判定をさらに行うことにしてもよい。
【０１００】
なお、以下の説明では、特に指定する場合を除いて、移行先のサーバＳＶにおいて、比較部５０５による比較処理を行う場合を例に挙げて説明する。
【０１０１】
（判定手法１）
まず、異なるアルゴリズムを用いて算出された複数のハッシュ値により、移行元データｄｉと移行先データＤｊの同一性の判定を行う判定手法１について説明する。ここでは、互いに異なる第１および第２のハッシュ関数を用いて、移行元データｄｉおよび移行先データＤｊの複数の異なるハッシュ値を算出する。
【０１０２】
以下の説明では、第１のハッシュ関数に移行元データｄｉを与えることで算出されるハッシュ値を「第１のハッシュ値ｈ1ｉ」と表記し、第１のハッシュ関数に移行先データＤｊを与えることで算出されるハッシュ値を「第１のハッシュ値Ｈ1ｊ」と表記する。また、第２のハッシュ関数に移行元データｄｉを与えることで算出されるハッシュ値を「第２のハッシュ値ｈ2ｉ」と表記し、第２のハッシュ関数に移行先データＤｊを与えることで算出されるハッシュ値を「第２のハッシュ値Ｈ2ｊ」と表記する。
【０１０３】
上記比較部５０５は、複数の異なるハッシュ関数に含まれるハッシュ関数ごとに、該ハッシュ関数を用いて算出された、移行先データＤｊのハッシュ値（例えば、第１および第２のハッシュ値Ｈ1ｊ，Ｈ2ｊ）と、移行元データｄｉのハッシュ値（例えば、第１および第２のハッシュ値ｈ1ｉ，ｈ2ｉ）とを比較する。
【０１０４】
具体的には、例えば、上記比較部５０５が、メモリブロックＢｊごとに、メモリブロックＢｊの移行先データＤｊの第１のハッシュ値Ｈ1ｊと、メモリブロックｂｉの移行元データｄｉの第１のハッシュ値ｈ1ｉとを比較する。また、第１のハッシュ値Ｈ1ｊと第１のハッシュ値ｈ1ｉとが一致する場合、上記比較部５０５が、移行先データＤｊの第２のハッシュ値Ｈ2ｊと移行元データｄｉの第２のハッシュ値ｈ2ｉとを比較する。
【０１０５】
そして、上記判定部５０４は、比較された比較結果に基づいて、移行先のサーバＳＶの物理メモリＰＭに対するメモリブロックｂｉの移行元データｄｉの複写の要否を判定する。以下、判定手法１に関する具体的な処理内容について説明する。
【０１０６】
まず、移行元データｄｉの第１のハッシュ値ｈ1ｉおよび第２のハッシュ値ｈ2ｉを記憶するメモリ管理テーブル８００について説明する。メモリ管理テーブル８００は、例えば、移行元のサーバＳＶのメモリ２０２によって実現される。
【０１０７】
図８は、メモリ管理テーブルの記憶内容の一例を示す説明図（その２）である。図８において、メモリ管理テーブル８００は、マシンＩＤ、メモリＩＤ、ブロックＩＤ、第１のハッシュ値および第２のハッシュ値のフィールドを有し、各フィールドに情報を設定することで、仮想マシンＶＭ３のメモリ管理データを記憶している。
【０１０８】
第１のハッシュ値は、メモリブロックｂｉに記憶されている移行元データｄｉを第１のハッシュ関数に与えることで算出される第１のハッシュ値ｈ1ｉである。第２のハッシュ値は、メモリブロックｂｉに記憶されている移行元データｄｉを第２のハッシュ関数に与えることで算出される第２のハッシュ値ｈ2ｉである。
【０１０９】
メモリ管理テーブル８００によれば、メモリブロックｂ１〜ｂ９に記憶されている移行元データｄ１〜ｄ９の第１のハッシュ値ｈ1１〜ｈ1９および第２のハッシュ値ｈ2１〜ｈ2９を特定することができる。
【０１１０】
具体的には、例えば、まず、移行元のＶＭホストＨＴ１が、メモリ管理テーブル８００を参照して、移行元データｄｉの第１および第２のハッシュ値ｈ1ｉ，ｈ2ｉを特定する。そして、ＶＭホストＨＴ１が、特定された移行元データｄｉの第１および第２のハッシュ値ｈ1ｉ，ｈ2ｉを移行先のＶＭホストＨＴ２に送信する。
【０１１１】
つぎに、移行先のＶＭホストＨＴ２が、メモリブロックＢｊごとに、メモリブロックＢｊの移行先データＤｊの第１のハッシュ値Ｈ1ｊと、移行元データｄｉの第１のハッシュ値ｈ1ｉとを比較する。ここで、移行先データＤｊの第１のハッシュ値Ｈ1ｊおよび第２のハッシュ値Ｈ2ｊを記憶するハッシュテーブル９００について説明する。ハッシュテーブル９００は、例えば、移行先のサーバＳＶのメモリ２０２によって実現される。
【０１１２】
図９は、ハッシュテーブルの記憶内容の一例を示す説明図（その２）である。図９において、ハッシュテーブル９００は、移行先のサーバＳＶ２の物理メモリＰＭ２を構成するメモリブロックＢｊごとに、メモリブロックＢｊに記憶されている移行先データＤｊの第１のハッシュ値Ｈ1ｊおよび第２のハッシュ値Ｈ2ｊを記憶している。
【０１１３】
移行先のＶＭホストＨＴ２は、例えば、ハッシュテーブル９００を参照して、メモリブロックＢｊごとに、メモリブロックＢｊの移行先データＤｊの第１のハッシュ値Ｈ1ｊと、移行元データｄｉの第１のハッシュ値ｈ1ｉとを比較する。ここで、第１のハッシュ値Ｈ1ｊと第１のハッシュ値ｈ1ｉとが一致する場合、さらに、ＶＭホストＨＴ２が、ハッシュテーブル９００を参照して、移行先データＤｊの第２のハッシュ値Ｈ2ｊと、移行元データｄｉの第２のハッシュ値ｈ2ｉとを比較する。そして、ＶＭホストＨＴ２は、比較された比較結果をＶＭホストＨＴ１に送信する。
【０１１４】
このあと、ＶＭホストＨＴ１は、受信された比較結果に基づいて、移行先の物理メモリＰＭ２に対するメモリブロックｂｉの移行元データｄｉの複写の要否を判定する。具体的には、例えば、第２のハッシュ値Ｈ2ｊと第２のハッシュ値ｈ2ｉとが一致する場合、ＶＭホストＨＴ１が、移行元データｄｉの複写が不要であると判定する。一方、第１のハッシュ値Ｈ1ｊと第１のハッシュ値ｈ1ｉとが不一致の場合、または、第２のハッシュ値Ｈ2ｊと第２のハッシュ値ｈ2ｉとが不一致の場合、ＶＭホストＨＴ１が、移行元データｄｉの複写が必要であると判定する。
【０１１５】
この結果、移行先のＶＭホストＨＴ２は、移行先データＤｊの第１および第２のハッシュ値Ｈ1ｊ，Ｈ2ｊのうち少なくともいずれかのハッシュ値と不一致となったハッシュ値の算出元の移行元データｄｉを、移行元のＶＭホストＨＴ１から受信することになる。
【０１１６】
このように、複数の異なるハッシュ値により移行元データｄｉと移行先データＤｊの同一性の判定を行うことにより、移行元データｄｉと移行先データＤｊのハッシュ値の衝突による不具合を回避することができる。
【０１１７】
なお、移行元のサーバＳＶにおいて、比較部５０５による比較処理を行う場合、移行元のサーバＳＶからの送信要求に応じて、移行先のサーバＳＶが、移行先データＤｊの第１および第２のハッシュ値Ｈ1ｊ，Ｈ2ｊを移行元のサーバＳＶに送信することになる。
【０１１８】
（判定手法２）
つぎに、ハッシュ値（例えば、上述した第１のハッシュ値）が一致する移行元データｄｉと移行先データＤｊの部分データの一致判定を行うことにより、移行元データｄｉと移行先データＤｊの同一性の判定を行う判定手法２について説明する。
【０１１９】
上記比較部５０５は、第１のハッシュ値Ｈ1ｊと第１のハッシュ値ｈ1ｉとが一致する場合、移行先データＤｊから所定の抽出ルールに基づいて抽出された部分データと、移行元データｄｉから該抽出ルールに基づいて抽出された部分データとを比較する。以下、移行元データｄｉから抽出された部分データを「部分データｐｉ」と表記する。また、移行先データＤｊから抽出された部分データを「部分データＰｊ」と表記する。
【０１２０】
ここで、移行元データｄｉの部分データｐｉは、例えば、移行元のサーバＳＶ１のＶＭホストＨＴ１により、所定の抽出ルールに基づいて移行元データｄｉから抽出される。抽出ルールとしては、例えば、移行元データｄｉの先頭または最後尾から所定ビット数のデータを抽出するルールが設定される。
【０１２１】
また、移行先データＤｊの部分データＰｊは、例えば、移行先のサーバＳＶ２のＶＭホストＨＴ２により、所定の抽出ルールに基づいて移行先データＤｊから抽出される。部分データｐｉ，Ｐｊは、同一の抽出ルールに基づいて抽出される。また、各部分データｐｉ，Ｐｊの抽出タイミングは、例えば、移行元データｄｉ、移行先データＤｊの記録時または更新時であってもよい。
【０１２２】
そして、上記判定部５０４は、比較された比較結果に基づいて、移行先のサーバＳＶの物理メモリＰＭに対するメモリブロックｂｉの移行元データｄｉの複写の要否を判定する。以下、判定手法２に関する具体的な処理内容について説明する。
【０１２３】
具体的には、例えば、移行先のＶＭホストＨＴ２が、第１のハッシュ値Ｈ1ｊと第１のハッシュ値ｈ1ｉとが一致する場合、移行先データＤｊの部分データＰｊと、移行元データｄｉの部分データｐｉとを比較する。移行元データｄｉの部分データｐｉは、例えば、移行先のＶＭホストＨＴ２からの送信要求に応じて、移行元のＶＭホストＨＴ１からＶＭホストＨＴ２に送信される。そして、ＶＭホストＨＴ２は、比較された比較結果をＶＭホストＨＴ１に送信する。
【０１２４】
このあと、ＶＭホストＨＴ１は、受信された比較結果に基づいて、移行先の物理メモリＰＭ２に対するメモリブロックｂｉの移行元データｄｉの複写の要否を判定する。具体的には、例えば、部分データＰｊと部分データｐｉとが一致する場合、ＶＭホストＨＴ１が、移行元データｄｉの複写が不要であると判定する。一方、部分データＰｊと部分データｐｉとが不一致の場合、ＶＭホストＨＴ１が、移行元データｄｉの複写が必要であると判定する。
【０１２５】
この結果、移行先のＶＭホストＨＴ２は、移行先データＤｊの部分データＰｊと不一致となった部分データｐｉの抽出元の移行元データｄｉを、移行元のＶＭホストＨＴ１から受信することになる。
【０１２６】
このように、移行元データｄｉの部分データｐｉと移行先データＤｊの部分データＰｊの一致判定により同一性の判定を行うことにより、移行元データｄｉと移行先データＤｊのハッシュ値の衝突による不具合を回避することができる。
【０１２７】
なお、移行元のサーバＳＶにおいて、比較部５０５による比較処理を行う場合、移行元のサーバＳＶからの送信要求に応じて、移行先のサーバＳＶが、移行先データＤｊの部分データＰｊを移行元のサーバＳＶに送信することになる。
【０１２８】
また、サーバＳＶ間の双方向の通信路の通信品質に基づいて、移行元データｄｉの部分データｐｉと移行先データＤｊの部分データＰｊとの比較処理を行う実行主体を決めることにしてもよい。
【０１２９】
具体的には、例えば、上記比較部５０５は、第１のハッシュ値Ｈ1ｊと第１のハッシュ値ｈ1ｉとが一致する場合、サーバＳＶ間の双方向の通信路のうち、通信品質の高い通信路を選択する。通信品質としては、例えば、データの転送レートやエラーレートを用いることができる。転送レートは、単位時間当たりに転送されるデータ量（例えば、ビット毎秒）である。
【０１３０】
エラーレートは、データの送受信を行う際に、受信データの中に送信データと異なるビットが含まれる確率である。なお、転送レートおよびエラーレートは、例えば、予め計測されてメモリ２０２に記憶されていてもよく、また、通信路の選択時にその都度計測されることにしてもよい。
【０１３１】
より具体的には、例えば、ＶＭホストＨＴ２が、第１のハッシュ値Ｈ1ｊと第１のハッシュ値ｈ1ｉとが一致する場合、サーバＳＶ１，ＳＶ２間の双方向の通信路のうち、通信品質の高い通信路を選択する。
【０１３２】
ここで、サーバＳＶ１からサーバＳＶ２の方向の通信路が選択された場合、ＶＭホストＨＴ２が、移行元データｄｉの部分データｐｉの送信要求を移行元のＶＭホストＨＴ１に送信する。この結果、ＶＭホストＨＴ２が、移行元データｄｉの部分データｐｉをＶＭホストＨＴ１から受信して、移行元データｄｉの部分データｐｉと移行先データＤｊの部分データＰｊとの比較処理を行う。
【０１３３】
一方、サーバＳＶ２からサーバＳＶ１の方向の通信路が選択された場合、ＶＭホストＨＴ２が、移行先データＤｊの部分データＰｊを、移行元のＶＭホストＨＴ１に送信する。この結果、移行元のＶＭホストＨＴ１が、移行元データｄｉの部分データｐｉと移行先データＤｊの部分データＰｊとの比較処理を行う。
【０１３４】
このように、サーバＳＶ１とサーバＳＶ２との間の双方向の通信路のうち通信品質の高い通信路を選択して、部分データｐｉと部分データＰｊの比較処理を行う実行主体を決めることにより、迅速かつ効率的に該比較処理を行うことができる。
【０１３５】
（判定手法３）
つぎに、ハッシュ値（例えば、上述した第１のハッシュ値）が一致する移行元データｄｉと移行先データＤｊの一致判定を行うことにより、移行元データｄｉと移行先データＤｊの同一性の判定を行う判定手法３について説明する。
【０１３６】
上記比較部５０５は、第１のハッシュ値Ｈ1ｊと第１のハッシュ値ｈ1ｉとが一致する場合、サーバＳＶ間の双方向の通信路のうち、通信品質の高い通信路を選択する。具体的には、例えば、ＶＭホストＨＴ２が、第１のハッシュ値Ｈ1ｊと第１のハッシュ値ｈ1ｉとが一致する場合、サーバＳＶ１，ＳＶ２間の双方向の通信路のうち、通信品質の高い通信路を選択する。
【０１３７】
ここで、サーバＳＶ２からサーバＳＶ１の方向の通信路が選択された場合、ＶＭホストＨＴ２が、移行先データＤｊを移行元のＶＭホストＨＴ１に送信する。このあと、移行元のＶＭホストＨＴ１が、移行元データｄｉと移行先データＤｊとを比較する。そして、ＶＭホストＨＴ１は、比較された比較結果に基づいて、移行先の物理メモリＰＭ２に対するメモリブロックｂｉの移行元データｄｉの複写の要否を判定する。
【０１３８】
具体的には、例えば、移行元データｄｉと移行先データＤｊとが一致する場合、ＶＭホストＨＴ１が、移行元データｄｉの複写が不要であると判定する。一方、移行元データｄｉと移行先データＤｊとが不一致の場合、ＶＭホストＨＴ１が、移行元データｄｉの複写が必要であると判定する。
【０１３９】
この結果、移行先のＶＭホストＨＴ２は、移行先データＤｊと不一致となった移行元データｄｉを、移行元のＶＭホストＨＴ１から受信することになる。
【０１４０】
このように、移行元データｄｉと移行先データＤｊの一致判定により同一性の判定を行うことにより、移行元データｄｉと移行先データＤｊのハッシュ値の衝突による不具合を回避することができる。
【０１４１】
なお、サーバＳＶ間のデータの転送量を削減するという観点からすれば、移行先データＤｊとの一致判定のために、移行元のＶＭホストＨＴ１から移行先のＶＭホストＨＴ２に移行元データｄｉを送信することは意味がない。このため、サーバＳＶ１からサーバＳＶ２の方向の通信路が選択された場合は、ＶＭホストＨＴ２が、第１のハッシュ値Ｈ1ｊと第１のハッシュ値ｈ1ｉとが一致することを表す比較結果を、ＶＭホストＨＴ１に送信することにしてもよい。
【０１４２】
この場合、ＶＭホストＨＴ１において、移行先の物理メモリＰＭ２に対するメモリブロックｂｉの移行元データｄｉの複写が必要であると判定されることになる。すなわち、サーバＳＶ１からサーバＳＶ２の方向の通信路が選択された場合は、移行元データｄｉと移行先データＤｊとの一致判定を行うことなく、移行元データｄｉの複写が必要であると判定する。
【０１４３】
（判定手法４）
つぎに、ハッシュ値（例えば、上述した第１のハッシュ値）が一致する移行元データｄｉと移行先データＤｊのデータソースの一致判定を行うことにより、移行元データｄｉと移行先データＤｊの同一性の判定を行う判定手法４について説明する。
【０１４４】
図１０は、移行元データおよび移行先データを記憶する共有ストレージの一例を示す説明図である。図１０において、ストレージ装置１０００は、ネットワーク２０５を介して、移行元のサーバＳＶ１および移行先のサーバＳＶ２がアクセス可能な共有ストレージである。
【０１４５】
サーバＳＶ１上で動作中の仮想マシンＶＭ３は、移行対象となる仮想マシンである。仮想マシンＶＭ３を構成するメモリブロックｂ５の移行元データｄ５は、移行先の物理メモリＰＭ２を構成するメモリブロックＢ１０の移行先データＤ１０と第１のハッシュ値（ｈ1５＝Ｈ1１０）が一致する。
【０１４６】
また、移行元データｄ５は、ストレージ装置１０００の論理ボリュームＬＶ１に記憶されている。移行先データＤ１０は、ストレージ装置１０００の論理ボリュームＬＶ２に記憶されている。ここで、ストレージ装置１０００は、重複排除機能を有しており、同一内容を持つ論理ブロックは同一の物理ブロックに格納されるものとする。すなわち、移行元データｄ５および移行先データＤ１０が、同一の物理アドレスのボリュームＰＶ１に記憶されているデータＤである場合、ｄ５とＤ１０は同一内容であり、同一のデータソースであることを示す。
【０１４７】
移行元データｄ５と移行先データＤ１０のデータソースが同一の場合、移行先のサーバＳＶ２おいて、移行先データＤ１０が記憶されているメモリブロックＢ１０を複数の仮想マシンＶＭ（例えば、仮想マシンＶＭ３，ＶＭ４）で共有することができる。このため、移行先の物理メモリＰＭ２に対する移行元データｄ５の複写は不要となる。
【０１４８】
そこで、上記比較部５０５は、第１のハッシュ値Ｈ1ｊと第１のハッシュ値ｈ1ｉとが一致する場合、さらに、移行先データＤｊを記憶するストレージ内の記憶領域のアドレスと、移行元データｄｉを記憶するストレージ内の記憶領域のアドレスとを比較する。ストレージは、例えば、移行先のサーバＳＶおよび移行元のサーバＳＶがアクセス可能なストレージ装置１０００である。そして、上記判定部５０４は、比較された比較結果に基づいて、移行先のサーバＳＶの物理メモリＰＭに対するメモリブロックｂｉの移行元データｄｉの複写の要否を判定する。
【０１４９】
具体的には、例えば、ＶＭホストＨＴ２が、移行元データｄ５を記憶する論理ボリュームＬＶ１を識別するボリュームＩＤを、移行元のＶＭホストＨＴ１に問い合わせる。そして、ＶＭホストＨＴ２が、移行元データｄ５を記憶する論理ボリュームＬＶ１に対応する物理アドレスをストレージ装置１０００に問い合わせる。
【０１５０】
また、ＶＭホストＨＴ２が、移行先データＤ１０を記憶する論理ボリュームＬＶ２に対応する物理アドレスをストレージ装置１０００に問い合わせる。つぎに、ＶＭホストＨＴ２が、移行元データｄ５を記憶する論理ボリュームＬＶ１に対応する物理アドレスと、移行先データＤ１０を記憶する論理ボリュームＬＶ２に対応する物理アドレスを比較する。そして、ＶＭホストＨＴ２は、比較された比較結果をＶＭホストＨＴ１に送信する。
【０１５１】
このあと、ＶＭホストＨＴ１は、受信された比較結果に基づいて、移行先の物理メモリＰＭ２に対するメモリブロックｂｉの移行元データｄｉの複写の要否を判定する。具体的には、例えば、論理ボリュームＬＶ１の物理アドレスと論理ボリュームＬＶ２の物理アドレスが一致する場合、ＶＭホストＨＴ１が、移行元データｄ５の複写が不要であると判定する。この結果、移行先のサーバＳＶ２において、例えば、移行先データＤ１０を記憶するメモリブロックＢ１０が複数の仮想マシンＶＭ３，ＶＭ４によって共有されることになる。
【０１５２】
一方、論理ボリュームＬＶ１の物理アドレスと論理ボリュームＬＶ２の物理アドレスが不一致の場合、ＶＭホストＨＴ１が、移行元データｄ５の複写が必要であると判定する。この結果、移行先のＶＭホストＨＴ２は、移行先データＤｊを記憶する論理ボリュームＬＶ２の物理アドレスと不一致の物理アドレスの論理ボリュームＬＶ１に記憶されている移行元データｄｉを、移行元のＶＭホストＨＴ１から受信することになる。
【０１５３】
このように、移行元データｄｉと移行先データＤｊのデータソースの一致判定により同一性の判定を行うことにより、移行元データｄｉと移行先データＤｊのハッシュ値の衝突による不具合を回避することができる。
【０１５４】
なお、第１のハッシュ値Ｈ1ｊと第１のハッシュ値ｈ1ｉとが一致する場合、上述した判定手法１〜４の複数の判定手法を組み合わせて、移行元データｄｉと移行先データＤｊの同一性の判定を行うことにしてもよい。
【０１５５】
つぎに、実施の形態２にかかるサーバＳＶのデータ移行処理手順について説明する。ここではまず、移行元のサーバＳＶのデータ移行処理手順について説明する。
【０１５６】
（移行元のサーバＳＶのデータ移行処理手順）
図１１は、実施の形態２にかかる移行元のサーバのデータ移行処理手順の一例を示すフローチャートである。図１１のフローチャートにおいて、まず、受信部５０１により、仮想マシンＶＭｋの移行指示を受信したか否かを判断する（ステップＳ１１０１）。
【０１５７】
ここで、受信部５０１により、仮想マシンＶＭｋの移行指示を受信するのを待つ（ステップＳ１１０１：Ｎｏ）。そして、受信部５０１により、移行指示を受信した場合（ステップＳ１１０１：Ｙｅｓ）、選択部５０２により、仮想マシンＶＭｋのメモリＭｋを区切って分割されたメモリブロックｂｉの「ｉ」を「ｉ＝１」で初期化する（ステップＳ１１０２）。
【０１５８】
つぎに、選択部５０２により、仮想マシンＶＭｋのメモリＭｋを構成するメモリブロックｂ１〜ｂｎの中からメモリブロックｂｉを選択する（ステップＳ１１０３）。そして、送信部５０３により、選択されたメモリブロックｂｉに記憶されている移行元データｄｉの第１および第２のハッシュ値ｈ1ｉ，ｈ2ｉを移行先のサーバＳＶに送信する（ステップＳ１１０４）。
【０１５９】
このあと、受信部５０１により、移行元データｄｉのハッシュ値ｈｉと、移行先の物理メモリＰＭを構成する各メモリブロック１２０−ｊに記憶されている移行先データＤｊごとのハッシュ値Ｈｊとの比較結果を、移行先のサーバＳＶから受信したか否かを判断する（ステップＳ１１０５）。
【０１６０】
ここで、比較結果を受信するのを待って（ステップＳ１１０５：Ｎｏ）、受信した場合（ステップＳ１１０５：Ｙｅｓ）、判定部５０４により、受信された比較結果に基づいて、移行先のサーバＳＶの物理メモリＰＶに対する移行元データｄｉの複写の要否を判定する（ステップＳ１１０６）。
【０１６１】
ここで、移行元データｄｉの複写が必要な場合（ステップＳ１１０７：Ｙｅｓ）、送信部５０３により、移行元データｄｉの複写指示を移行先のサーバＳＶに送信する（ステップＳ１１０８）。そして、選択部５０２により、メモリブロックｂｉの「ｉ」をインクリメントして（ステップＳ１１０９）、「ｉ」が「ｎ」より大きいか否かを判断する（ステップＳ１１１０）。
【０１６２】
ここで、「ｉ」が「ｎ」以下の場合（ステップＳ１１１０：Ｎｏ）、ステップＳ１１０３に戻る。一方、「ｉ」が「ｎ」より大きい場合（ステップＳ１１１０：Ｙｅｓ）、本フローチャートによる一連の処理を終了する。また、ステップＳ１１０７において、移行元データｄｉの複写が不要な場合（ステップＳ１１０７：Ｎｏ）、ステップＳ１１０９に移行する。
【０１６３】
これにより、移行対象となる仮想マシンＶＭｋのメモリＭｋを構成するメモリブロックｂｉごとに、メモリブロックｂｉの移行元データｄｉの複写の要否を判定することができる。
【０１６４】
つぎに、移行先のサーバＳＶのデータ移行処理手順について説明する。
【０１６５】
（移行先のサーバＳＶのデータ移行処理手順）
図１２〜図１４は、実施の形態２にかかる移行先のサーバのデータ移行処理手順の一例を示すフローチャートである。図１２のフローチャートにおいて、まず、受信部５０１により、移行元データｄｉの第１および第２のハッシュ値ｈ1ｉ，ｈ2ｉを移行元のサーバＳＶから受信したか否かを判断する（ステップＳ１２０１）。
【０１６６】
ここで、第１および第２のハッシュ値ｈ1ｉ，ｈ2ｉを受信するのを待って（ステップＳ１２０１：Ｎｏ）、受信した場合（ステップＳ１２０１：Ｙｅｓ）、比較部５０５により、移行先の物理メモリＰＭを構成するメモリブロックＢｊの「ｊ」を「ｊ＝１」で初期化する（ステップＳ１２０２）。
【０１６７】
つぎに、比較部５０５により、メモリブロックＢｊに記憶されている移行先データＤｊの第１のハッシュ値Ｈ1ｊと、受信された移行元データｄｉの第１のハッシュ値ｈ1ｉとを比較する（ステップＳ１２０３）。そして、比較部５０５により、移行先データＤｊの第１のハッシュ値Ｈ1ｊと、移行元データｄｉの第１のハッシュ値ｈ1ｉとが一致したか否かを判断する（ステップＳ１２０４）。
【０１６８】
ここで、第１のハッシュ値Ｈ1ｊと第１のハッシュ値ｈ1ｉとが不一致の場合（ステップＳ１２０４：Ｎｏ）、比較部５０５により、メモリブロックＢｊの「ｊ」をインクリメントして（ステップＳ１２０５）、「ｊ」が「ｍ」より大きいか否かを判断する（ステップＳ１２０６）。ここで、「ｊ」が「ｍ」以下の場合（ステップＳ１２０６：Ｎｏ）、ステップＳ１２０３に戻る。
【０１６９】
一方、「ｊ」が「ｍ」より大きい場合（ステップＳ１２０６：Ｙｅｓ）、送信部５０３により、比較部５０５によって比較された比較結果を移行元のサーバＳＶに送信して（ステップＳ１２０７）、本フローチャートによる一連の処理を終了する。
【０１７０】
また、ステップＳ１２０４において、第１のハッシュ値Ｈ1ｊと第１のハッシュ値ｈ1ｉとが一致する場合（ステップＳ１２０４：Ｙｅｓ）、比較部５０５により、メモリブロックＢｊに記憶されている移行先データＤｊの第２のハッシュ値Ｈ2ｊと、移行元データｄｉの第２のハッシュ値ｈ2ｉとを比較する（ステップＳ１２０８）。
【０１７１】
そして、比較部５０５により、移行先データＤｊの第２のハッシュ値Ｈ2ｊと、移行元データｄｉの第２のハッシュ値ｈ2ｉとが一致したか否かを判断する（ステップＳ１２０９）。ここで、第２のハッシュ値Ｈ2ｊと第２のハッシュ値ｈ2ｉとが不一致の場合（ステップＳ１２０９：Ｎｏ）、ステップＳ１２０５に移行する。
【０１７２】
一方、第２のハッシュ値Ｈ2ｊと第２のハッシュ値ｈ2ｉとが一致する場合（ステップＳ１２０９：Ｙｅｓ）、図１３に示すステップＳ１３０１に移行する。
【０１７３】
図１３のフローチャートにおいて、まず、送信部５０３により、移行元データｄｉの部分データｐｉの送信要求を移行元のサーバＳＶに送信する（ステップＳ１３０１）。つぎに、受信部５０１により、移行元データｄｉの部分データｐｉを移行元のサーバＳＶから受信したか否かを判断する（ステップＳ１３０２）。
【０１７４】
ここで、部分データｐｉを受信するのを待って（ステップＳ１３０２：Ｎｏ）、受信した場合（ステップＳ１３０２：Ｙｅｓ）、比較部５０５により、移行先データＤｊの部分データＰｊと、移行元データｄｉの部分データｐｉとを比較する（ステップＳ１３０３）。
【０１７５】
このあと、比較部５０５により、移行先データＤｊの部分データＰｊと、移行元データｄｉの部分データｐｉとが一致したか否かを判断する（ステップＳ１３０４）。ここで、部分データＰｊと部分データｐｉとが不一致の場合（ステップＳ１３０４：Ｎｏ）、図１２に示したステップＳ１２０５に移行する。
【０１７６】
一方、部分データＰｊと部分データｐｉとが一致する場合（ステップＳ１３０４：Ｙｅｓ）、図１４に示すステップＳ１４０１に移行する。
【０１７７】
図１４のフローチャートにおいて、まず、比較部５０５により、移行元データｄｉを記憶する論理ボリュームのボリュームＩＤを移行元のサーバＳＶに問い合わせる（ステップＳ１４０１）。そして、比較部５０５により、移行元データｄｉを記憶する論理ボリュームに対応する物理アドレスをストレージ装置１０００に問い合わせる（ステップＳ１４０２）。
【０１７８】
つぎに、比較部５０５により、移行先データＤｊを記憶する論理ボリュームに対応する物理アドレスをストレージ装置１０００に問い合わせる（ステップＳ１４０３）。そして、比較部５０５により、移行元データｄｉを記憶する論理ボリュームに対応する物理アドレスと、移行先データＤｊを記憶する論理ボリュームに対応する物理アドレスとを比較する（ステップＳ１４０４）。
【０１７９】
このあと、比較部５０５により、比較された移行元データｄｉの物理アドレスと移行先データＤｊの物理アドレスとが一致するか否かを判断する（ステップＳ１４０５）。ここで、移行元データｄｉの物理アドレスと移行先データＤｊの物理アドレスとが不一致の場合（ステップＳ１４０５：Ｎｏ）、図１２に示したステップＳ１２０５に移行する。
【０１８０】
一方、移行元データｄｉの物理アドレスと移行先データＤｊの物理アドレスとが一致する場合（ステップＳ１４０５：Ｙｅｓ）、送信部５０３により、比較部５０５によって比較された比較結果を移行元のサーバＳＶに送信して（ステップＳ１４０６）、本フローチャートによる一連の処理を終了する。
【０１８１】
これにより、移行元のメモリブロックｂｉに記憶されている移行元データｄｉと、移行先のメモリブロックＢｊに記憶されている移行先データＤｊとの同一性を判断するための情報（比較結果）を、移行元のサーバＳＶに送信することができる。
【０１８２】
なお、ステップＳ１２０７において、比較された比較結果が移行元のサーバＳＶに送信された後、受信部５０１により、移行元データｄｉの複写指示が受信された場合、書込部５０６により、移行元データｄｉを移行先の物理メモリＰＭに書き込む。
【０１８３】
また、ステップＳ１４０６において、比較された比較結果が移行元のサーバＳＶに送信された場合、例えば、書込部５０６により、移行元データｄｉとハッシュ値が一致する移行先データＤｊを移行先の物理メモリＰＭに書き込む。また、コンテキストの切り替えは、例えば、移行先のサーバＳＶの物理メモリＰＭ上に、仮想マシンＶＭｋのメモリＭｋを構成するメモリブロックｂ１〜ｂｎが生成された後に行われる。
【０１８４】
以上説明したように、実施の形態２にかかるサーバＳＶによれば、移行対象となる仮想マシンＶＭｋのメモリＭｋを構成するメモリブロックｂｉごとに、メモリブロックｂｉの移行元データｄｉの複写の要否を判定することができる。これにより、ライブマイグレーションを行う際に、複写不要なデータｄｉの複写を抑止して、サーバＳＶ間のデータの転送量を削減することができる。
【０１８５】
また、サーバＳＶによれば、移行元データｄｉのハッシュ値ｈｉと移行先データＤｊのハッシュ値Ｈｊを比較して、移行元データｄｉと移行先データＤｊの同一性を判定することにより、メモリブロックｂｉのデータｄｉの複写の要否を判定することができる。
【０１８６】
また、サーバＳＶによれば、複数の異なるハッシュ値により移行元データｄｉと移行先データＤｊの同一性の判定を行うことにより、移行元データｄｉと移行先データＤｊのハッシュ値の衝突による不具合を回避することができる。
【０１８７】
また、サーバＳＶによれば、移行元データｄｉと移行先データＤｊの部分データｐｉ，Ｐｊの一致判定により同一性の判定を行うことにより、移行元データｄｉと移行先データＤｊのハッシュ値の衝突による不具合を回避することができる。
【０１８８】
また、サーバＳＶによれば、サーバＳＶ１とサーバＳＶ２との間の双方向の通信路のうち通信品質の高い通信路を選択して、部分データｐｉと部分データＰｊの比較処理を行うことができる。これにより、迅速かつ効率的に部分データｐｉと部分データＰｊの一致判定を行うことができる。
【０１８９】
また、サーバＳＶによれば、移行元データｄｉと移行先データＤｊの一致判定により同一性の判定を行うことにより、移行元データｄｉと移行先データＤｊのハッシュ値の衝突による不具合を回避することができる。
【０１９０】
（実施の形態３）
つぎに、実施の形態３にかかるサーバＳＶについて説明する。実施の形態３では、移行対象となる仮想マシンＶＭｋのメモリブロックｂｉごとに、メモリブロックｂｉに記憶されている移行元データｄｉの属性情報に基づいて、移行元データｄｉの複写の要否を判定する。なお、実施の形態１，２で説明した内容と同一の内容については説明を省略する。
【０１９１】
ここで、サーバＳＶ上の仮想マシンＶＭｋによって実行中のＯＳ（以下、「ゲストＯＳｋ」という）が、メモリＭｋを構成するメモリブロックｂ１〜ｂｎを管理するためのメモリブロックテーブルについて説明する。ここでは、一例として、サーバＳＶ１上の仮想マシンＶＭ３が実行中のゲストＯＳ３が用いるメモリブロックテーブル１５００を例に挙げて説明する。メモリブロックテーブル１５００は、例えば、図２に示したメモリ２０２によって実現される。
【０１９２】
（メモリブロックテーブル１５００の記憶内容）
図１５は、メモリブロックテーブルの記憶内容の一例を示す説明図である。図１５において、メモリブロックテーブル１５００は、ブロックＩＤ、タイプ、ステータスおよび他ブロックＩＤのフィールドを有する。各フィールドに情報を設定することで、メモリブロックｂｉごとの管理データが記憶されている。
【０１９３】
ここで、ブロックＩＤは、仮想マシンＶＭｋのメモリＭｋを構成するメモリブロックｂｉの識別子である。タイプは、メモリブロックｂｉに記憶されているデータｄｉのデータタイプである。図１５中、「ｋｅｒｎ」は、カーネルデータを表している。カーネルデータには、例えば、メモリブロックテーブル１５００が含まれている。「ｔｅｘｔ」は、プログラムコードなどのテキストデータを表している。「ｆｒｅｅ」は、フリーメモリに計上されているメモリブロックを表している。「ｄａｔａ」は、プログラムのデータ領域などのデータを表している。「ａｎｎｏ」は、「ｋｅｒｎ」、「ｔｅｘｔ」、「ｆｒｅｅ」および「ｄａｔａ」以外のデータ（アノニマスデータ）を表している。
【０１９４】
ステータスは、メモリブロックｂｉに記憶されているデータｄｉの状態を表している。図１５中、「ｎｏｓｔｏｒｅ」は、バッキングストアがない状態を表している。バッキングストアとは、データｄｉのバックアップデータを記憶するスワップ領域内の記憶領域である。「ｓｙｎｃ」は、メモリブロックｂｉとは異なる他のメモリブロックと同期していることを表している。「ｎｏｓｙｎｃ」は、メモリブロックｂｉとは異なる他のメモリブロックと同期していないことを表している。「ｎｕｌｌ」は、メモリブロックｂｉが初期化されていることを表している。
【０１９５】
他ブロックＩＤは、メモリブロックｂｉに記憶されているデータｄｉと関連するデータを記憶する他のメモリブロックのブロックＩＤである。他のメモリブロックとしては、例えば、ファイルシステム上のメモリブロックやスワップ領域内のメモリブロックなどである。
【０１９６】
（サーバＳＶの機能的構成）
図１６は、実施の形態３にかかるサーバの機能的構成を示すブロック図である。図１６において、サーバＳＶは、受信部５０１と、選択部５０２と、送信部５０３と、判断部１６０１と、判定部１６０２と、を含む構成である。各機能部は、具体的には、例えば、図２に示したメモリ２０２などに記憶されたプログラムをＣＰＵ２０１に実行させることにより、または、ネットワークＩ／Ｆ２０３により、その機能を実現する。より具体的には、例えば、各機能部は、図３に示したＶＭホストＨＴ１，ＨＴ２、または、仮想マシンＶＭｋ上で実行されるゲストＯＳｋによって実現される。なお、各機能部の処理結果は、メモリ２０２に記憶される。
【０１９７】
まず、判断部１６０１は、メモリブロックｂｉに記憶されている移行元データｄｉの属性情報に基づいて、メモリブロックｂｉが使用されていない空きの記憶領域か否かを判断する。具体的には、例えば、仮想マシンＶＭ３のゲストＯＳ３が、メモリブロックテーブル１５００を参照して、メモリブロックｂｉがフリーメモリに計上されているメモリブロックか否かを判断する。より具体的には、例えば、ゲストＯＳ３が、メモリブロックｂｉのタイプフィールドに「ｆｒｅｅ」が設定されている場合、メモリブロックｂｉがフリーメモリに計上されているメモリブロックと判断する。
【０１９８】
判定部１６０２は、判断された判断結果に基づいて、移行先のサーバＳＶの物理メモリＰＭに対する移行元データｄｉの複写の要否を判定する。具体的には、例えば、ゲストＯＳ３が、メモリブロックｂｉがフリーメモリに計上されているメモリブロックと判断された場合、移行元データｄｉの複写が不要であると判定する。
【０１９９】
そして、ゲストＯＳ３が、メモリブロックｂｉのステータスをページスティールされた状態に移行させる。ここで、ページスティールとは、例えば、メモリブロックｂｉが他の仮想マシンＶＭに奪われた状態である。メモリブロックｂｉのステータスがページスティールされた状態に移行されたことを表す情報は、ＶＭホストＨＴ１からＶＭホストＨＴ２に転送される。
【０２００】
この結果、例えば、メモリブロックｂｉのステータスが移行先のサーバＳＶ２上で動作する仮想マシンＶＭ３のゲストＯＳ３が用いるメモリブロックテーブル１５００に反映される。また、移行先のサーバＳＶ２において、ゲストＯＳ３は、ページスティールされた状態のメモリブロックｂｉに対するアクセスが発生した場合、物理メモリＰＭ２の空き領域を確保して、メモリブロックｂｉを生成する。
【０２０１】
また、判断部１６０１は、メモリブロックｂｉに記憶されている移行元データｄｉの属性情報に基づいて、移行先のサーバＳＶがアクセス可能な記憶装置に移行元データｄｉが記憶されているか否かを判断する。具体的には、例えば、仮想マシンＶＭ３のゲストＯＳ３が、メモリブロックテーブル１５００を参照して、移行元データｄｉが移行先のサーバＳＶがアクセス可能なファイルシステムに記憶されているか否かを判断する。
【０２０２】
より具体的には、例えば、まず、ゲストＯＳ３が、メモリブロックｂｉのタイプフィールドに「ｔｅｘｔ」または「ｄａｔａ」が設定されているか否かを判断する。ここで、「ｔｅｘｔ」または「ｄａｔａ」が設定されている場合、さらに、ゲストＯＳ３が、メモリブロックｂｉのステータスフィールドに「ｓｙｎｃ」が設定されているか否かを判断する。ここで、「ｓｙｎｃ」が設定されている場合、ゲストＯＳ３が、移行元データｄｉがファイルシステムに記憶されていると判断する。
【０２０３】
そして、ゲストＯＳ３が、移行元データｄｉの複写が不要であると判定する。つぎに、ゲストＯＳ３が、メモリブロックｂｉのステータスをページスティールされた状態に移行させる。また、移行先のサーバＳＶ２において、ゲストＯＳ３は、ページスティールされた状態のメモリブロックｂｉに対するアクセスが発生した場合、物理メモリＰＭ２の空き領域を確保し、ファイルシステムからデータｄｉを取得してメモリブロックｂｉを生成する。
【０２０４】
また、判断部１６０１は、メモリブロックｂｉに記憶されている移行元データｄｉの属性情報に基づいて、メモリＭｋとは異なる他の記憶領域に移行元データｄｉがバックアップされているか否かを判断する。ここで、他の記憶領域は、例えば、移行元のサーバＳＶの磁気ディスクや光ディスクなどの記憶装置に設けられていてもよく、また、移行元のサーバＳＶおよび移行先のサーバＳＶがアクセス可能な記憶装置に設けられていてもよい。
【０２０５】
具体的には、例えば、仮想マシンＶＭ３のゲストＯＳ３が、メモリブロックテーブル１５００を参照して、移行元データｄｉのバッキングストアがあるか否かを判断する。より具体的には、例えば、まず、ゲストＯＳ３が、メモリブロックｂｉのタイプフィールドに「ａｎｎｏ」が設定されているか否かを判断する。ここで、「ａｎｎｏ」が設定されている場合、さらに、ゲストＯＳ３が、メモリブロックｂｉのステータスフィールドに「ｓｙｎｃ」が設定されているか否かを判断する。
【０２０６】
ここで、「ｓｙｎｃ」が設定されている場合、ゲストＯＳ３が、移行元データｄｉのバッキングストアがあると判断する。そして、ゲストＯＳ３が、移行元データｄｉの複写が不要であると判定する。そして、ゲストＯＳ３が、メモリブロックｂｉのステータスをページスティールされた状態に移行させる。
【０２０７】
また、移行先のサーバＳＶ２において、ゲストＯＳ３は、ページスティールされた状態のメモリブロックｂｉに対するアクセスが発生した場合、物理メモリＰＭ２の空き領域を確保し、スワップ領域からデータｄｉを取得してメモリブロックｂｉを生成する。
【０２０８】
また、判断部１６０１は、メモリブロックｂｉに記憶されている移行元データｄｉの属性情報に基づいて、メモリブロックｂｉが初期化されているか否かを判断する。具体的には、例えば、仮想マシンＶＭ３のゲストＯＳ３が、メモリブロックテーブル１５００を参照して、メモリブロックｂｉが初期化されているか否かを判断する。
【０２０９】
より具体的には、例えば、ゲストＯＳ３が、メモリブロックｂｉのステータスフィールドに「ｎｕｌｌ」が設定されているか否かを判断する。ここで、「ｎｕｌｌ」が設定されている場合、ゲストＯＳ３が、メモリブロックｂｉが初期化されていると判断する。そして、ゲストＯＳ３が、移行元データｄｉの複写が不要であると判定する。
【０２１０】
そして、ゲストＯＳ３が、メモリブロックｂｉのステータスをページスティールされた状態に移行させる。また、移行先のサーバＳＶ２において、ゲストＯＳ３は、ページスティールされた状態のメモリブロックｂｉに対するアクセスが発生した場合、物理メモリＰＭ２の空き領域を確保してメモリブロックｂｉを生成する。
【０２１１】
つぎに、実施の形態３にかかるサーバＳＶのデータ移行処理手順について説明する。
【０２１２】
（サーバＳＶのデータ移行処理手順）
図１７は、実施の形態３にかかるサーバのデータ移行処理手順の一例を示すフローチャートである。図１７のフローチャートにおいて、まず、受信部５０１により、仮想マシンＶＭｋの移行指示を受信したか否かを判断する（ステップＳ１７０１）。
【０２１３】
ここで、受信部５０１により、仮想マシンＶＭｋの移行指示を受信するのを待つ（ステップＳ１７０１：Ｎｏ）。そして、受信部５０１により、移行指示を受信した場合（ステップＳ１７０１：Ｙｅｓ）、選択部５０２により、移行指示のあった仮想マシンＶＭｋのメモリＭｋを構成するメモリブロックｂｉの「ｉ」を「ｉ＝１」で初期化する（ステップＳ１７０２）。
【０２１４】
つぎに、選択部５０２により、仮想マシンＶＭｋのメモリＭｋを構成するメモリブロックｂ１〜ｂｎの中からメモリブロックｂｉを選択する（ステップＳ１７０３）。そして、判断部１６０１により、メモリブロックｂｉがフリーメモリに計上されているメモリブロックか否かを判断する（ステップＳ１７０４）。
【０２１５】
ここで、メモリブロックｂｉがフリーメモリに計上されているメモリブロックの場合（ステップＳ１７０４：Ｙｅｓ）、判定部１６０２により、移行元データｄｉの複写が不要であると判定する（ステップＳ１７０５）。そして、判定部１６０２により、メモリブロックｂｉのステータスをページスティールされた状態に移行させて（ステップＳ１７０６）、ステップＳ１７１２に移行する。
【０２１６】
また、ステップＳ１７０４において、メモリブロックｂｉがフリーメモリに計上されていないメモリブロックの場合（ステップＳ１７０４：Ｎｏ）、判断部１６０１により、移行元データｄｉがファイルシステムに記憶されているか否かを判断する（ステップＳ１７０７）。ここで、移行元データｄｉがファイルシステムに記憶されている場合（ステップＳ１７０７：Ｙｅｓ）、ステップＳ１７０５に移行する。
【０２１７】
一方、移行元データｄｉがファイルシステムに記憶されていない場合（ステップＳ１７０７：Ｎｏ）、判断部１６０１により、移行元データｄｉのバッキングストアがあるか否かを判断する（ステップＳ１７０８）。ここで、移行元データｄｉのバッキングストアがある場合（ステップＳ１７０８：Ｙｅｓ）、ステップＳ１７０５に移行する。
【０２１８】
一方、移行元データｄｉのバッキングストアがない場合（ステップＳ１７０８：Ｎｏ）、判断部１６０１により、メモリブロックｂｉが初期化されているか否かを判断する（ステップＳ１７０９）。ここで、メモリブロックｂｉが初期化されている場合（ステップＳ１７０９：Ｙｅｓ）、ステップＳ１７０５に移行する。
【０２１９】
一方、メモリブロックｂｉが初期化されていない場合（ステップＳ１７０９：Ｎｏ）、判定部１６０２により、移行元データｄｉの複写が必要であると判定する（ステップＳ１７１０）。そして、送信部５０３により、メモリブロックｂｉの移行元データｄｉの複写指示を移行先のサーバＳＶに送信する（ステップＳ１７１１）。
【０２２０】
つぎに、選択部５０２により、メモリブロックｂｉの「ｉ」をインクリメントして（ステップＳ１７１２）、「ｉ」が「ｎ」より大きいか否かを判断する（ステップＳ１７１３）。ここで、「ｉ」が「ｎ」以下の場合（ステップＳ１７１３：Ｎｏ）、ステップＳ１７０３に戻る。一方、「ｉ」が「ｎ」より大きい場合（ステップＳ１７１３：Ｙｅｓ）、本フローチャートによる一連の処理を終了する。
【０２２１】
これにより、移行対象となる仮想マシンＶＭｋのメモリＭｋを分割したメモリブロックｂｉごとに、メモリブロックｂｉの移行元データｄｉの複写の要否を判定することができる。なお、ステップＳ１７０６およびステップＳ１７１１の処理は、例えば、すべてのメモリブロックｂ１〜ｂｎについて複写の要否が判定された後、一括して行われることにしてもよい。
【０２２２】
以上説明したように、実施の形態３にかかるサーバＳＶによれば、仮想マシンＶＭｋのメモリブロックｂｉごとに、メモリブロックｂｉに記憶されている移行元データｄｉの属性情報に基づいて、移行元データｄｉの複写の要否を判定することができる。これにより、ライブマイグレーションを行う際に、複写不要なデータｄｉの複写を抑止して、サーバ間のデータ転送量を削減することができる。
【０２２３】
また、サーバＳＶによれば、メモリブロックｂｉがフリーメモリに計上されているメモリブロックか否かを判断することにより、メモリブロックｂｉに記憶されている移行元データｄｉの複写の要否を判定することができる。
【０２２４】
また、サーバＳＶによれば、メモリブロックｂｉに記憶されている移行元データｄｉが移行先のサーバＳＶがアクセス可能なファイルシステムに記憶されているか否かを判断することにより、移行元データｄｉの複写の要否を判定することができる。
【０２２５】
また、サーバＳＶによれば、メモリブロックｂｉに記憶されている移行元データｄｉのバッキングストアがあるか否かを判断することにより、移行元データｄｉの複写の要否を判定することができる。
【０２２６】
また、サーバＳＶによれば、メモリブロックｂｉが初期化されているか否かを判断することにより、メモリブロックｂｉに記憶されている移行元データｄｉの複写の要否を判定することができる。
【０２２７】
なお、本実施の形態で説明したデータ移行方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本データ移行プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本データ移行プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０２２８】
１０１，１０２  計算機
１１０，１１０−１〜１１０−４，１２０，１２０−１〜１２０−９  記憶領域
３００  ネットワークシステム
４００，８００  メモリ管理テーブル
５０１  受信部
５０２  選択部
５０３  送信部
５０４，１６０２  判定部
５０５  比較部
５０６  書込部
６００，９００  ハッシュテーブル
１５００  メモリブロックテーブル
１６０１  判断部
ＳＶ，ＳＶ１，ＳＶ２  サーバ
ＶＭ，ＶＭｋ  仮想マシン
【図１】
2012081099.tif 000003
【図２】
2012081099.tif 000004
【図３】
2012081099.tif 000005
【図４】
2012081099.tif 000006
【図５】
2012081099.tif 000007
【図６】
2012081099.tif 000008
【図７】
2012081099.tif 000009
【図８】
2012081099.tif 000010
【図９】
2012081099.tif 000011
【図１０】
2012081099.tif 000012
【図１１】
2012081099.tif 000013
【図１２】
2012081099.tif 000014
【図１３】
2012081099.tif 000015
【図１４】
2012081099.tif 000016
【図１５】
2012081099.tif 000017
【図１６】
2012081099.tif 000018
【図１７】
2012081099.tif 000019
【手続補正書】
【提出日】平成25年6月20日(2013.6.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータに、
データの移行元である第１計算機のメモリを構成するメモリブロックごとに記憶されている移行元データから算出したハッシュ値とデータの移行先である第２計算機のメモリを構成するメモリブロックごとに記憶されている移行先データから算出したハッシュ値とを比較し、
前記第１計算機のいずれかのメモリブロックに対応するハッシュ値が前記第２計算機のいずれかのメモリブロックに対応するハッシュ値と一致するように前記第２計算機のデータを更新する、
処理を実行させることを特徴とするデータ移行プログラム。
【請求項２】
前記比較する処理は、
複数の異なるハッシュ関数を用いて前記移行元データから算出した複数のハッシュ値と、前記複数の異なるハッシュ関数を用いて前記移行先データから算出した複数のハッシュ値とを比較し、
前記更新する処理は、
前記第１計算機のいずれかのメモリブロックに対応する複数のハッシュ値が前記第２計算機のいずれかのメモリブロックに対応する複数のハッシュ値と一致するように前記第２計算機のデータを更新することを特徴とする請求項１に記載のデータ移行プログラム。
【請求項３】
前記コンピュータに、
所定の抽出ルールに基づいて前記移行元データから抽出した部分データと、前記所定の抽出ルールに基づいて前記移行先データから抽出した部分データとを比較する処理を実行させ、
前記更新する処理は、
前記第１計算機のいずれかのメモリブロックに対応するハッシュ値および部分データが前記第２計算機のいずれかのメモリブロックに対応するハッシュ値および部分データと一致するように前記第２計算機のデータを更新することを特徴とする請求項１に記載のデータ移行プログラム。
【請求項４】
前記コンピュータに、
前記第１計算機と前記第２計算機との間の双方向の通信路のうち通信品質の高い通信路を選択し、
選択した前記通信路により前記第１計算機と前記第２計算機との間で送信または受信される、所定の抽出ルールに基づいて前記移行元データから抽出した部分データと、前記所定の抽出ルールに基づいて前記移行先データから抽出した部分データとを比較する、処理を実行させ、
前記更新する処理は、
前記第１計算機のいずれかのメモリブロックに対応するハッシュ値および部分データが前記第２計算機のいずれかのメモリブロックに対応するハッシュ値および部分データと一致するように前記第２計算機のデータを更新することを特徴とする請求項１に記載のデータ移行プログラム。
【請求項５】
前記コンピュータに、
前記第１計算機および前記第２計算機がアクセス可能なストレージ内の、前記移行先データを記憶する記憶領域のアドレスと、前記移行元データを記憶する記憶領域のアドレスとを比較する処理を実行させ、
前記更新する処理は、
前記第１計算機のいずれかのメモリブロックに対応する前記ストレージ内の記憶領域のアドレスが前記第２計算機のメモリブロックに対応する前記ストレージ内の記憶領域のアドレスと不一致の場合に、前記第１計算機のいずれかのメモリブロックに対応するハッシュ値が前記第２計算機のいずれかのメモリブロックに対応するハッシュ値と一致するように前記第２計算機のデータを更新することを特徴とする請求項１に記載のデータ移行プログラム。
【請求項６】
前記コンピュータに、
データの移行元である第１計算機のメモリを構成するメモリブロックごとに記憶されている移行元データの属性情報に基づいて、前記移行元データを記憶する前記メモリブロックが使用されていない空きのメモリブロックか否かを判断することにより、データの移行先である第２計算機のメモリに対する前記移行元データの複写の要否を判定する処理を実行させ、
前記更新する処理は、
判定した結果に基づいて、前記第１計算機のいずれかのメモリブロックに記憶されている移行元データが前記第２計算機のいずれかのメモリブロックに記憶されている移行先データと一致するように前記第２計算機のデータを更新することを特徴とする請求項１に記載のデータ移行プログラム。
【請求項７】
前記コンピュータに、
データの移行元である第１計算機のメモリを構成するメモリブロックごとに記憶されている移行元データの属性情報に基づいて、データの移行先である第２計算機がアクセス可能な記憶装置に前記移行元データが記憶されているか否か判断することにより、前記第２計算機のメモリに対する前記移行元データの複写の要否を判定する処理を実行させ、
前記更新する処理は、
判定した結果に基づいて、前記第１計算機のいずれかのメモリブロックに記憶されている移行元データが前記第２計算機のいずれかのメモリブロックに記憶されている移行先データと一致するように前記第２計算機のデータを更新することを特徴とする請求項１に記載のデータ移行プログラム。
【請求項８】
前記コンピュータに、
データの移行元である第１計算機のメモリを構成するメモリブロックごとに記憶されている移行元データの属性情報に基づいて、前記第１計算機のメモリとは異なる他の記憶領域に前記移行元データがバックアップされているか否か判断することにより、データの移行先である第２計算機のメモリに対する前記移行元データの複写の要否を判定する処理を実行させ、
前記更新する処理は、
判定した結果に基づいて、前記第１計算機のいずれかのメモリブロックに記憶されている移行元データが前記第２計算機のいずれかのメモリブロックに記憶されている移行先データと一致するように前記第２計算機のデータを更新することを特徴とする請求項１に記載のデータ移行プログラム。
【請求項９】
前記コンピュータに、
データの移行元である第１計算機のメモリを構成するメモリブロックごとに記憶されている移行元データの属性情報に基づいて、前記移行元データを記憶する前記メモリブロックが初期化されているか否かを判断することにより、データの移行先である第２計算機のメモリに対する前記移行元データの複写の要否を判定する処理を実行させ、
前記更新する処理は、
判定した結果に基づいて、前記第１計算機のいずれかのメモリブロックに記憶されている移行元データが前記第２計算機のいずれかのメモリブロックに記憶されている移行先データと一致するように前記第２計算機のデータを更新することを特徴とする請求項１に記載のデータ移行プログラム。
【請求項１０】
データの移行元である第１計算機のメモリを構成するメモリブロックごとに記憶されている移行元データから算出したハッシュ値とデータの移行先である第２計算機のメモリを構成するメモリブロックごとに記憶されている移行先データから算出したハッシュ値とを比較する比較部と、
前記第１計算機のいずれかのメモリブロックに対応するハッシュ値が前記第２計算機のいずれかのメモリブロックに対応するハッシュ値と一致するように前記第２計算機のデータを更新する更新部と、
を有することを特徴とする計算機。
【請求項１１】
コンピュータが、
データの移行元である第１計算機のメモリを構成するメモリブロックごとに記憶されている移行元データから算出したハッシュ値とデータの移行先である第２計算機のメモリを構成するメモリブロックごとに記憶されている移行先データから算出したハッシュ値とを比較し、
前記第１計算機のいずれかのメモリブロックに対応するハッシュ値が前記第２計算機のいずれかのメモリブロックに対応するハッシュ値と一致するように前記第２計算機のデータを更新する、
処理を実行することを特徴とするデータ移行方法。
【手続補正書】
【提出日】平成25年12月24日(2013.12.24)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータに、
データの移行元である第１計算機とデータの移行先である第２計算機との間の双方向の通信路のうち通信品質の高い通信路を選択し、
前記第１計算機のメモリを構成するメモリブロックごとに記憶されている移行元データから算出したハッシュ値と前記第２計算機のメモリを構成するメモリブロックごとに記憶されている移行先データから算出したハッシュ値とを比較し、選択した前記通信路により前記第１計算機と前記第２計算機との間で送信または受信される、所定の抽出ルールに基づいて前記移行元データから抽出した部分データと、前記所定の抽出ルールに基づいて前記移行先データから抽出した部分データとを比較し、
前記第１計算機のいずれかのメモリブロックに対応するハッシュ値および部分データが前記第２計算機のいずれかのメモリブロックに対応するハッシュ値および部分データと一致するように前記第２計算機のデータを更新する、
処理を実行させることを特徴とするデータ移行プログラム。
【請求項２】
前記比較する処理は、
複数の異なるハッシュ関数を用いて前記移行元データから算出した複数のハッシュ値と、前記複数の異なるハッシュ関数を用いて前記移行先データから算出した複数のハッシュ値とを比較し、選択した前記通信路により前記第１計算機と前記第２計算機との間で送信または受信される、所定の抽出ルールに基づいて前記移行元データから抽出した部分データと、前記所定の抽出ルールに基づいて前記移行先データから抽出した部分データとを比較し、
前記更新する処理は、
前記第１計算機のいずれかのメモリブロックに対応する複数のハッシュ値および部分データが前記第２計算機のいずれかのメモリブロックに対応する複数のハッシュ値および部分データと一致するように前記第２計算機のデータを更新することを特徴とする請求項１に記載のデータ移行プログラム。
【請求項３】
前記コンピュータに、
前記第１計算機および前記第２計算機がアクセス可能なストレージ内の、前記移行先データを記憶する記憶領域のアドレスと、前記移行元データを記憶する記憶領域のアドレスとを比較する処理を実行させ、
前記更新する処理は、
前記第１計算機のいずれかのメモリブロックに対応する前記ストレージ内の記憶領域のアドレスが前記第２計算機のメモリブロックに対応する前記ストレージ内の記憶領域のアドレスと不一致の場合に、前記第１計算機のいずれかのメモリブロックに対応するハッシュ値および部分データが前記第２計算機のいずれかのメモリブロックに対応するハッシュ値および部分データと一致するように前記第２計算機のデータを更新することを特徴とする請求項１に記載のデータ移行プログラム。
【請求項４】
前記コンピュータに、
データの移行元である第１計算機のメモリを構成するメモリブロックごとに記憶されている移行元データの属性情報に基づいて、前記移行元データを記憶する前記メモリブロックが使用されていない空きのメモリブロックか否かを判断することにより、データの移行先である第２計算機のメモリに対する前記移行元データの複写の要否を判定する処理を実行させ、
前記更新する処理は、
判定した結果に基づいて、前記第１計算機のいずれかのメモリブロックに記憶されている移行元データが前記第２計算機のいずれかのメモリブロックに記憶されている移行先データと一致するように前記第２計算機のデータを更新することを特徴とする請求項１に記載のデータ移行プログラム。
【請求項５】
前記コンピュータに、
データの移行元である第１計算機のメモリを構成するメモリブロックごとに記憶されている移行元データの属性情報に基づいて、データの移行先である第２計算機がアクセス可能な記憶装置に前記移行元データが記憶されているか否か判断することにより、前記第２計算機のメモリに対する前記移行元データの複写の要否を判定する処理を実行させ、
前記更新する処理は、
判定した結果に基づいて、前記第１計算機のいずれかのメモリブロックに記憶されている移行元データが前記第２計算機のいずれかのメモリブロックに記憶されている移行先データと一致するように前記第２計算機のデータを更新することを特徴とする請求項１に記載のデータ移行プログラム。
【請求項６】
前記コンピュータに、
データの移行元である第１計算機のメモリを構成するメモリブロックごとに記憶されている移行元データの属性情報に基づいて、前記第１計算機のメモリとは異なる他の記憶領域に前記移行元データがバックアップされているか否か判断することにより、データの移行先である第２計算機のメモリに対する前記移行元データの複写の要否を判定する処理を実行させ、
前記更新する処理は、
判定した結果に基づいて、前記第１計算機のいずれかのメモリブロックに記憶されている移行元データが前記第２計算機のいずれかのメモリブロックに記憶されている移行先データと一致するように前記第２計算機のデータを更新することを特徴とする請求項１に記載のデータ移行プログラム。
【請求項７】
前記コンピュータに、
データの移行元である第１計算機のメモリを構成するメモリブロックごとに記憶されている移行元データの属性情報に基づいて、前記移行元データを記憶する前記メモリブロックが初期化されているか否かを判断することにより、データの移行先である第２計算機のメモリに対する前記移行元データの複写の要否を判定する処理を実行させ、
前記更新する処理は、
判定した結果に基づいて、前記第１計算機のいずれかのメモリブロックに記憶されている移行元データが前記第２計算機のいずれかのメモリブロックに記憶されている移行先データと一致するように前記第２計算機のデータを更新することを特徴とする請求項１に記載のデータ移行プログラム。
【請求項８】
データの移行元である第１計算機とデータの移行先である第２計算機との間の双方向の通信路のうち通信品質の高い通信路を選択する選択部と、
前記第１計算機のメモリを構成するメモリブロックごとに記憶されている移行元データから算出したハッシュ値と前記第２計算機のメモリを構成するメモリブロックごとに記憶されている移行先データから算出したハッシュ値とを比較し、選択した前記通信路により前記第１計算機と前記第２計算機との間で送信または受信される、所定の抽出ルールに基づいて前記移行元データから抽出した部分データと、前記所定の抽出ルールに基づいて前記移行先データから抽出した部分データとを比較する比較部と、
前記第１計算機のいずれかのメモリブロックに対応するハッシュ値および部分データが前記第２計算機のいずれかのメモリブロックに対応するハッシュ値および部分データと一致するように前記第２計算機のデータを更新する更新部と、
を有することを特徴とする計算機。
【請求項９】
コンピュータが、
データの移行元である第１計算機とデータの移行先である第２計算機との間の双方向の通信路のうち通信品質の高い通信路を選択し、
前記第１計算機のメモリを構成するメモリブロックごとに記憶されている移行元データから算出したハッシュ値と前記第２計算機のメモリを構成するメモリブロックごとに記憶されている移行先データから算出したハッシュ値とを比較し、選択した前記通信路により前記第１計算機と前記第２計算機との間で送信または受信される、所定の抽出ルールに基づいて前記移行元データから抽出した部分データと、前記所定の抽出ルールに基づいて前記移行先データから抽出した部分データとを比較し、
前記第１計算機のいずれかのメモリブロックに対応するハッシュ値および部分データが前記第２計算機のいずれかのメモリブロックに対応するハッシュ値および部分データと一致するように前記第２計算機のデータを更新する、
処理を実行することを特徴とするデータ移行方法。
【国際調査報告】
2012081099.tif 000020
2012081099.tif 000021