(57)【要約】【課題】ネットワーク出力を比較する処理の効率を向上させ、仮想マシンの同期処理の実行頻度を削減すること。【解決手段】プライマリ物理マシンは、プライマリ仮想マシンネットワーク出力専用バッファ１２１に記憶されたネットワーク出力とセカンダリ仮想マシンネットワーク出力専用バッファ１２２に記憶されたネットワーク出力とを比較し、ネットワーク出力が一致するか否かを判定する。この結果、所定の時間内においてプライマリ仮想マシンネットワーク出力専用バッファ１２１に記憶されたネットワーク出力とセカンダリ仮想マシンネットワーク出力専用バッファ１２２に記憶されたネットワーク出力とが一致しないと判定された場合には、チェックポイント転送処理を行う。【選択図】図２
2016212485.tif 000002
【特許請求の範囲】
【請求項１】
第一の物理マシン上で動作するプライマリ仮想マシンと、第二の物理マシン上で動作するセカンダリ仮想マシンとを有する仮想マシン同期システムであって、
前記第一の物理マシンは、
前記プライマリ仮想マシンにより外部のプログラムへ第一の出力情報を出力する処理を検知した場合に、該第一の出力情報を第一のバッファに格納する格納部と、
前記セカンダリ仮想マシンから転送された第二の出力情報を受信し、該第二の出力情報を第二のバッファに格納する受信部と、
前記第一のバッファに記憶された所定範囲の第一の出力情報と前記第二のバッファに記憶された所定範囲の第二の出力情報とを比較し、前記第一の出力情報と前記第二の出力情報とが一致するか否かを判定する比較部と、
前記比較部によって前記第一の出力情報と前記第二の出力情報とが一致すると判定された場合には、前記第一の出力情報を前記プログラムに送信する送信部と、
前記比較部によって前記第一の出力情報と前記第二の出力情報とが一致しないと判定された場合には、前記プライマリ仮想マシンの状態を前記セカンダリ仮想マシンに転送するチェックポイント転送処理を行う転送部と、
を有することを特徴とする仮想マシン同期システム。
【請求項２】
前記比較部により前記第一の出力情報と前記第二の出力情報との比較を開始してから所定の時間が経過したかを監視する監視部をさらに有し、
前記転送部は、前記監視部によって前記所定の時間が経過したことが監視されるまでの間に、前記比較部によって前記第一の出力情報と前記第二の出力情報とが一致しなかったと判定された場合には、前記チェックポイント転送処理を行うことを特徴とする請求項１に記載の仮想マシン同期システム。
【請求項３】
前記第一のバッファに記憶される第一の出力情報が、所定のパケット数を超えたかを監視する監視部をさらに有し、
前記転送部は、前記監視部によって前記第一のバッファに記憶される第一の出力情報が、所定のパケット数を超えることが監視されるまでの間に、前記比較部によって前記第一の出力情報と前記第二の出力情報とが一致しなかったと判定された場合には、前記チェックポイント転送処理を行うことを特徴とする請求項１に記載の仮想マシン同期システム。
【請求項４】
前記第二のバッファとして、格納される第二の出力情報の種別がそれぞれ異なる複数の第二のバッファを有し、
前記受信部は、前記セカンダリ仮想マシンから転送された第二の出力情報を受信し、該第二の出力情報の種別に応じて、前記複数の第二のバッファのうち、いずれかのバッファに前記第二の出力情報を格納し、
前記比較部は、同一種別の第一の出力情報と第二の出力情報とを比較し、前記第一の出力情報と前記第二の出力情報とが一致するか否かを判定することを特徴とする請求項１〜３のいずれか一つに記載の仮想マシン同期システム。
【請求項５】
第一の物理マシン上で動作するプライマリ仮想マシンと、第二の物理マシン上で動作するセカンダリ仮想マシンとを有する仮想マシン同期システムによって実行される仮想マシン同期方法であって、
前記第一の物理マシンが、
前記プライマリ仮想マシンにより外部のプログラムへ第一の出力情報を出力する処理を検知した場合に、該第一の出力情報を第一のバッファに格納する格納工程と、
前記セカンダリ仮想マシンから転送された第二の出力情報を受信し、該第二の出力情報を第二のバッファに格納する受信工程と、
前記第一のバッファに記憶された所定範囲の第一の出力情報と前記第二のバッファに記憶された所定範囲の第二の出力情報とを比較し、前記第一の出力情報と前記第二の出力情報とが一致するか否かを判定する比較工程と、
前記比較工程によって前記第一の出力情報と前記第二の出力情報とが一致すると判定された場合には、前記第一の出力情報を前記プログラムに送信する送信工程と、
前記比較工程によって前記第一の出力情報と前記第二の出力情報とが一致しないと判定された場合には、前記プライマリ仮想マシンの状態を前記セカンダリ仮想マシンに転送するチェックポイント転送処理を行う転送工程と、
を含んだことを特徴とする仮想マシン同期方法。
【請求項６】
第一の物理マシン上で動作するプライマリ仮想マシンにより外部のプログラムへ第一の出力情報を出力する処理を検知した場合に、該第一の出力情報を第一のバッファに格納する格納ステップと、
第二の物理マシン上で動作するセカンダリ仮想マシンから転送された第二の出力情報を受信し、該第二の出力情報を第二のバッファに格納する受信ステップと、
前記第一のバッファに記憶された所定範囲の第一の出力情報と前記第二のバッファに記憶された所定範囲の第二の出力情報とを比較し、前記第一の出力情報と前記第二の出力情報とが一致するか否かを判定する比較ステップと、
前記比較ステップによって前記第一の出力情報と前記第二の出力情報とが一致すると判定された場合には、前記第一の出力情報を前記プログラムに送信する送信ステップと、
前記比較ステップによって前記第一の出力情報と前記第二の出力情報とが一致しないと判定された場合には、前記プライマリ仮想マシンの状態を前記セカンダリ仮想マシンに転送するチェックポイント転送処理を行う転送ステップと、
をコンピュータに実行させるための仮想マシン同期プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想マシン同期システム、仮想マシン同期方法および仮想マシン同期プログラムに関する。
【背景技術】
【０００２】
従来、計算機（以後、物理マシンという）上のオペレーティングシステム（ＯＳ）において、ソフトウェアによってエミュレートされたハードウェア上で動作する仮想計算機（仮想マシン）の中で動作するアプリケーションを対象としたフォールトトレラントシステムが知られている。
【０００３】
このようなフォールトトレラントシステムにおける仮想マシン上のアプリケーションがネットワークを介してクライアントプログラムと通信を行う場合において、異なる物理マシン上の仮想マシンの同期を取るには、ライブマイグレーションの仕組を利用して、プライマリ仮想マシンの実行状態とディスク状態をセカンダリ仮想マシンに転送するチェックポイント転送処理を行うことが一般的である。このチェックポイント転送処理は、処理負荷が大きいため、頻繁に実行するとアプリケーションの処理性能が低下する。
【０００４】
ところが、アプリケーションの処理が進むとプライマリとセカンダリの状態が同一でなくなる可能性が高くなるため、同期状態を維持しつつ、チェックポイント転送処理の頻度を少なくすることが求められている。
【０００５】
これに対して、プライマリ仮想マシンへのネットワーク入力を複製することでプライマリとセカンダリのネットワーク入力の同期を担保し、それぞれのネットワーク出力を比較して、比較結果が一致しない場合にのみチェックポイント転送処理を行う技術があった。
【０００６】
例えば、各仮想マシンからのＬ２フレーム出力（以後、ネットワーク出力という）を、クライアントプログラムへ返答する前に集め、各仮想マシンから出力された順番に各ネットワーク出力内容の比較を行う。比較の結果、ネットワーク出力内容が一致しない場合においてのみ、チェックポイント転送処理を実行し、同期状態とした上で、プライマリ仮想マシンのネットワーク出力をクライアントプログラムへ返答する。
【０００７】
また、比較の結果、ネットワーク出力内容が一致する場合は、プライマリ仮想マシンとセカンダリ仮想マシンは同一の返答ができるという同期状態であるとし、チェックポイント転送処理を行わずに、プライマリ仮想マシンのネットワーク出力をクライアントプログラムへ返答する。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】YaoZu  Dong,  Wei  Ye,  YunHong  Jiang,  Ian  Pratt,  ShiQing  Ma,  Jian  Li,  HaiBing  Guan,  “COLO:  COarse-grained  LOck-stepping  Virtual  Machines  for  Non-stop  Service”,4th  ACM  Symposium  on  Cloud  Computing（SoCC2013），Oct，2013
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、上記したネットワーク出力を比較して、比較結果が一致しない場合にのみチェックポイント転送処理を行う技術では、ネットワーク出力の順番が一致しているかどうかも比較の対象としているため、例えば、多くのアプリケーションがマルチプロセスで動作するような場合に、チェックポイント転送処理が多発する場合があるという課題があった。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するために、本発明の仮想マシン同期システムは、第一の物理マシン上で動作するプライマリ仮想マシンと、第二の物理マシン上で動作するセカンダリ仮想マシンとを有する仮想マシン同期システムであって、前記第一の物理マシンは、前記プライマリ仮想マシンにより外部のプログラムへ第一の出力情報を出力する処理を検知した場合に、該第一の出力情報を第一のバッファに格納する格納部と、前記セカンダリ仮想マシンから転送された第二の出力情報を受信し、該第二の出力情報を第二のバッファに格納する受信部と、前記第一のバッファに記憶された所定範囲の第一の出力情報と前記第二のバッファに記憶された所定範囲の第二の出力情報とを比較し、前記第一の出力情報と前記第二の出力情報とが一致するか否かを判定する比較部と、前記比較部によって前記第一の出力情報と前記第二の出力情報とが一致すると判定された場合には、前記第一の出力情報を前記プログラムに送信する送信部と、前記比較部によって前記第一の出力情報と前記第二の出力情報とが一致しないと判定された場合には、前記プライマリ仮想マシンの状態を前記セカンダリ仮想マシンに転送するチェックポイント転送処理を行う転送部と、を有することを特徴とする。
【００１１】
また、本発明の仮想マシン同期方法は、第一の物理マシン上で動作するプライマリ仮想マシンと、第二の物理マシン上で動作するセカンダリ仮想マシンとを有する仮想マシン同期システムによって実行される仮想マシン同期方法であって、前記第一の物理マシンが、前記プライマリ仮想マシンにより外部のプログラムへ第一の出力情報を出力する処理を検知した場合に、該第一の出力情報を第一のバッファに格納する格納工程と、前記セカンダリ仮想マシンから転送された第二の出力情報を受信し、該第二の出力情報を第二のバッファに格納する受信工程と、前記第一のバッファに記憶された所定範囲の第一の出力情報と前記第二のバッファに記憶された所定範囲の第二の出力情報とを比較し、前記第一の出力情報と前記第二の出力情報とが一致するか否かを判定する比較工程と、前記比較工程によって前記第一の出力情報と前記第二の出力情報とが一致すると判定された場合には、前記第一の出力情報を前記プログラムに送信する送信工程と、前記比較工程によって前記第一の出力情報と前記第二の出力情報とが一致しないと判定された場合には、前記プライマリ仮想マシンの状態を前記セカンダリ仮想マシンに転送するチェックポイント転送処理を行う転送工程と、を含んだことを特徴とする。
【００１２】
また、本発明の仮想マシン同期プログラムは、第一の物理マシン上で動作するプライマリ仮想マシンにより外部のプログラムへ第一の出力情報を出力する処理を検知した場合に、該第一の出力情報を第一のバッファに格納する格納ステップと、第二の物理マシン上で動作するセカンダリ仮想マシンから転送された第二の出力情報を受信し、該第二の出力情報を第二のバッファに格納する受信ステップと、前記第一のバッファに記憶された所定範囲の第一の出力情報と前記第二のバッファに記憶された所定範囲の第二の出力情報とを比較し、前記第一の出力情報と前記第二の出力情報とが一致するか否かを判定する比較ステップと、前記比較ステップによって前記第一の出力情報と前記第二の出力情報とが一致すると判定された場合には、前記第一の出力情報を前記プログラムに送信する送信ステップと、前記比較ステップによって前記第一の出力情報と前記第二の出力情報とが一致しないと判定された場合には、前記プライマリ仮想マシンの状態を前記セカンダリ仮想マシンに転送するチェックポイント転送処理を行う転送ステップと、をコンピュータに実行させる。
【発明の効果】
【００１３】
本発明によれば、ネットワーク出力を比較する処理の効率を向上させ、仮想マシンの同期処理の実行頻度を削減することができるという効果を奏する。
【図面の簡単な説明】
【００１４】
【図１】図１は、第一の実施の形態に係る仮想マシン同期システムの構成の一例を示す図である。
【図２】図２は、第一の実施の形態に係るプライマリ物理マシン内のエミュレータおよびセカンダリ物理マシン内のエミュレータの機能構成を示すブロック図である。
【図３】図３は、各専用バッファから取り出したネットワーク出力内容を比較する処理を説明する図である。
【図４】図４は、第一の実施の形態に係るプライマリ物理マシンにおけるプライマリ仮想マシンのネットワーク出力の蓄積処理の流れを示すフローチャートである。
【図５】図５は、第一の実施の形態に係るプライマリ物理マシンにおけるセカンダリ物理マシンのネットワーク出力の蓄積処理の流れを示すフローチャートである。
【図６】図６は、第一の実施の形態に係るプライマリ物理マシンにおける仮想マシン同期処理の流れを示すフローチャートである。
【図７】図７は、仮想マシン同期プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１５】
以下に、本願に係る仮想マシン同期システム、仮想マシン同期方法および仮想マシン同期プログラムの実施形態を図面に基づいて詳細に説明する。なお、この実施形態により本願に係る仮想マシン同期システム、仮想マシン同期方法および仮想マシン同期プログラム
が限定されるものではない。
【００１６】
［第一の実施の形態］
以下の実施の形態では、第一の実施の形態に係る仮想マシン同期システムの構成、プライマリ物理マシン内のエミュレータおよびセカンダリ物理マシン内のエミュレータの機能構成、プライマリ物理マシンの処理の流れを順に説明し、最後に第一の実施の形態による効果を説明する。
【００１７】
［仮想マシン同期システムの構成］
図１は、第一の実施の形態に係る仮想マシン同期システムの構成の一例を示す図である。第一の実施の形態に係る仮想マシン同期システム１は、プライマリ物理マシン１０と、セカンダリ物理マシン２０とを有するフォールトトレラントシステムである。
【００１８】
プライマリ物理マシン１０は、プライマリ仮想マシン１１、プライマリエミュレータ１２、ＶＭＭ（Virtual  Machine  Monitor）１３、物理マシンカーネル１４およびネットワーク（ＮＷ）入力複製部１５を有する。セカンダリ物理マシン２０は、セカンダリ仮想マシン２１、セカンダリエミュレータ２２、ＶＭＭ２３および物理マシンカーネル２４を有する。
【００１９】
仮想マシン同期システム１では、プライマリ物理マシン１０およびセカンダリ物理マシン２０上のオペレーティングシステムにおいてソフトウェアによってエミュレートされたハードウェア上でプライマリ仮想マシン１１およびセカンダリ仮想マシン２１が動作する。
【００２０】
プライマリエミュレータ１２は、プライマリ仮想マシン１１からのネットワーク出力（Ｌ２フレーム）を格納するネットワーク出力格納部１２ａと、プライマリ仮想マシン１１とセカンダリ仮想マシン２１のネットワーク出力を収集して出力内容の比較を行うネットワーク出力制御部１２ｂと、プライマリ仮想マシン１１とセカンダリ仮想マシン２１が同期状態ではないと判断した場合にチェックポイント転送を実施するチェックポイント転送部１２ｃと、送信部１２ｄとを有する。
【００２１】
セカンダリエミュレータ２２は、セカンダリ仮想マシン２１からのネットワーク出力をフックするネットワーク出力フック部２２ａと、フックしたネットワーク出力をネットワーク出力制御部１２ｂまで転送するネットワーク出力転送部２２ｂと、チェックポイント転送を受信してセカンダリ仮想マシン２１の状態をプライマリ仮想マシン１１と同期状態にするチェックポイント転送受信部２２ｃを有する。
【００２２】
ＶＭＭ１３、２３は、仮想マシンの生成など仮想マシンに関する各種制御を実行するハイパーバイザ等のソフトウェアである。物理マシンカーネル１４、２４は、動作中のプログラムの実行状態を管理したり、ハードウェア資源を管理したりする。ネットワーク入力複製部１５は、クライアントプログラム３０からのネットワーク入力を複製してセカンダリ物理マシン２０へ転送する。
【００２３】
［エミュレータの構成］
次に、図２を用いて、図１に示したプライマリ物理マシン１０内のプライマリエミュレータ１２およびセカンダリ物理マシン２０内のセカンダリエミュレータ２２の機能構成を説明する。図２は、第一の実施の形態に係るプライマリ物理マシン内のエミュレータおよびセカンダリ物理マシン内のエミュレータの機能構成を示すブロック図である。
【００２４】
図２に示すように、プライマリエミュレータ１２は、ネットワーク出力格納部１２ａ、ネットワーク出力制御部１２ｂ、チェックポイント転送部１２ｃおよび送信部１２ｄを有する。以下にこれらの各部の処理を説明する。
【００２５】
ネットワーク出力格納部１２ａは、プライマリ仮想マシン１１により外部のクライアントプログラム３０へネットワーク出力を出力する処理をフックした場合に、該ネットワーク出力を後述するプライマリ仮想マシンネットワーク出力専用バッファ１２１に格納する。
【００２６】
ネットワーク出力制御部１２ｂは、プライマリ仮想マシンネットワーク出力専用バッファ１２１と、セカンダリ仮想マシンネットワーク出力専用バッファ１２２と、セカンダリ仮想マシンネットワーク受信部１２３と、閾値設定部１２４と、閾値超過監視部１２５と、ネットワーク出力ペア比較部１２６と、返答命令発行部１２７と、チェックポイント転送命令発行部１２８とを有する。
【００２７】
プライマリ仮想マシンネットワーク出力専用バッファ１２１は、フックされたプライマリ仮想マシン１１からのネットワーク出力を出力された順番に記憶する。セカンダリ仮想マシンネットワーク出力専用バッファ１２２は、セカンダリ物理マシン２０から転送されてきたセカンダリ仮想マシン２１のネットワーク出力を記憶する。
【００２８】
セカンダリ仮想マシンネットワーク受信部１２３は、セカンダリ仮想マシン２１から転送されたネットワーク出力を受信し、該ネットワーク出力をセカンダリ仮想マシンネットワーク出力専用バッファ１２２に格納する。
【００２９】
閾値設定部１２４は、探索を継続する期間(タイムアウト時間など)を示す閾値を設定する。閾値超過監視部１２５は、ネットワーク出力ペア比較部１２６によりネットワーク出力同士の比較を開始してから所定の時間が経過したかを監視する。具体的には、閾値超過監視部１２５は、ネットワーク出力ペア比較部１２６がネットワーク出力のペアを探索する処理を実行中に、閾値設定部１２４により設定された閾値を超過していないかを監視する。
【００３０】
ここで、閾値を超過した場合には、後述するチェックポイント転送部１２ｃが、チェックポイント転送処理を実施して、プライマリ仮想マシン１１とセカンダリ仮想マシン２１を同期状態にし、プライマリ仮想マシン１１のネットワーク出力をユーザプログラム側へ返答するようにする。これにより、バッファ内でペアとなるネットワーク出力を発見するのに時間を要してしまい、いつまでもクライアントプログラム３０側へネットワーク出力が返送されないことを防ぎつつ、クライアントプログラム３０への最大返答時間を保証することが可能となる。
【００３１】
ネットワーク出力ペア比較部１２６は、プライマリ仮想マシンネットワーク出力専用バッファ１２１に記憶された所定範囲のネットワーク出力とセカンダリ仮想マシンネットワーク出力専用バッファ１２２に記憶された所定範囲のネットワーク出力とを比較し、ネットワーク出力が一致するか否かを判定する。具体的には、ネットワーク出力ペア比較部１２６は、所定の時間内において、各バッファ１２１、１２２から同一の内容を持つネットワーク出力のペアを探索する。
【００３２】
このように、プライマリ仮想マシン１１のネットワーク出力を出力された順番に複数個バッファするプライマリ仮想マシンネットワーク出力専用バッファ１２１と、セカンダリ仮想マシン２１のネットワーク出力を複数個バッファするセカンダリ仮想マシンネットワーク出力専用バッファ１２２とでネットワーク出力内容の比較を行う際に、プライマリ仮想マシンネットワーク出力専用バッファ１２１からネットワーク出力を取り出し、当該ネットワーク出力とペアとなる同一の内容を持つネットワーク出力を、セカンダリ仮想マシンネットワーク出力専用バッファ１２２の中から探索する。これにより、ネットワーク出力の順序の違いが頻発する場合においても、チェックポイント転送処理の実行頻度の削減が可能となる。
【００３３】
返答命令発行部１２７は、プライマリ仮想マシンネットワーク出力専用バッファ１２１に記憶されたネットワーク出力をクライアントプログラム３０に送信する返答命令を送信部１２ｄに発行する。具体的には、返答命令発行部１２７は、ネットワーク出力ペア比較部１２６によって所定の時間内に各バッファ１２１、１２２から同一の内容を持つネットワーク出力のペアが探索された場合に、返答命令を送信部１２ｄに発行する。
【００３４】
チェックポイント転送命令発行部１２８は、チェックポイント転送の実行命令をチェックポイント転送部１２ｃに発行する。具体的には、チェックポイント転送命令発行部１２８は、閾値超過監視部１２５によりネットワーク出力のペアを探索する処理が閾値を超過して行われていると判定された場合には、チェックポイント転送の実行命令をチェックポイント転送部１２ｃに発行する。
【００３５】
チェックポイント転送部１２ｃは、ネットワーク出力ペア比較部１２６によってプライマリ仮想マシンネットワーク出力専用バッファ１２１に記憶されたネットワーク出力とセカンダリ仮想マシンネットワーク出力専用バッファ１２２に記憶されたネットワーク出力とが一致しないと判定された場合には、プライマリ仮想マシン１１の状態をセカンダリ仮想マシン２１に転送するチェックポイント転送処理を行う。
【００３６】
具体的には、チェックポイント転送部１２ｃは、所定の時間内においてプライマリ仮想マシンネットワーク出力専用バッファ１２１に記憶されたネットワーク出力とセカンダリ仮想マシンネットワーク出力専用バッファ１２２に記憶されたネットワーク出力とが一致しないと判定された場合には、チェックポイント転送処理を行う。
【００３７】
送信部１２ｄは、ネットワーク出力ペア比較部１２６によってプライマリ仮想マシンネットワーク出力専用バッファ１２１に記憶されたネットワーク出力とセカンダリ仮想マシンネットワーク出力専用バッファ１２２に記憶されたネットワーク出力とが一致すると判定された場合には、プライマリ仮想マシンネットワーク出力専用バッファ１２１に記憶されたネットワーク出力をクライアントプログラム３０に送信する。
【００３８】
ここで、図３を用いて、各専用バッファ１２１、１２２から取り出したネットワーク出力内容を比較する処理を説明する。図３は、各専用バッファ１２１、１２２から取り出したネットワーク出力内容を比較する処理を説明する図である。図３に示すように、ネットワーク出力ペア比較部１２６は、プライマリ仮想マシンネットワーク出力専用バッファ１２１に記憶されたネットワーク出力の内容とセカンダリ仮想マシンネットワーク出力専用バッファ１２２に記憶されたネットワーク出力の内容とを比較する（図３の（１）参照）。
【００３９】
そして、比較の結果、ネットワーク出力が一致する場合には（図３の（２）参照）、送信部１２ｄは、プライマリ仮想マシンネットワーク出力専用バッファ１２１から取り出したネットワーク出力をクライアントプログラム３０へ返答する（図３の（３）参照）。また、比較の結果、ネットワーク出力が一致しない場合には（図３の（４）参照）、チェックポイント転送部１２ｃは、チェックポイント転送の実行命令が発行され、プライマリ仮想マシン１１とセカンダリ仮想マシン２１を同期状態にする（図３の（５）参照）。
【００４０】
このように、仮想マシン同期システム１では、バッファの範囲でネットワーク出力が一致するか否かを比較し、一致するのであればネットワーク出力の順序は不問とすることで、チェックポイント転送処理を削減することができる。例えば、多くのアプリケーションがマルチプロセスで動作するような場合であっても、ネットワーク出力の順序を不問とすることで、チェックポイント転送処理が多発することを抑止することが可能である。
【００４１】
また、第一の実施の形態に係る仮想マシン同期システム１は、仮想マシンを利用したフォールトトレラントシステムであるため、特別なハードウェアが必要なく、また仮想マシン上のＯＳやアプリケーションに手を入れずにフォールトトレラントシステムを実現しつつ、ネットワーク出力順序の違いの影響によるチェックポイント転送処理の実行頻度の削減を可能とする。
【００４２】
例えば、フォールトトレラントの対象となる仮想マシン上のアプリケーションが、近年利用されている多くのアプリケーションのようにマルチプロセスで実装されており、プライマリ仮想マシン１１とセカンダリ仮想マシン２１でネットワーク出力の順序の違いが頻発する場合においても、チェックポイント転送処理の頻度を削減することが可能となる。
【００４３】
また、バッファされた各仮想マシンのネットワーク出力の中から、同一の内容を持つネットワーク出力のペアを発見するための探索を継続する期間について閾値を設け、閾値を超えた場合はチェックポイント転送処理を実施することで、クライアントプログラムへの最大返答時間を保証することが可能となる。また、プライマリ仮想マシン１１とセカンダリ仮想マシン２１のネットワーク出力の順序の違いについてバッファで吸収するため、予めネットワーク入力に順序性を示す情報を付与しておくなどといった特別な作りこみが必要ない。
【００４４】
［プライマリ物理マシンの処理の流れ］
図４〜図６を用いて、第一の実施の形態に係るプライマリ物理マシン１０における処理について説明する。まず、図４を用いて、第一の実施の形態に係るプライマリ物理マシン１０におけるプライマリ仮想マシン１１のネットワーク出力の蓄積処理の流れを説明する。図４は、第一の実施の形態に係るプライマリ物理マシンにおけるプライマリ仮想マシンのネットワーク出力の蓄積処理の流れを示すフローチャートである。
【００４５】
図４に示すように、ネットワーク出力格納部１２ａは、プライマリ仮想マシン１１からのネットワーク出力をフックすると（ステップＳ１０１肯定）、プライマリ仮想マシンネットワーク出力専用バッファ１２１に、出力された順番に蓄積していく（ステップＳ１０２）。蓄積したプライマリ仮想マシンネットワーク出力専用バッファ１２１内のネットワーク出力は、プライマリ仮想マシン１１が出力した順番に再度取り出すことができるように管理される。
【００４６】
次に、図５を用いて、第一の実施の形態に係るプライマリ物理マシン１０におけるセカンダリ仮想マシン２１のネットワーク出力の蓄積処理の流れを説明する。図５は、第一の実施の形態に係るプライマリ物理マシンにおけるセカンダリ仮想マシンのネットワーク出力の蓄積処理の流れを示すフローチャートである。
【００４７】
図５に示すように、セカンダリ仮想マシンネットワーク受信部１２３は、ネットワーク出力転送部２２ｂからのネットワーク出力を受信すると（ステップＳ２０１肯定）、セカンダリ仮想マシンネットワーク出力専用バッファ１２２に、受信した順番に蓄積していく（ステップＳ２０２）。蓄積したセカンダリ仮想マシンネットワーク出力専用バッファ１２２内のネットワーク出力は、ネットワーク出力転送部２２ｂが転送した順番に再度取り出すことができるように管理される。
【００４８】
次に、図６を用いて、第一の実施の形態に係るプライマリ物理マシンにおける仮想マシン同期処理の流れを説明する。図６は、第一の実施の形態に係るプライマリ物理マシンにおける仮想マシン同期処理の流れを示すフローチャートである。
【００４９】
図６に示すように、まず、プライマリ物理マシン１０のネットワーク出力ペア比較部１２６は、プライマリ仮想マシンネットワーク出力専用バッファ１２１内にネットワーク出力が存在した場合、当該バッファからネットワーク出力（Ｌ２フレーム）を先頭から１つ取り出す。この時、プライマリ仮想マシンネットワーク出力専用バッファ１２１の中のネットワーク出力は出力された順番に管理されているため、ネットワーク出力の出力された順番の中で最も古いＬ２フレームが取り出される。
【００５０】
この結果、取り出しに成功した場合には（ステップＳ３０１肯定）、参照ポインタをセカンダリ仮想マシンネットワーク出力専用バッファ１２２の先頭のネットワーク出力を参照するようにセットする（ステップＳ３０２）。参照ポインタは、セカンダリ仮想マシンネットワーク出力専用バッファ１２２の中から、次に取り出すべきセカンダリ仮想マシン２１のネットワーク出力を指示するポインタである。
【００５１】
次に、プライマリ仮想マシンネットワーク出力専用バッファ１２１から当該ネットワーク出力を取り出した瞬間を０とした経過時間について、閾値設定部１２４で設定されている閾値を、閾値超過監視部１２５で超過していないか判定する（ステップＳ３０３）。当該閾値は、プライマリ仮想マシンネットワーク出力専用バッファ１２１から当該ネットワーク出力が取り出された時刻からの時間経過の上限を示すタイムアウト時間で規定され、閾値設定部１２４で予め設定することができる。当該閾値としては、例えば、数１０ミリ秒から数１００ミリ秒に設定することが考えられる。閾値超過監視部１２５内では、当該ネットワーク出力を取り出してからの経過時間を測定するための時刻情報など、閾値超過の有無の判断に必要な情報の監視を実施する。
【００５２】
この結果、設定した閾値を超過していた場合（ステップＳ３０３否定）、即座にチェックポイント転送の実行命令を発行してチェックポイント転送を実行し（ステップＳ３０８）、プライマリ仮想マシン１１とセカンダリ仮想マシン２１を同期状態にする。また、プライマリ仮想マシンネットワーク出力専用バッファ１２１内に存在する全てのネットワーク出力をクライアントプログラム３０へ返答し、各専用バッファ１２１、１２２内に存在するネットワーク出力情報を全て削除して（ステップＳ３０９）、フローを終了する。
【００５３】
一方、設定した閾値を超過していない場合（ステップＳ３０３肯定）、セカンダリ仮想マシンネットワーク出力専用バッファ１２２から参照ポインタで示されているネットワーク出力を１つ取り出す。
【００５４】
この結果、取り出しに失敗した場合には（ステップＳ３０４否定）、ステップＳ３０３の処理に戻る。また、取り出しに成功した場合には（ステップＳ３０４肯定）、ネットワーク出力ペア比較部１２６は、各専用バッファ１２１、１２２から取り出したネットワーク出力内容の比較を行う（ステップＳ３０５）。比較するネットワーク出力内容としては、各仮想マシンから出力されたＬ２フレームの、Ｌ２やＬ３のヘッダ情報や処理結果である。ただし、ヘッダ情報のうち、例えばＴＣＰヘッダのオプション内のタイムスタンプなどのような、たとえプライマリ仮想マシンとセカンダリ仮想マシンで一致していなくてもクライアントプログラムとのコネクション維持に影響の出ない情報については比較を実施しないこととする。
【００５５】
比較の結果、ネットワーク出力内容が一致していた場合（ステップＳ３０５：一致）、取り出したネットワーク出力のうちプライマリ仮想マシンネットワーク出力専用バッファ１２１から取り出したネットワーク出力のユーザプログラムへの返答を実行し、各専用バッファ１２１、１２２内に存在する当該ネットワーク出力のみを削除する（ステップＳ３０７）。
【００５６】
また、比較の結果、１つでもネットワーク出力内容の不一致があった場合（ステップＳ３０５：不一致）、プライマリ仮想マシンのネットワーク出力順序とセカンダリ仮想マシンのネットワーク出力順序が異なっていた可能性がある。そのため、参照ポインタをセカンダリ仮想マシンネットワーク出力専用バッファ１２２内の次のネットワーク出力を取り出すようにセットする（ステップＳ３０６）。そして、閾値の範囲内で一致するネットワーク出力ペアの探索を繰り返す。
【００５７】
［第一の実施の形態の効果］
このように、第一の実施の形態に係るプライマリ物理マシン１０では、各仮想マシン１１、２１からのネットワーク出力を各専用バッファ１２１、１２２に複数蓄積し、各バッファ１２１、１２２内から同一のネットワーク出力内容を持つネットワーク出力を探索することで、プライマリ仮想マシンとセカンダリ仮想マシンのネットワーク出力の順序が異なることが頻発する場合においても、順序の違いがバッファ内で吸収され、チェックポイント転送処理の実行頻度を削減することが可能となる。
【００５８】
また、第一の実施の形態に係るプライマリ物理マシン１０では、ネットワーク出力ペアを探索中に、閾値超過監視部１２５によって探索を継続する期間を示す閾値を超過していないか監視し、超過した場合はチェックポイント転送部１２ｃが実行されるため、クライアントプログラム３０側へネットワーク出力が返答されるまでの最大返答時間を保証することが可能となる。
【００５９】
また、第一の実施の形態に係るプライマリ物理マシン１０では、各仮想マシン１１、２１からのネットワーク出力をバッファする各専用バッファ１２１、１２２への蓄積に関する機能と、ネットワーク出力ペア探索機能とを分類することで、並列的に機能を実行でき、処理の効率性を維持することができる。
【００６０】
また、本実施の形態の適用先は、各仮想マシン１１、２１が動作する物理マシンのエミュレーションレイヤであるため、フォールトトレラント性を実現するための特別なハードウェアが必要なく、また、仮想マシン上のＯＳやアプリケーションに手を加えずにフォールトトレラントシステムを実現するという特徴を残しつつ、プライマリ仮想マシン１１とセカンダリ仮想マシン２１のネットワーク出力の順序の違いの影響によるチェックポイント転送の実行頻度を削減することが可能となる。
【００６１】
［閾値をパケット数により規定］
なお、上述した第一の実施の形態では、閾値として、プライマリ仮想マシンネットワーク出力専用バッファ１２１からネットワーク出力を取り出してから経過した時間を規定する場合について説明したが、これに限定されるものではなく、閾値として、プライマリ仮想マシンネットワーク出力専用バッファ１２１に蓄積されたパケット数を規定しても良い。
【００６２】
この場合、閾値超過監視部１２５は、プライマリ仮想マシンネットワーク出力専用バッファ１２１に記憶されるネットワーク出力が、所定のパケット数を超えたかを監視する。具体的には、閾値超過監視部１２５は、閾値設定部１２４で設定されたパケット数を基準として、プライマリ仮想マシンネットワーク出力専用バッファ１２１に蓄積されたネットワーク出力のパケット数を閾値超過監視部１２５で監視する。
【００６３】
チェックポイント転送部１２ｃは、閾値超過監視部１２５によってプライマリ仮想マシンネットワーク出力専用バッファ１２１に記憶されるネットワーク出力が、所定のパケット数を超えることが監視されるまでの間に、各専用バッファ１２１、１２２に記憶されたネットワーク出力が一致しなかったことが監視された場合には、チェックポイント転送処理を行う。つまり、プライマリ仮想マシンネットワーク出力専用バッファ１２１に蓄積されたネットワーク出力のパケット数が閾値を超過した場合に、チェックポイント転送を実施する。
【００６４】
［複数のセカンダリ仮想マシンネットワーク出力専用バッファ］
また、セカンダリ仮想マシン２１からのネットワーク出力をバッファする際に、複数のセカンダリ仮想マシンネットワーク出力専用バッファ１２２を用意しておき、ネットワーク出力が持つ情報（例えば、宛先ポート番号）を元に、ネットワーク出力の分類を行うようにしてもよい。例えば、セカンダリ仮想マシンネットワーク出力専用バッファ１２２として、格納されるネットワーク出力が持つ宛先ＩＰアドレスや宛先ポート番号の種別がそれぞれ異なる複数のセカンダリ仮想マシンネットワーク出力専用バッファ１２２を有する。そして、セカンダリ仮想マシンネットワーク受信部１２３は、セカンダリ仮想マシン２１から転送されたネットワーク出力を受信し、該ネットワーク出力が持つ情報の種別に応じて、複数のセカンダリ仮想マシンネットワーク出力専用バッファ１２２のうち、いずれかのバッファにネットワーク出力を格納する。
【００６５】
そして、ネットワーク出力ペア比較部１２ｂは、各専用バッファ１２１、１２２に記憶されたネットワーク出力について、同一種別の情報を持つネットワーク出力同士を比較し、ネットワーク出力同士が一致するか否かを判定する。これによって、プライマリ仮想マシン１１のネットワーク出力と同一のネットワーク出力を探索する際に、分類されたバッファのうち、当該プライマリ仮想マシンネットワーク出力と同一の情報を持つバッファのみを探索すれば良いため、探索の効率性を向上させることができる。
【００６６】
［システム構成等］
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００６７】
また、本実施形態において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００６８】
［プログラム］
図７は、仮想マシン同期プログラムを実行するコンピュータを示す図である。コンピュータ１０００は、例えば、メモリ１０１０、ＣＰＵ（Central  Processing  Unit）１０２０を有する。また、コンピュータ１０００は、ハードディスクドライブインタフェース１０３０、ディスクドライブインタフェース１０４０、シリアルポートインタフェース１０５０、ビデオアダプタ１０６０、ネットワークインタフェース１０７０を有する。これらの各部は、バス１０８０によって接続される。
【００６９】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１及びＲＡＭ（Random  Access  Memory）１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０３１に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１０４１に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ１０４１に挿入される。シリアルポートインタフェース１０５０は、例えばマウス１０５１、キーボード１０５２に接続される。ビデオアダプタ１０６０は、例えばディスプレイ１０６１に接続される。
【００７０】
ハードディスクドライブ１０３１は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３、プログラムデータ１０９４を記憶する。すなわち、プライマリ物理マシン１０の各処理を規定するプログラムは、コンピュータにより実行可能なコードが記述されたプログラムモジュール１０９３として実装される。プログラムモジュール１０９３は、例えばハードディスクドライブ１０３１に記憶される。例えば、プライマリ物理マシン１０における機能構成と同様の処理を実行するためのプログラムモジュール１０９３が、ハードディスクドライブ１０３１に記憶される。なお、ハードディスクドライブ１０３１は、ＳＳＤ（Solid  State  Drive）により代替されてもよい。
【００７１】
また、上述した実施形態の処理で用いられる設定データは、プログラムデータ１０９４として、例えばメモリ１０１０やハードディスクドライブ１０３１に記憶される。そして、ＣＰＵ１０２０が、メモリ１０１０やハードディスクドライブ１０３１に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出して実行する。
【００７２】
なお、プログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０３１に記憶される場合に限らず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ１０４１等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、プログラムモジュール１０９３及びプログラムデータ１０９４は、ネットワーク（ＬＡＮ（Local  Area  Network）、ＷＡＮ（Wide  Area  Network）等）を介して接続された他のコンピュータに記憶されてもよい。そして、プログラムモジュール１０９３及びプログラムデータ１０９４は、他のコンピュータから、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【符号の説明】
【００７３】
１  仮想マシン同期システム
１０  プライマリ物理マシン
１１  プライマリ仮想マシン
１２  プライマリエミュレータ
１３、２３  ＶＭＭ
１４、２４  物理マシンカーネル
１５  ネットワーク入力複製部
２０  セカンダリ物理マシン
２１  セカンダリ仮想マシン
２２  セカンダリエミュレータ
【図１】
2016212485.tif 000003
【図２】
2016212485.tif 000004
【図３】
2016212485.tif 000005
【図４】
2016212485.tif 000006
【図５】
2016212485.tif 000007
【図６】
2016212485.tif 000008
【図７】
2016212485.tif 000009