(57)【要約】【課題】コンピュータの動作を継続したままスナップショットと該スナップショットを採取する時刻以降の入出力命令とを関連付けること。【解決手段】再現情報作成装置１０１は、（１）で示すように、入力命令ｃｏｍ１を時刻ｔ１＿１に関連付けてトレースデータｔｄに記憶し、出力命令ｃｏｍ２を時刻ｔ１＿２に関連付けてトレースデータｔｄに記憶する。次に、再現情報作成装置１０１は、（２）、（３）で示すように、入力命令ｃｏｍ１によって変更される前の変更前のデータｄ＿ｂｃをメモリバッファｂｕｆに記憶し、メモリバッファｂｕｆのデータｄ＿ｂｃをスナップショットｓ１に書き込む。次に、再現情報作成装置１０１は、（４）で示すように、時刻ｔ１＿０から、次のスナップショットを採取する時刻ｔ２までの入出力命令を、スナップショットｓ１に関連付けて記憶する。【選択図】図１
2018022441.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
動作を再現させる対象のコンピュータが有する記憶領域への入出力命令を、前記入出力命令が発生した時刻に関連付けて記憶し、
前記対象のコンピュータから第１の時刻における前記対象のコンピュータの状態を示す第１のスナップショットを採取する間に前記入出力命令が発生した場合、前記入出力命令の対象となる記憶領域のデータが前記第１のスナップショットに含まれていなければ、前記入出力命令によって変更される前の変更前のデータを前記第１のスナップショットとは異なる他の記憶領域に記憶し、
前記対象のコンピュータから前記第１のスナップショットを採取する際に、前記他の記憶領域に記憶した前記変更前のデータがある場合、前記変更前のデータを前記第１のスナップショットに書き込み、
前記第１の時刻から前記第１のスナップショットの次に取得する第２のスナップショットを取得する第２の時刻までの時刻に関連付けた入出力命令と、前記第１のスナップショットとを関連付けて記憶する、
処理を実行させることを特徴とする再現情報作成プログラム。
【請求項２】
前記コンピュータに、
前記第１の時刻以降の前記対象のコンピュータの動作を再現する場合、前記第１のスナップショットに基づいて、前記第１の時刻における前記対象のコンピュータの状態を復元し、
前記第１の時刻における前記対象のコンピュータの状態を復元したコンピュータに、前記第１のスナップショットに関連付けた入出力命令を、当該入出力命令が発生した順に実行させる、
処理を実行させることを特徴とする請求項１に記載の再現情報作成プログラム。
【請求項３】
前記対象のコンピュータが有する記憶領域は、前記対象のコンピュータのプロセッサのレジスタ、メモリ、ディスクであることを特徴とする請求項１または２に記載の再現情報作成プログラム。
【請求項４】
動作を再現させる対象のコンピュータが有する記憶領域への入出力命令を、前記入出力命令が発生した時刻に関連付けて記憶し、
前記対象のコンピュータから第１の時刻における前記対象のコンピュータの状態を示す第１のスナップショットを採取する間に前記入出力命令が発生した場合、前記入出力命令の対象となる記憶領域のデータが前記第１のスナップショットに含まれていなければ、前記入出力命令によって変更される前の変更前のデータを前記第１のスナップショットとは異なる他の記憶領域に記憶し、
前記対象のコンピュータから前記第１のスナップショットを採取する際に、前記他の記憶領域に記憶した前記変更前のデータがある場合、前記変更前のデータを前記第１のスナップショットに書き込み、
前記第１の時刻から前記第１のスナップショットの次に取得する第２のスナップショットを取得する第２の時刻までの時刻に関連付けた入出力命令と、前記第１のスナップショットとを関連付けて記憶する、
制御部を有することを特徴とする再現情報作成装置。
【請求項５】
コンピュータが、
動作を再現させる対象のコンピュータが有する記憶領域への入出力命令を、前記入出力命令が発生した時刻に関連付けて記憶し、
前記対象のコンピュータから第１の時刻における前記対象のコンピュータの状態を示す第１のスナップショットを採取する間に前記入出力命令が発生した場合、前記入出力命令の対象となる記憶領域のデータが前記第１のスナップショットに含まれていなければ、前記入出力命令によって変更される前の変更前のデータを前記第１のスナップショットとは異なる他の記憶領域に記憶し、
前記対象のコンピュータから前記第１のスナップショットを採取する際に、前記他の記憶領域に記憶した前記変更前のデータがある場合、前記変更前のデータを前記第１のスナップショットに書き込み、
前記第１の時刻から前記第１のスナップショットの次に取得する第２のスナップショットを取得する第２の時刻までの時刻に関連付けた入出力命令と、前記第１のスナップショットとを関連付けて記憶する、
処理を実行することを特徴とする再現情報作成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、再現情報作成プログラム、再現情報作成装置、および再現情報作成方法に関する。
【背景技術】
【０００２】
従来、ある時刻におけるコンピュータの状態を示すスナップショットと呼ばれるデータを採取する技術がある。また、コンピュータが有する記憶領域への入出力命令を、入出力命令が発生した時刻に関連付けたトレースデータと呼ばれるデータを保存する技術がある。また、スナップショットに、該スナップショットを採取した時刻以降に発生した入出力命令を関連付ける技術がある。
【０００３】
関連する先行技術として、例えば、チェックポイント採取時にはスタック領域を保存し、該情報全体を保存した際にスタック領域上のカレントスタックが存在するページを更新ページとして記録すると共に、該領域上の残りにライトプロテクトをかけるものがある。また、仮想マシンの状態をベーススナップショットとして保存し、定期的に仮想マシンの状態の更新分を差分スナップショットとして保存し、障害発生時には、ベーススナップショットと差分スナップショットを用いて仮想マシンの状態を復元する技術がある。第１の仮想マシンが動作している第１の計算機に第１の時刻で障害が発生した場合、第１の時刻に最近の第２の時刻でディスクに保存したスナップショットから、第２の時刻の状態の第１の仮想マシンを第２の仮想マシンとして第２の計算機上に復元する技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００２−２８７９９８号公報
【特許文献２】特開２０１３−２３５３１７号公報
【特許文献３】特開２００９−８６７０１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術によれば、コンピュータの動作を継続したまま、スナップショットと、該スナップショットを採取する時刻以降の入出力命令とを関連付けることができない場合がある。具体的には、ある時刻におけるコンピュータのスナップショットの採取中に、コンピュータへの入出力命令が発生すると、発生した入出力命令によりコンピュータの状態が変更することがある。そして、変更されたコンピュータの状態が、採取中のスナップショットに含まれてしまうと、採取したスナップショットは、ある時刻におけるコンピュータの状態を示していないため、ある時刻以降の入出力命令と関連付けることは不適切となる。
【０００６】
１つの側面では、本発明は、コンピュータの動作を継続したままスナップショットと該スナップショットを採取する時刻以降の入出力命令とを関連付けることができる再現情報作成プログラム、再現情報作成装置、および再現情報作成方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一側面によれば、動作を再現させる対象のコンピュータが有する記憶領域への入出力命令を、入出力命令が発生した時刻に関連付けて記憶し、対象のコンピュータから第１の時刻における対象のコンピュータの状態を示す第１のスナップショットを採取する間に入出力命令が発生した場合、入出力命令の対象となる記憶領域のデータが第１のスナップショットに含まれていなければ、入出力命令によって変更される前の変更前のデータを第１のスナップショットとは異なる他の記憶領域に記憶し、対象のコンピュータから第１のスナップショットを採取する際に、他の記憶領域に記憶した変更前のデータがある場合、変更前のデータを第１のスナップショットに書き込み、第１の時刻から第１のスナップショットの次に取得する第２のスナップショットを取得する第２の時刻までの時刻に関連付けた入出力命令と、第１のスナップショットとを関連付けて記憶する再現情報作成プログラム、再現情報作成装置、および再現情報作成方法が提案される。
【発明の効果】
【０００８】
本発明の一態様によれば、コンピュータの動作を継続したままスナップショットと該スナップショットを採取する時刻以降の入出力命令とを関連付けることができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、本実施の形態にかかる再現情報作成装置１０１の動作例を示す説明図である。
【図２】図２は、システム２００の構成例を示す説明図である。
【図３】図３は、物理マシンｐｍのハードウェア構成例を示す説明図である。
【図４】図４は、物理マシンｐｍの機能構成例を示す説明図である。
【図５】図５は、情報間におけるデータの流れを示す説明図である。
【図６】図６は、動作再現用情報４１５の作成の流れを示す説明図である。
【図７】図７は、仮想マシン構成情報４１１の記憶内容の一例を示す説明図である。
【図８】図８は、設定データ４１２の記憶内容の一例を示す説明図である。
【図９】図９は、スナップショット４１３の記憶内容の一例を示す説明図である。
【図１０】図１０は、トレースデータ４１４の記憶内容の一例を示す説明図である。
【図１１】図１１は、動作再現用情報４１５の記憶内容の一例を示す説明図である。
【図１２】図１２は、スナップショット保存バッファ４１６の記憶内容の一例を示す説明図である。
【図１３】図１３は、変更前データ保存バッファ４１７の記憶内容の一例を示す説明図である。
【図１４】図１４は、入出力トレースデータ保存バッファ４１８の記憶内容の一例を示す説明図である。
【図１５】図１５は、動作再現用情報処理５００の一例を示すフローチャートである。
【図１６】図１６は、スナップショット保存処理５０１の一例を示すフローチャートである。
【図１７】図１７は、スナップショット保存詳細処理の一例を示すフローチャートである。
【図１８】図１８は、入出力処理５０２の一例を示すフローチャートである。
【図１９】図１９は、入出力トレースデータ保存処理の一例を示すフローチャートである。
【図２０】図２０は、動作再現用情報作成処理５０３の一例を示すフローチャートである。
【図２１】図２１は、動作再現用情報保存処理の一例を示すフローチャートである。
【図２２】図２２は、動作再現処理の一例を示すフローチャートである。
【図２３】図２３は、本実施の形態における資料採取および原因調査の流れを示す説明図である。
【図２４】図２４は、本実施の形態における資料採取の流れの詳細を示す説明図である。
【図２５】図２５は、本実施の形態における原因調査の流れの詳細を示す説明図である。
【発明を実施するための形態】
【００１０】
以下に図面を参照して、開示の再現情報作成プログラム、再現情報作成装置、および再現情報作成方法の実施の形態を詳細に説明する。
【００１１】
図１は、本実施の形態にかかる再現情報作成装置１０１の動作例を示す説明図である。再現情報作成装置１０１は、動作を再現させる対象のコンピュータの再現情報を作成するコンピュータである。再現情報作成装置１０１は、例えば、サーバである。ここで、動作を再現させる対象のコンピュータは、仮想マシンでも物理マシンでもよいが、本実施の形態では、仮想マシンであるとする。また、仮想マシンは、再現情報作成装置１０１上で動作する仮想マシンでもよいし、他の装置上で動作する仮想マシンでもよいが、本実施の形態では、再現情報作成装置１０１上で動作する仮想マシンであるとする。
【００１２】
仮想マシンは、ハードウェア資源を用いて仮想的に作成されたコンピュータシステムである。仮想マシンの詳細な説明については、図４で示す。
【００１３】
再現情報には、スナップショットとトレースデータとを含む。スナップショットは、ある時刻における仮想マシンの状態を示すデータである。ここで、仮想マシンの状態とは、コンピュータが有する記憶領域のデータのことであり、具体的には、仮想マシンのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）のレジスタ、メモリ、ディスクのデータである。また、トレースデータは、仮想マシンが有する記憶領域への入出力命令を、入出力命令が発生した時刻に関連付けて記憶したデータである。また、トレースデータに含まれる入出力命令によって変更されたデータが、入出力命令に関連付けられていてもよい。入出力命令が発生すると、仮想マシンが有する記憶領域のデータが変更することがあるため、入出力命令によって、仮想マシンの状態が変化することがある。以下の記載では、スナップショットとトレースデータとを合わせて、資源と呼ぶことがある。
【００１４】
スナップショットとトレースデータとを採取することにより、仮想マシンに障害が発生した際に、障害発生前から仮想マシンの動作を再生して追跡することが可能になる。具体的には、スナップショットを採取することにより、コンピュータに障害が発生した際に、採取したスナップショットを読み出すことにより、スナップショットを採取した時刻におけるコンピュータの状態を復元することができる。また、スナップショットに、該スナップショットを採取した時刻以降に発生した入出力命令を関連付けることにより、復元したコンピュータに、関連付けた入出力命令を実行させて、障害を再現させることができる。
【００１５】
スナップショットとトレースデータとを採取する方法としては、例えば、仮想マシンの動作を一時的に停止して入出力命令が発生しないようにすることにより、仮想マシンの状態が変化しないようにしてから、スナップショットを採取する方法がある。
【００１６】
しかしながら、上述した方法では、仮想マシンの動作を一時的に停止する時間、いわゆるダウンタイムが発生することになる。ダウンタイムが発生すると、ダウンタイムにおいては顧客がサービスを利用できなくなる。また、仮想マシンを監視するシステムがある場合、ダウンタイムによって、仮想マシンが動作停止と判断されてしまう場合がある。
【００１７】
また、仮想マシンの動作を継続したまま、スナップショットと、該スナップショットを採取する時刻以降の入出力命令とを関連付けることができない場合がある。具体的には、ある時刻における仮想マシンのスナップショットの採取中に、仮想マシンへの入出力命令が発生すると、発生した入出力命令により仮想マシンの状態が変更することがある。そして、変更された仮想マシンの状態が、採取中のスナップショットに含まれてしまうと、採取したスナップショットは、ある時刻における仮想マシンの状態を示していないため、ある時刻以降の入出力命令と関連付けることは不適切となる。具体的に不適切となる理由として、前述の採取したスナップショットにより再現された仮想マシンは、関連付けた入出力命令のうちのいずれかの入出力命令が既に実行された状態である。この状態で、関連付けた入出力命令を実行すると、前述のいずれかの入出力命令が２回実行されることになってしまう。
【００１８】
また、先行単位と呼ばれる業務システムとは別に、先行単位と同程度の性能を有した追随単位という資料採取用のリソースを用意することが考えられる。しかしながら、この方法は、資料採取用のリソースを用意しなければならないというコストが発生する。また、採取された資料を基に調査を行う際に、ある時点まで処理を飛ばすことができないため、調査に時間がかかる。
【００１９】
また、スナップショットとトレースデータによって動作の再現を行う動作は、データベースソフトウェアがトランザクションの機能によってデータの整合性を保とうとする動作と類似しているとも言える。そこで、データベース更新の仕組みを適用することが考えられる。しかしながら、データベースソフトウェアと、仮想マシンとで異なる点として、仮想マシンは、データ保存の対象となる仮想マシンが自ら主体的に動作してデータを変化させるという点が挙げられる。例えば、データベースでは、ＵＰＤＡＴＥ命令によってレコードに対する排他処理を行った後、データの更新を行う。これに対し、仮想マシンでは、対象の仮想マシンのＣＰＵのキャッシュメモリやレジスタや物理メモリ等の状態データを保存する際、対象の仮想マシンは一時的にこれらのデータを更新できないため、動作を停止しなければならなくなる。
【００２０】
そこで、本実施の形態では、ある時刻の仮想マシンのスナップショット採取中に発生した入出力命令による変更前のデータをバッファに退避し、変更前のデータスナップショットに書き込み、ある時刻以降の入出力命令とスナップショットを関連付ける。
【００２１】
図１を用いて、再現情報作成装置１０１の動作例について説明する。図１に示す再現情報作成装置１０１は、動作を再現させる対象の仮想マシンｖｍを動作させている。そして、再現情報作成装置１０１は、定期的にスナップショットを採取する。図１の例では、再現情報作成装置１０１は、第１の時刻となる時刻ｔ１＿０から時刻ｔ１＿ｎまで、時刻ｔ１における第１のスナップショットとして、スナップショットｓ１を採取する。また、再現情報作成装置１０１は、時刻ｔ１＿ｎと同時刻であり、第２の時刻となる時刻ｔ２以降では、時刻ｔ２における第２のスナップショットとして、スナップショットｓ２を採取する。そして、再現情報作成装置１０１は、スナップショットを採取する間も、動作し続ける。なお、図１の例では、再現情報作成装置１０１は、あるスナップショットの採取を終えた後すぐに、次のスナップショットの採取を始めているが、あるスナップショットの採取を終えて所定時間後に、次のスナップショットの採取を始めるようにしてもよい。
【００２２】
また、図１では、スナップショットｓ１の採取の様子を、実線と破線とを用いて示して模式化している。例えば、時刻ｔ１＿０におけるスナップショットｓ１＿ｔ１＿０は、採取を開始した時点であり、スナップショットｓ１は空であるため、図１では、スナップショットｓ１＿ｔ１＿０内の仮想マシンｖｍの輪郭を全て破線とすることにより示している。そして、図１では、時刻が経過するごとにスナップショットｓ１にデータが書き込まれるため、スナップショットｓ１内の仮想マシンｖｍの輪郭が少しずつ実線となる。そして、時刻ｔ１＿ｎにおけるスナップショットｓ１＿ｔ１＿ｎは、採取を完了した時点であるため、図１では、スナップショットｓ１＿ｔ１＿ｎ内の仮想マシンｖｍの輪郭を全て実線とすることにより示している。
【００２３】
再現情報作成装置１０１は、仮想マシンｖｍが有する記憶領域への入出力命令を、入出力命令が発生した時刻に関連付けて記憶する。例えば、図１の例では、時刻ｔ１＿０と時刻ｔ２との間となる時刻ｔ１＿１に仮想マシンｖｍに対して入力命令ｃｏｍ１が発生し、時刻ｔ１＿１の後である時刻ｔ１＿２に仮想マシンｖｍに対して出力命令ｃｏｍ２が発生している。従って、再現情報作成装置１０１は、図１の（１）で示すように、入力命令ｃｏｍ１を時刻ｔ１＿１に関連付けてトレースデータｔｄに記憶し、出力命令ｃｏｍ２を時刻ｔ１＿２に関連付けてトレースデータｔｄに記憶する。
【００２４】
また、再現情報作成装置１０１は、スナップショットｓ１を採取する間に入出力命令が発生した場合、入出力命令の対象となる記憶領域のデータがスナップショットｓ１に含まれるか判定する。そして、再現情報作成装置１０１は、入出力命令の対象となる記憶領域のデータがスナップショットｓ１に含まれていなければ、入出力命令によって変更される前の変更前のデータを、スナップショットｓ１とは異なる他の記憶領域に記憶する。他の記憶領域は、具体的には、メモリ上に確保したメモリバッファである。これにより、再現情報作成装置１０１は、変更前のデータを一時的に退避できる。なお、スナップショットｓ１を採取する間に、メモリバッファに保存するのは初回の一度だけであり、複数回同じ領域に対する入出力命令が発生しても、変更前データを保存しない。これにより、再現情報作成装置１０１は、メモリバッファの増加を抑制することができる。
【００２５】
図１の例では、スナップショットｓ１を採取する間の時刻ｔ１＿１の時点において、入力命令ｃｏｍ１が発生している。再現情報作成装置１０１は、入力命令ｃｏｍ１の対象となる記憶領域のデータがスナップショットｓ１に含まれるか判定する。図１の例では、時刻ｔ１＿１におけるスナップショットｓ１＿ｔ１＿１内の仮想マシンｖｍの輪郭は、上半分が実線であり、下半分が破線であり、入力命令ｃｏｍ１の対象となる記憶領域のデータは、スナップショットｓ１に含まれていないことを示す。従って、再現情報作成装置１０１は、図１の（２）で示すように、入力命令ｃｏｍ１によって変更される前の変更前のデータｄ＿ｂｃを、スナップショットｓ１とは異なる他の記憶領域として、メモリバッファｂｕｆに記憶する。なお、入力命令ｃｏｍ１によって、仮想マシンｖｍの状態は変化し、データｄ＿ｂｃは、データｄ＿ａｃに変更される。ここで、図１では、データｄ＿ａｃが変更されたことを模式的に示すため、データｄ＿ａｃの内部に網掛けを付与している。
【００２６】
そして、再現情報作成装置１０１は、スナップショットｓ１を採取する際に、メモリバッファｂｕｆに変更前のデータがある場合、変更前のデータをスナップショットｓ１に書き込む。図１の例では、メモリバッファｂｕｆに変更前のデータｄ＿ｂｃがあるため、再現情報作成装置１０１は、図１の（３）で示すように、変更前のデータｄ＿ｂｃをスナップショットｓ１に書き込む。
【００２７】
次に、再現情報作成装置１０１は、図１の（４）で示すように、時刻ｔ１＿０から、次のスナップショットを採取する時刻ｔ２までの入出力命令を、スナップショットｓ１に関連付けて記憶する。例えば、再現情報作成装置１０１は、時刻ｔ１＿ｎとなり、スナップショットｓ１の採取が完了した際に、時刻ｔ１＿０から時刻ｔ２までの入出力命令をまとめてスナップショットｓ１に関連付けて記憶してもよい。また、再現情報作成装置１０１は、時刻ｔ１＿０から時刻ｔ２までの間、入出力命令が発生するたびに、発生した入出力命令と、スナップショットｓ１とを関連付けて記憶してもよい。
【００２８】
以上により、再現情報作成装置１０１は、ダウンタイムが存在せずに、すなわち、仮想マシンｖｍの動作を継続したまま、スナップショットｓ１と、時刻ｔ１＿０から時刻ｔ２までの入出力命令を関連付けることができる。そして、時刻ｔ１＿ｎに採取が完了するスナップショットｓ１は、入力命令ｃｏｍ１によって変更されたデータｄ＿ａｃでなく、変更前のデータｄ＿ｂｃが含まれているため、時刻ｔ１＿０における仮想マシンｖｍの状態を、正しく示している。
【００２９】
なお、ある時刻のスナップショットおよびトレースデータの採取が完了してから、新たなスナップショットの保存と、新たなトレースデータの保存を行っていたのでは、そのデータ保存間の処理が不明な状態のログになってしまう。そこで、本実施の形態では、スナップショットを順序良く連続して採取し、時刻が飛び飛びにならない採取を行うように工夫する。この工夫については、図６で説明する。次に、再現情報作成装置１０１をシステムに組み込んだ場合の例を、図２を用いて説明する。
【００３０】
図２は、システム２００の構成例を示す説明図である。システム２００は、物理マシンｐｍと、クライアント端末２０１と、管理者端末２０２とを有する。そして、物理マシンｐｍと、クライアント端末２０１と、管理者端末２０２とは、ネットワーク２０３でそれぞれ接続される。物理マシンｐｍは、図１で示した再現情報作成装置１０１に相当する。
【００３１】
クライアント端末２０１は、システム２００が提供するサービスを利用する利用者ｕが操作する端末である。管理者端末２０２は、システム２００の管理者ａｄが操作する端末である。
【００３２】
物理マシンｐｍは、利用者ｕが使用する仮想マシンｖｍを動作させるコンピュータである。次に、物理マシンｐｍのハードウェア構成を、図３を用いて説明する。
【００３３】
（物理マシンｐｍのハードウェア構成例）
図３は、物理マシンｐｍのハードウェア構成例を示す説明図である。図３において、物理マシンｐｍは、ＣＰＵ３０１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０３と、を含む。また、物理マシンｐｍは、ディスクドライブ３０４およびディスク３０５と、通信インターフェース３０６と、を含む。また、ＣＰＵ３０１〜ディスクドライブ３０４、通信インターフェース３０６はバス３０７によってそれぞれ接続される。
【００３４】
ＣＰＵ３０１は、物理マシンｐｍの全体の制御を司る演算処理装置である。ＲＯＭ３０２は、ブートプログラムなどのプログラムを記憶する不揮発性メモリである。ＲＡＭ３０３は、ＣＰＵ３０１のワークエリアとして使用される揮発性メモリである。
【００３５】
ディスクドライブ３０４は、ＣＰＵ３０１の制御に従ってディスク３０５に対するデータのリードおよびライトを制御する制御装置である。ディスクドライブ３０４には、例えば、磁気ディスクドライブ、光ディスクドライブ、ソリッドステートドライブなどを採用することができる。ディスク３０５は、ディスクドライブ３０４の制御で書き込まれたデータを記憶する不揮発性メモリである。例えばディスクドライブ３０４が磁気ディスクドライブである場合、ディスク３０５には、磁気ディスクを採用することができる。また、ディスクドライブ３０４が光ディスクドライブである場合、ディスク３０５には、光ディスクを採用することができる。また、ディスクドライブ３０４がソリッドステートドライブである場合、ディスク３０５には、半導体素子によって形成された半導体メモリ、いわゆる半導体ディスクを採用することができる。
【００３６】
通信インターフェース３０６は、ネットワーク２０３と内部のインターフェースを司り、他の装置からのデータの入出力を制御する制御装置である。具体的に、通信インターフェース３０６は、通信回線を通じてネットワーク２０３を介して他の装置に接続される。通信インターフェース３０６には、例えば、モデムやＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）アダプタなどを採用することができる。
【００３７】
また、システム２００の管理者ａｄが、物理マシンｐｍを直接操作する場合、物理マシンｐｍは、ディスプレイ、キーボード、マウスといったハードウェアを有してもよい。
【００３８】
また、クライアント端末２０１、管理者端末２０２は、ＣＰＵ、ＲＯＭ、ＲＡＭ、ディスクドライブ、ディスク、通信インターフェース、ディスプレイ、キーボード、マウスを有する。
【００３９】
（物理マシンｐｍの機能構成例）
図４は、物理マシンｐｍの機能構成例を示す説明図である。物理マシンｐｍは、ハイパーバイザｈｖを動作させる。ハイパーバイザｈｖは、ハードウェアを直接制御する機能を持ち、ファームウェア層で、仮想化マシンアーキテクチャーを提供するプログラムである。そして、ハイパーバイザｈｖは、仮想マシンｖｍを制御する。また、仮想マシンｖｍを制御する方法としては、本実施の形態のようなハイパーバイザ型の他にも、ホストＯＳ型と呼ばれるものがあり、本実施の形態は、ホストＯＳ型にも適用することができる。
【００４０】
そして、ハイパーバイザｈｖは、制御部４００を有する。制御部４００は、トレースデータ記憶部４０１と、スナップショット記憶部４０２と、関連付け記憶部４０３と、復元部４０４と、実行部４０５とを有する。制御部４００は、記憶装置に記憶されたプログラムをＣＰＵ３０１が実行することにより、各部の機能を実現する。記憶装置とは、具体的には、例えば、図３に示したＲＯＭ３０２、ＲＡＭ３０３、ディスク３０５などである。また、各部の処理結果は、ＣＰＵ３０１のレジスタや、ＣＰＵ３０１のキャッシュメモリ等に格納される。
【００４１】
また、ハイパーバイザｈｖは、仮想マシン構成情報４１１と、設定データ４１２と、スナップショット４１３と、トレースデータ４１４と、動作再現用情報４１５とにアクセス可能である。さらに、ハイパーバイザｈｖは、メモリバッファ４１０内のスナップショット保存バッファ４１６と、変更前データ保存バッファ４１７と、入出力トレースデータ保存バッファ４１８とにアクセス可能である。仮想マシン構成情報４１１〜入出力トレースデータ保存バッファ４１８の記憶内容の一例は、それぞれ、図７〜図１４で示す。また、変更前データ保存バッファ４１７は、図１で示したバッファｂｕｆに相当する。
【００４２】
仮想マシンｖｍは、ハードウェア資源を用いて仮想的に作成されたコンピュータシステムである。仮想マシンｖｍは、仮想的に作成したコンピュータシステムであればどのようなものでもよく、例えば、他のコンピュータにサービスやデータを提供するサーバでもよいし、サーバによるサービスやデータの提供を受けるコンピュータでもよい。図４で示すように、仮想マシンｖｍは、仮想化されたハードウェアデバイスとして、ＣＰＵ４２１と、メモリ４２２と、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）４２３と、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）４２４と、キーボード４２５と、マウス４２６と、モニタ４２７とを有する。ＣＰＵ４２１〜モニタ４２７は、ハイパーバイザｈｖによりエミュレートされる。また、図４に示す仮想マシンｖｍ内のコンピュータの図は、仮想化されたハードウェアデバイスを示す。
【００４３】
トレースデータ記憶部４０１は、仮想マシンｖｍの入出力命令を、入出力命令が発生した時刻に関連付けて、入出力トレースデータ保存バッファ４１８に一旦記憶する。一旦入出力トレースデータ保存バッファ４１８に記憶された入出力命令は、トレースデータ４１４に格納される。
【００４４】
スナップショット記憶部４０２は、ある時刻における仮想マシンｖｍの状態を、スナップショット保存バッファ４１６に一旦記憶する。一旦スナップショット保存バッファ４１６に記憶された仮想マシンｖｍの状態を示す情報は、スナップショット４１３に記憶される。
【００４５】
また、スナップショット記憶部４０２は、第１の時刻における第１のスナップショットを採取する間に入出力命令が発生した場合、入出力命令の対象となる記憶領域のデータが第１のスナップショットに含まれているか否かを判定する。そして、スナップショット記憶部４０２は、入出力命令の対象となる記憶領域のデータが第１のスナップショットに含まれていなければ、入出力命令によって変更される前の変更前のデータを変更前データ保存バッファ４１７に記憶する。また、スナップショット記憶部４０２は、第１のスナップショットを採取する際に、変更前データ保存バッファ４１７に記憶した変更前のデータがある場合、変更前のデータを第１のスナップショットに書き込む。
【００４６】
関連付け記憶部４０３は、第１の時刻から前記第１のスナップショットの次に取得する第２のスナップショットを取得する第２の時刻までの時刻に関連付けた入出力命令と、第１のスナップショットとを関連付けて記憶する。
【００４７】
復元部４０４は、第１の時刻以降の仮想マシンｖｍの動作を再現する場合、第１のスナップショットに基づいて、第１の時刻における仮想マシンｖｍの状態を復元する。ここで、仮想マシンｖｍの状態を復元する復元先は、本実施の形態では、物理マシンｐｍであるが、仮想マシンｖｍが動作していた物理マシンｐｍとは異なる物理マシンでもよい。
【００４８】
実行部４０５は、復元部４０４が復元した仮想マシンに、第１のスナップショットに関連付けた入出力命令を、該入出力命令が発生した順に実行させる。次に、スナップショット４１３〜入出力トレースデータ保存バッファ４１８間におけるデータの流れについて、図５を用いて説明する。
【００４９】
図５は、情報間におけるデータの流れを示す説明図である。ハイパーバイザｈｖは、動作再現用情報処理５００を実行する。動作再現用情報処理５００は、スナップショット保存処理５０１、入出力処理５０２、動作再現用情報作成処理５０３を実行する。スナップショット保存バッファ４１６は、スナップショット保存処理５０１で使用されるバッファである。入出力トレースデータ保存バッファ４１８は、入出力処理５０２で使用されるバッファである。変更前データ保存バッファ４１７は、入出力処理５０２とスナップショット保存処理５０１との間で使用されるバッファである。
【００５０】
動作再現用情報処理５００〜動作再現用情報作成処理５０３は、それぞれ、図１５、図１６、図１８、図２０で示す。次に、動作再現用情報４１５の作成の流れを、図６を用いて説明する。
【００５１】
図６は、動作再現用情報４１５の作成の流れを示す説明図である。図６では、スナップショットを順序良く連続して採取し、時刻が飛び飛びにならない採取を行う工夫として、動作再現用情報４１５の作成の流れを、スナップショット４１３とトレースデータ４１４とを用いて説明する。
【００５２】
図６の例では、ハイパーバイザｈｖは、時刻Ａ、Ｂ、Ｃのそれぞれで採取したスナップショット４１３Ａ、Ｂ、Ｃを有する。また、ハイパーバイザｈｖは、時刻Ａ、Ｂの間で採取されたトレースデータ４１４ＡＢと、時刻Ｂ、Ｃの間で採取されたトレースデータ４１４ＢＣとを有する。そして、ハイパーバイザｈｖは、スナップショット４１３Ａと、トレースデータ４１４ＡＢとを関連付けた動作再現用情報４１５ＡＢを作成する。また、ハイパーバイザｈｖは、動作再現用情報４１５ＡＢに、スナップショット４１３Ｂを関連付けてもよい。また、ハイパーバイザｈｖは、スナップショット４１３Ｂと、トレースデータ４１４ＢＣとを関連付けた動作再現用情報４１５ＢＣを作成する。
【００５３】
ハイパーバイザｈｖは、動作再現用情報４１５の採取完了、および保存処理と、次の動作再現用情報４１５の採取とを、以下に記述する動作によって順序良く行うことで、データの連続性を確保する。ハイパーバイザｈｖは、時刻ＡＢ間におけるトレースログの採取を、スナップショット４１３Ｂと、トレースデータ４１４ＡＢの保存完了時点で終了する。また、ハイパーバイザｈｖは、時刻Ｂより後の時刻Ｃにおけるスナップショット４１３Ｃの採取と、新たな時刻ＢＣ間のトレースログの採取を連続・平行して行うようにする。つまり、ハイパーバイザｈｖは、スナップショット４１３Ｂを採取開始した時点で、時刻Ｂ時点までのトレースデータであるトレースデータ４１４ＡＢの保存と、時刻Ｂ時点からの新たなトレースデータ４１４ＢＣの採取を行うようにする。これにより、ハイパーバイザｈｖは、データ保存のためのダウンタイムなく、特定の時刻に即座に処理を移せて、連続した処理を確認できる。
【００５４】
図６に示す動作再現用情報４１５ＡＢと、動作再現用情報４１５ＢＣとは、動作再現用情報４１５に関連付けられたスナップショット４１３とトレースデータ４１４とによって復元できる状態を、模式的に示したものである。図６に示すように、スナップショット４１３Ａには、網掛けが付与されておらず、スナップショット４１３Ｂには、薄い網掛けが付与されており、スナップショット４１３Ｃには、濃い網掛けが付与されている。
【００５５】
動作再現用情報４１５ＡＢに関連付けられたスナップショット４１３Ａは、時刻Ａにおけるスナップショット４１３Ａと同一のものである。そして、スナップショット４１３Ａによって復元した仮想マシンｖｍに、トレースデータ４１４ＡＢに含まれる入出力命令を順次実行させると、仮想マシンｖｍの状態は、入出力命令を実行するほど、スナップショット４１３Ｂが示す状態に近づくことになる。図６では、トレースデータ４１４ＡＢに含まれる全ての入出力命令のうちの半分の入出力命令を仮想マシンｖｍに実行させた状態を示すスナップショットを、スナップショット４１３ＡＢとして示す。そして、図６で示すスナップショット４１３ＡＢは、上半分に薄い網掛けを付与し、下半分には網掛けを付与していないことにより、スナップショット４１３Ｂが示す状態に近づいたことを模式的に示している。そして、トレースデータ４１４ＡＢに含まれる全ての入出力命令を実行した際の仮想マシンｖｍの状態は、スナップショット４１３Ｂが示す状態と同一のものとなる。
【００５６】
動作再現用情報４１５ＢＣも、動作再現用情報４１５ＡＢと同様である。具体的には、動作再現用情報４１５ＢＣに関連付けられたスナップショット４１３Ｂは、時刻Ｂにおけるスナップショット４１３Ｂと同一のものである。そして、スナップショット４１３Ｂによって復元した仮想マシンｖｍに、トレースデータ４１４ＢＣに含まれる入出力命令を順次実行させると、仮想マシンｖｍの状態は、入出力命令を実行するほど、スナップショット４１３Ｃが示す状態に近づくことになる。図６では、トレースデータ４１４ＢＣに含まれる全ての入出力命令のうちの半分の入出力命令を仮想マシンｖｍに実行させた状態を示すスナップショットを、スナップショット４１３ＢＣとして示す。そして、図６で示すスナップショット４１３ＢＣは、上半分に濃い網掛けを付与し、下半分には薄い網掛けを付与することにより、スナップショット４１３Ｃが示す状態に近づいたことを模式的に示している。そして、トレースデータ４１４ＢＣに含まれる全ての入出力命令を実行した際の仮想マシンｖｍの状態は、スナップショット４１３Ｃが示す状態と同一のものとなる。
【００５７】
次に、仮想マシン構成情報４１１〜入出力トレースデータ保存バッファ４１８の記憶内容の一例を、それぞれ、図７〜図１４を用いて説明する。
【００５８】
図７は、仮想マシン構成情報４１１の記憶内容の一例を示す説明図である。図７に示す仮想マシン構成情報４１１は、レコード７０１−１〜３を有する。
【００５９】
仮想マシン構成情報４１１は、デバイスの種類と、デバイスのＩＤと、デバイスの構成と、デバイスのデータ長というフィールドを含む。デバイスの種類フィールドには、デバイスの種類を示す識別子が格納される。例えば、レコード７０１−１〜３が示すように、デバイスの種類フィールドには、デバイスがＣＰＵであれば「ＣＰＵ」、メモリであれば「ＭＥＭ」、ハードディスクドライブであれば「ＨＤＤ」という識別子が格納される。デバイスのＩＤフィールドには、デバイスのＩＤが格納される。
【００６０】
デバイスの構成フィールドには、デバイスの構成を示す情報が格納される。例えば、レコード７０１−１が示すように、デバイスの種類が「ＣＰＵ」であれば、デバイスの構成フィールドには、ＣＰＵのアーキテクチャを示す識別子と、ＣＰＵの周波数およびコア数と、ＣＰＵがキャッシュメモリを有するか否かを示す識別子とが格納される。また、レコード７０１−２が示すように、デバイスの種類が「ＭＥＭ」であれば、デバイスの構成フィールドには、メモリの規格を示す文字列が格納される。また、レコード７０１−３が示すように、デバイスの種類が「ＨＤＤ」であれば、デバイスの構成フィールドには、ＨＤＤの規格を示す文字列と、ＨＤＤのシリアル番号とが格納される。
【００６１】
デバイスのデータ長フィールドには、デバイスのデータ長を示す値が格納される。例えば、レコード７０１−１が示すように、デバイスの種類が「ＣＰＵ」であれば、デバイスのデータ長フィールドには、ＣＰＵが有する各レジスタのデータ長を示すバイト数や、キャッシュメモリのデータ長を示すバイト数が格納される。また、レコード７０１−２が示すように、デバイスの種類が「ＭＥＭ」であれば、デバイスのデータ長フィールドには、メモリのサイズを示すバイト数が格納される。また、レコード７０１−３が示すように、デバイスの種類が「ＨＤＤ」であれば、デバイスのデータ長フィールドには、ハードディスクドライブが有するディスクのサイズを示すバイト数が格納される。
【００６２】
図８は、設定データ４１２の記憶内容の一例を示す説明図である。図８に示す設定データ４１２は、レコード８０１−１、２を有する。
【００６３】
設定データ４１２は、開始時刻と、終了時刻と、トレース対象デバイスというフィールドを含む。開始時刻フィールドには、トレースを開始した時刻を示す値が格納される。終了時刻フィールドには、トレースを終了した時刻を示す値が格納される。トレース対象デバイスフィールドには、トレースの対象となるデバイスのＩＤが格納される。
【００６４】
図９は、スナップショット４１３の記憶内容の一例を示す説明図である。図９に示すスナップショット４１３は、レコード９０１−１〜３を有する。
【００６５】
スナップショット４１３は、スナップショット採取時刻と、デバイスの種類と、デバイスのＩＤと、データ名と、開始アドレスと、データ長と、デバイスデータというフィールドを含む。スナップショット採取時刻フィールドには、スナップショットを採取した採取時刻を示す文字列が格納される。デバイスの種類フィールドには、スナップショットの採取対象となるデバイスの種類を示す値が格納される。デバイスのＩＤフィールドには、スナップショットの採取対象となるデバイスのＩＤを示す値が格納される。データ名フィールドには、データ名を示す文字列が格納される。開始アドレスフィールドには、開始アドレスを示す値が格納される。データ長フィールドには、データ長を示す値が格納される。デバイスデータフィールドには、採取時刻においてデバイスが記憶していたデータが格納される。例えば、デバイスの種類が「ＣＰＵ」であれば、デバイスデータフィールドには、ＣＰＵが有する各レジスタのデータや、ＣＰＵが有するキャッシュメモリのデータが格納される。
【００６６】
図１０は、トレースデータ４１４の記憶内容の一例を示す説明図である。図１０に示すトレースデータ４１４は、レコード１００１−１、２を有する。
【００６７】
トレースデータ４１４は、時刻と、デバイスＩＤと、命令の種類と、命令データ長と、命令データというフィールドを含む。時刻フィールドには、命令が発生した時刻を示す文字列が格納される。デバイスＩＤフィールドには、命令を受けたデバイスＩＤが格納される。命令の種類フィールドには、命令の種類を示す識別子として、「入力」か「出力」が格納される。命令データ長フィールドには、命令のデータ長を示す値が格納される。命令データフィールドには、具体的な命令のデータが格納される。
【００６８】
図１１は、動作再現用情報４１５の記憶内容の一例を示す説明図である。図１１に示す動作再現用情報４１５は、レコード１１０１−１、２を有する。
【００６９】
動作再現用情報４１５は、スナップショットと、トレースデータというフィールドを含む。スナップショットフィールドには、図９で示したスナップショット４１３が格納される。トレースデータフィールドには、図１０で示したトレースデータ４１４が格納される。
【００７０】
そして、動作再現用情報４１５が有する各レコードは、スナップショット４１３の一部と、トレースデータ４１４の一部とを関連付けている。例えば、レコード１１０１−１は、２０１６／０１／０１  ００：００：００に採取したスナップショットと、２０１６／０１／０１  ００：００：００から００：０１：００までのトレースデータとを関連付けている。
【００７１】
図１２は、スナップショット保存バッファ４１６の記憶内容の一例を示す説明図である。図１２に示すスナップショット保存バッファ４１６は、レコード１２０１−１を有する。
【００７２】
スナップショット保存バッファ４１６は、バッファアドレスと、バッファサイズと、スナップショットというフィールドを含む。バッファアドレスフィールドには、ハイパーバイザｈｖ上におけるバッファアドレスを示す値が格納される。バッファサイズフィールドには、バッファサイズを示すバイト数が格納される。スナップショットフィールドには、スナップショットが格納される。
【００７３】
図１３は、変更前データ保存バッファ４１７の記憶内容の一例を示す説明図である。図１３に示す変更前データ保存バッファ４１７は、レコード１３０１−１、２を有する。
【００７４】
変更前データ保存バッファ４１７は、バッファアドレスと、バッファサイズと、スナップショットと、未保存というフィールドを含む。バッファアドレスフィールドには、ハイパーバイザｈｖ上におけるバッファアドレスを示す値が格納される。バッファサイズフィールドには、バッファサイズを示すバイト数が格納される。スナップショットフィールドには、スナップショット４１３に格納される予定のデータが格納される。未保存フィールドには、スナップショットに対して未保存か否かを示す識別子が格納される。例えば、未保存フィールドに「はい」識別子が設定されている場合、該当のレコードのデータは、まだスナップショット４１３に格納されていないことを示す。
【００７５】
また、物理マシンｐｍは、変更前データ保存バッファ４１７へ、データの変更要求が行われた順番に保存する。
【００７６】
図１４は、入出力トレースデータ保存バッファ４１８の記憶内容の一例を示す説明図である。図１４に示す入出力トレースデータ保存バッファ４１８は、レコード１４０１−１、２を有する。
【００７７】
入出力トレースデータ保存バッファ４１８は、バッファアドレスと、バッファサイズと、入出力トレースデータというフィールドを含む。バッファアドレスフィールドには、ハイパーバイザｈｖ上のバッファアドレスを示す値が格納される。バッファサイズフィールドには、バッファサイズを示すバイト数が格納される。入出力トレースデータフィールドには、入出力トレースデータを示す値が格納される。
【００７８】
また、物理マシンｐｍは、トレース対象デバイスに対して入出力要求が行われた順番に保存する。
【００７９】
次に、ハイパーバイザｈｖが実行する動作再現用情報処理５００を示すフローチャートを、図１５〜図２２を用いて説明する。ここで、図１５〜図２２において、長方形は通常の処理を示し、平行四辺形は、データの入力を示す。また、上面の２つの角を切り取った四角形は、ループの上端を示し、下面の２つの角を切り取った四角形は、ループの下端を示す。また、横の２重線で囲まれた処理群は、並列処理を示す。
【００８０】
図１５は、動作再現用情報処理５００の一例を示すフローチャートである。ハイパーバイザｈｖは、利用者ｕからの開始指示、または設定データ４１２に記載された日時指定等による条件が満たされた際に、動作再現用情報処理５００を開始する。
【００８１】
ハイパーバイザｈｖは、仮想マシン構成情報４１１を取得する（ステップＳ１５０１）。次に、ハイパーバイザｈｖは、仮想マシン構成情報４１１を元に、スナップショット保存バッファ４１６、および変更前データ保存バッファ４１７を割り当てる（ステップＳ１５０２）。
【００８２】
そして、ハイパーバイザｈｖは、ステップＳ１５０３〜Ｓ１５０５の各処理を並列に実行する。ステップＳ１５０３の処理として、ハイパーバイザｈｖは、スナップショット保存処理５０１を実行開始する。スナップショット保存処理５０１は、図１６で示す。また、ステップＳ１５０４の処理として、ハイパーバイザｈｖは、入出力処理５０２を実行開始する。入出力処理５０２は、図１８で示す。また、ステップＳ１５０５の処理として、ハイパーバイザｈｖは、動作再現用情報作成処理５０３を実行開始する。動作再現用情報作成処理５０３は、図２０で示す。ここで、ハイパーバイザｈｖは、ステップＳ１５０３〜Ｓ１５０５の各処理を、動作再現用情報処理５００を実行するスレッドとは別スレッドで実行する。
【００８３】
ステップＳ１５０３〜Ｓ１５０５の各処理終了後、ハイパーバイザｈｖは、システム管理者による終了指示を受信するまで待機する（ステップＳ１５０６）。
【００８４】
そして、ハイパーバイザｈｖは、ステップＳ１５０７〜Ｓ１５０９の各処理を並列に実行する。ステップＳ１５０７の処理として、ハイパーバイザｈｖは、終了イベントＡをスナップショット保存処理５０１へ送信する。また、ステップＳ１５０８の処理について、ハイパーバイザｈｖは、終了イベントＢを入出力処理５０２へ送信する。また、ステップＳ１５０９の処理について、ハイパーバイザｈｖは、終了イベントＣを動作再現用情報作成処理５０３へ送信する。
【００８５】
ステップＳ１５０７〜Ｓ１５０９の各処理終了後、ハイパーバイザｈｖは、仮想マシン構成情報４１１を元に割り当てたスナップショット保存バッファ４１６、および変更前データ保存バッファ４１７を解放する（ステップＳ１５１０）。ステップＳ１５１０の処理終了後、ハイパーバイザｈｖは、動作再現用情報処理５００を終了する。
【００８６】
図１６は、スナップショット保存処理５０１の一例を示すフローチャートである。スナップショット保存処理５０１は、ある時刻における仮想マシンのスナップショットの採取、および保存を繰り返し行う処理である。
【００８７】
ハイパーバイザｈｖは、終了イベントＡを受信するという条件が満たされるまで、スナップショット保存ループを繰り返す（ステップＳ１６０１〜Ｓ１６０６）。終了イベントＡを受信していない場合、スナップショット保存ループ内において、ハイパーバイザｈｖは、スナップショット保存開始イベントを入出力処理５０２へ送信する（ステップＳ１６０２）。次に、ハイパーバイザｈｖは、スナップショット保存詳細処理を実行する（ステップＳ１６０３）。スナップショット保存詳細処理については、図１７で示す。
【００８８】
そして、ハイパーバイザｈｖは、スナップショット保存完了イベントを動作再現用情報作成処理５０３へ送信する（ステップＳ１６０４）。次に、ハイパーバイザｈｖは、ディスク３０５に保存されたスナップショット４１３を動作再現用情報作成処理５０３へ送信する（ステップＳ１６０５）。そして、ハイパーバイザｈｖは、ステップＳ１６０１の処理に移行する。
【００８９】
また、終了イベントＡを受信したことにより、スナップショット保存ループを抜けた場合、ハイパーバイザｈｖは、スナップショット保存処理５０１を終了する。
【００９０】
図１７は、スナップショット保存詳細処理の一例を示すフローチャートである。スナップショット保存詳細処理は、１つのスナップショットを保存する処理である。また、スナップショット保存詳細処理は、ステップＳ１６０３から呼び出される。
【００９１】
ハイパーバイザｈｖは、現在の時刻を、スナップショット採取時刻として取得する（ステップＳ１７０１）。次に、ハイパーバイザｈｖは、全ての仮想マシンデータを保存するという条件が満たされるまで、仮想マシンデータ保存ループを繰り返す（ステップＳ１７０２〜Ｓ１７１０）。ここで、仮想マシンデータとは、仮想マシンが有するデバイスのデータであり、例えば、ＣＰＵ、ＲＡＭ、ＨＤＤ等のデータである。
【００９２】
保存していない仮想マシンデータがある場合、ハイパーバイザｈｖは、仮想マシンデータが全て取得済みか否かを判断する（ステップＳ１７０３）。まだ取得していない仮想マシンデータがある場合（ステップＳ１７０３：Ｎｏ）、ハイパーバイザｈｖは、変更前データ保存バッファ４１７からデータを取得する（ステップＳ１７０４）。そして、ハイパーバイザｈｖは、取得したデータが、未保存の仮想マシンデータか否かを判断する（ステップＳ１７０５）。ここで、取得したデータが未保存の仮想マシンデータか否かは、未保存フィールドの値を参照すれば判断することができる。
【００９３】
未保存の仮想マシンデータである場合（ステップＳ１７０５：Ｙｅｓ）、ハイパーバイザｈｖは、変更前データ保存バッファ４１７から未保存のスナップショットフィールドのデータを取得する（ステップＳ１７０６）。一方、未保存の仮想マシンデータでない場合（ステップＳ１７０５：Ｎｏ）、ハイパーバイザｈｖは、仮想マシン自身のデバイスデータを取得し、スナップショット保存バッファ４１６に取得したデータを保存する（ステップＳ１７０７）。
【００９４】
ステップＳ１７０６、またはステップＳ１７０７の処理終了後、ハイパーバイザｈｖは、取得したデータを、スナップショット４１３として、ディスク３０５に保存する（ステップＳ１７０８）。具体的には、ステップＳ１７０７を処理した場合、ハイパーバイザｈｖは、スナップショット保存バッファ４１６からデータを取得し、ディスク３０５に保存する。
【００９５】
仮想マシンデータが全て取得済みである場合（ステップＳ１７０３：Ｙｅｓ）、ハイパーバイザｈｖは、全ての仮想マシンデータを保存したことを示す値を設定する（ステップＳ１７０９）。そして、ステップＳ１７０９、またはステップＳ１７０８の処理終了後、ハイパーバイザｈｖは、ステップＳ１７０２の処理に移行する。また、全ての仮想マシンデータを保存したことにより、仮想マシンデータ保存ループを抜けた場合、ハイパーバイザｈｖは、スナップショット保存詳細処理を終了し、呼び出し元に復帰する。
【００９６】
図１８は、入出力処理５０２の一例を示すフローチャートである。入出力処理５０２は、仮想マシンに対する入出力命令を処理、監視、および保存する処理である。
【００９７】
ハイパーバイザｈｖは、ステップＳ１８０１〜Ｓ１８０４の一連の処理と、ステップＳ１８１１〜Ｓ１８１８の一連の処理とを並列に実行する。ステップＳ１８０１〜Ｓ１８０４の一連の処理として、ハイパーバイザｈｖは、終了イベントＢを受信するという条件が満たされるまで、スナップショット保存開始待機ループを繰り返す（ステップＳ１８０１〜Ｓ１８０４）。終了イベントＢを受信していない場合、ハイパーバイザｈｖは、スナップショット保存処理５０１からスナップショット保存開始イベントを受信するまで待機する（ステップＳ１８０２）。
【００９８】
スナップショット保存開始イベントを受信した場合、ハイパーバイザｈｖは、入出力トレースデータ保存バッファ４１８から取得した保存対象の入出力トレースデータを、動作再現用情報作成処理５０３に送信する（ステップＳ１８０３）。そして、ハイパーバイザｈｖは、ステップＳ１８０１の処理に移行する。
【００９９】
また、ステップＳ１８１１〜Ｓ１８１８の一連の処理として、ハイパーバイザｈｖは、終了イベントＢを受信するという条件が満たされるまで、スナップショット保存ループを繰り返す（ステップＳ１８１１〜Ｓ１８１８）。終了イベントＢを受信していない場合、ハイパーバイザｈｖは、仮想マシンのデータ入出力命令を受信するまで待機する（ステップＳ１８１２）。ここで、仮想マシンのデータ入出力命令とは、仮想マシンが有するデバイスに対する入力命令やデバイスからの出力命令である。
【０１００】
そして、ハイパーバイザｈｖは、入出力命令を受信する（ステップＳ１８１３）。次に、ハイパーバイザｈｖは、入出力トレースデータ保存処理を実行する（ステップＳ１８１４）。入出力トレースデータ保存処理は、図１９で示す。そして、ステップＳ１８１４の処理終了後、ハイパーバイザｈｖは、入出力命令の種類を確認する（ステップＳ１８１５）。受信した入出力命令が入力命令である場合（ステップＳ１８１５：入力命令）、ハイパーバイザｈｖは、入力命令に従って、入力処理を実行する（ステップＳ１８１６）。また、入出力命令が出力命令である場合（ステップＳ１８１５：出力命令）、ハイパーバイザｈｖは、出力命令に従って、出力処理を実行する（ステップＳ１８１７）。
【０１０１】
ステップＳ１８１６、またはステップＳ１８１７の処理終了後、ハイパーバイザｈｖは、ステップＳ１８１１の処理に移行する。
【０１０２】
また、終了イベントＢを受信したことにより、スナップショット保存開始待機ループおよびスナップショット保存ループを抜けた場合、ハイパーバイザｈｖは、入出力処理５０２を終了する。
【０１０３】
図１９は、入出力トレースデータ保存処理の一例を示すフローチャートである。入出力トレースデータ保存処理は、入出力命令をトレースデータ４１４に保存する処理である。また、入出力トレースデータ保存処理は、ステップＳ１８１４から呼び出される。
【０１０４】
ハイパーバイザｈｖは、受信した入出力命令に関して、デバイスＩＤ、入出力発生時刻、入出力命令の種類、データ、データ長を取得する（ステップＳ１９０１）。次に、ハイパーバイザｈｖは、入出力先がトレース対象となる仮想マシンのデバイスか否かを判断する（ステップＳ１９０２）。
【０１０５】
入出力先がトレース対象となる仮想マシンのデバイスである場合（ステップＳ１９０２：Ｙｅｓ）、続けて、ハイパーバイザｈｖは、入出力命令の操作対象アドレスのデータがスナップショット４１３に保存済みか否かを判断する（ステップＳ１９０３）。入出力命令の操作対象アドレスのデータがスナップショット４１３に保存済みでない場合（ステップＳ１９０３：Ｎｏ）、ハイパーバイザｈｖは、既に保存されたスナップショット用の変更前データがあるか否かを判断する（ステップＳ１９０４）。ここで、既に保存されたスナップショット用の変更前データがあるか否かは、変更前データ保存バッファ４１７を参照することにより判断することができる。変更前データ保存バッファ４１７に、ステップＳ１９０１で取得したデバイスＩＤと同一のＩＤであり、かつ入出力命令の操作対象アドレスと同一のアドレスがあり、未保存フィールドが「はい」であるレコードがあれば、変更前データがあることになる。
【０１０６】
既に保存されたスナップショット用の変更前データがない場合（ステップＳ１９０４：Ｎｏ）、ハイパーバイザｈｖは、デバイスの操作対象アドレスから元データを読み取って、変更前データ保存バッファ４１７に保存する（ステップＳ１９０５）。次に、ハイパーバイザｈｖは、保存した変更前データ保存バッファ４１７のレコードの未保存フィールドを、「はい」に設定する（ステップＳ１９０６）。そして、ハイパーバイザｈｖは、入出力トレースデータ保存バッファ４１８を割り当てる（ステップＳ１９０７）。また、既に保存されたスナップショット用の変更前データがある場合（ステップＳ１９０４：Ｙｅｓ）、または、入出力命令の操作対象アドレスのデータがスナップショット４１３に保存済みである場合（ステップＳ１９０３：Ｙｅｓ）、ハイパーバイザｈｖは、ステップＳ１９０７の処理に移行する。
【０１０７】
ステップＳ１９０７の処理終了後、ハイパーバイザｈｖは、入出力トレースデータ保存バッファ４１８にデバイスＩＤ、入出力発生時刻、入出力命令の種類、データ、データ長を保存する（ステップＳ１９０８）。ステップＳ１９０８の処理終了後、または、入出力先がトレース対象となる仮想マシンのデバイスでない場合（ステップＳ１９０２：Ｎｏ）、ハイパーバイザｈｖは、入出力トレースデータ保存処理を終了し、呼び出し元に復帰する。
【０１０８】
図２０は、動作再現用情報作成処理５０３の一例を示すフローチャートである。動作再現用情報作成処理５０３は、動作再現用情報４１５を作成する処理である。
【０１０９】
ハイパーバイザｈｖは、終了イベントＣを受信するという条件が満たされるまで、動作再現用情報作成ループを繰り返す（ステップＳ２００１〜Ｓ２００５）。終了イベントＣを受信していない場合、動作再現用情報作成ループ内において、ハイパーバイザｈｖは、スナップショット保存処理５０１からのスナップショット保存完了イベントを受信するまで待機する（ステップＳ２００２）。スナップショット保存完了イベントを受信した場合、ハイパーバイザｈｖは、入出力処理から保存対象の入出力トレースデータを受信するまで待機する（ステップＳ２００３）。
【０１１０】
そして、ハイパーバイザｈｖは、動作再現用情報保存処理を実行する（ステップＳ２００４）。動作再現用情報保存処理は、図２１で示す。そして、ハイパーバイザｈｖは、ステップＳ２００１の処理に移行する。
【０１１１】
また、終了イベントＣを受信したことにより、動作再現用情報作成ループを抜けた場合、ハイパーバイザｈｖは、動作再現用情報作成処理５０３を終了する。
【０１１２】
図２１は、動作再現用情報保存処理の一例を示すフローチャートである。動作再現用情報保存処理は、スナップショット４１３と、トレースデータ４１４とを関連付けた動作再現用情報４１５を保存する処理である。また、動作再現用情報保存処理は、ステップＳ２００４から呼び出される。
【０１１３】
ハイパーバイザｈｖは、ステップＳ２１０１の処理と、ステップＳ２１０２の処理とを並列に実行する。ステップＳ２１０１の処理として、ハイパーバイザｈｖは、スナップショット４１３を取得する。また、ステップＳ２１０２の処理として、ハイパーバイザｈｖは、入出力トレースデータを取得し、トレースデータ４１４としてディスク３０５に保存する。
【０１１４】
ステップＳ２１０１、Ｓ２１０２の処理終了後、ハイパーバイザｈｖは、取得したスナップショット４１３およびトレースデータ４１４の関連付けを行って、動作再現用情報４１５を作成する（ステップＳ２１０３）。そして、ハイパーバイザｈｖは、入出力トレースデータの保存バッファである入出力トレースデータ保存バッファ４１８を解放する（ステップＳ２１０４）。ステップＳ２１０４の処理終了後、ハイパーバイザｈｖは、動作再現用情報保存処理を終了し、呼び出し元に復帰する。
【０１１５】
図２２は、動作再現処理の一例を示すフローチャートである。動作再現処理は、調査を行う際に、仮想マシンの動作を再現する処理である。
【０１１６】
ハイパーバイザｈｖは、動作再現用情報４１５を取得する（ステップＳ２２０１）。次に、ハイパーバイザｈｖは、動作再現用情報４１５のスナップショット４１３を元に仮想マシンの状態を復元する（ステップＳ２２０２）。そして、ハイパーバイザｈｖは、動作再現用情報４１５のトレースデータ４１４のうち、復元した仮想マシン上での現在の時刻より後であって、かつ最も近い時刻の命令データを取り出す（ステップＳ２２０３）。次に、ハイパーバイザｈｖは、トレースデータ４１４の時刻、デバイスＩＤを元に、復元した仮想マシンに命令データを逐次投入する（ステップＳ２２０４）。投入された命令データを実行することにより、復元した仮想マシンは、スナップショットを採取した仮想マシンの動作を再現する（ステップＳ２２０５）。
【０１１７】
次に、ハイパーバイザｈｖは、システム２００の管理者による終了指示の有無を確認する（ステップＳ２２０６）。そして、ハイパーバイザｈｖは、終了指示があったか否かを判断する（ステップＳ２２０７）。終了指示がない場合（ステップＳ２２０７：Ｎｏ）、ハイパーバイザｈｖは、ステップＳ２２０３の処理に移行する。一方、終了指示があった場合（ステップＳ２２０７：Ｙｅｓ）、ハイパーバイザｈｖは、動作再現処理を終了する。
【０１１８】
次に、本実施の形態における資料採取の流れおよび原因調査の流れを、図２３を用いて説明する。
【０１１９】
図２３は、本実施の形態における資料採取および原因調査の流れを示す説明図である。図２３では、時刻ｔ１からスナップショット４１３とトレースデータ４１４とを採取し続け、時刻ｔ４で障害が発生したものとする。また、説明の簡略化のため、時刻ｔ４は、時刻ｔ３におけるスナップショット４１３がちょうど採取し終えた時刻であるとする。
【０１２０】
図２３の（１）では、資料採取時の動作を示す。ハイパーバイザｈｖは、時刻ｔ１からｔ２まで、時刻ｔ１におけるスナップショット４１３を採取する。また、ハイパーバイザｈｖは、時刻ｔ２から時刻ｔ３まで、時刻ｔ２におけるスナップショット４１３を採取する。また、ハイパーバイザｈｖは、時刻ｔ３から時刻ｔ４まで、時刻ｔ３におけるスナップショット４１３を採取する。このように、ハイパーバイザｈｖは、仮想マシンｖｍを停止させることなく、資料の採取を行うことができる。また、ハイパーバイザｈｖは、仮想マシンｖｍの連続した状態の変化を、単位のリリースで採取、保存、再生できるようになる。
【０１２１】
また、図２３（２）では、原因調査時の動作を示す。原因調査する際には、ハイパーバイザｈｖは、時刻ｔ３におけるスナップショット４１３から仮想マシンｖｍの状態を復元すればよく、障害発生時の迅速な再現と調査が可能になる。
【０１２２】
次に、図２３で示した本実施の形態における資料採取の流れおよび原因調査の流れを、データを用いてより詳細に説明した例を、図２４、図２５を用いて説明する。図２４と図２５とでは、スナップショット４１３およびトレースデータ４１４を、２０１６／０１／０１  ００：００：００から採取開始している。そして、障害が発生した時刻が、２０１６／０１／０１  ２３：００：００であるとする。
【０１２３】
図２４は、本実施の形態における資料採取の流れの詳細を示す説明図である。図２４で示す表２４０１、２４０２は、それぞれ、ハイパーバイザｈｖが採取したスナップショット４１３と、トレースデータ４１４とを示す。表２４０１が示すように、ハイパーバイザｈｖは、１時間ごとにスナップショットを採取している。図２４に示す表２４０１は、レコード２４０１−０、１、…、２１、２２を有する。
【０１２４】
表２４０１は、時刻と、アドレスと、データというフィールドを有する。時刻フィールドは、スナップショット４１３を採取した時刻を示す。アドレスフィールドおよびデータフィールドは、スナップショット４１３が有するデータの一部として、障害の原因となったアドレス、および、アドレスのデータの内容を示す。例えば、レコード２４０１−０は、００：００：００に採取したスナップショット４１３を示す。
【０１２５】
また、図２４に示す表２４０２は、２１時以降に記録した、レコード２４０２−１、２、…、５を有する。表２４０２は、時刻と、アドレスと、データ書き込みを示す。時刻フィールドは、入出力命令が発生した時刻を示す。アドレスフィールドは、入出力命令の操作対象アドレスを示す。およびデータ書き込みフィールドは、入出力命令によって書き込まれたデータを示す。例えば、レコード２４０２−１は、２１：０１：００に発生した入出力命令を示す。
【０１２６】
図２５は、本実施の形態における原因調査の流れの詳細を示す説明図である。システム２００の管理者ａｄは、障害が発生した際に、障害を確認するため、障害を再現したいことがある。この場合、ハイパーバイザｈｖは、レコード２４０１−２２で示す２２：００：００のスナップショット４１３と、２２：００：００のスナップショット４１３に関連付けられたトレースデータ４１４を用いることで、障害を再現することができる。このように、ハイパーバイザｈｖは、１時間分の動作を再現すればよい。
【０１２７】
次に、管理者ａｄが２３時経過時点の処理を確認した結果、２３時以前の処理が問題であると判明した場合、管理者ａｄは、詳しい調査を行うことがある。例えば、２３時より前の書き込み処理によってプログラムが想定していないデータが書き換えられ、２３時に該当のデータを読み込んで処理をしたことによって障害が発生したことを管理者ａｄが確認した場合である。このような場合、管理者ａｄは、詳しい調査として、どの書き込み処理によって想定していないデータが書き込まれたかを特定する。
【０１２８】
図２５の例では、管理者ａｄが、アドレス０ｘ１００００００２のデータが「０１」から「００」に書き換えられた結果、障害が発生したとする。管理者ａｄは、２２時のスナップショット４１３から順に、障害の原因となったデータのアドレス０ｘ１００００００２を確認し、障害の原因となったデータが変化する前のスナップショットを特定する。図２５の場合では、管理者ａｄは、レコード２４０１−２１が示す２１時のスナップショット４１３を、障害の原因となったデータが変化する前の最も新しいスナップショットとして特定する。また、ハイパーバイザｈｖが、２２時のスナップショット４１３から順に、障害の原因となったデータが変化したかを確認することにより、障害の原因となったデータが変化する前の最も新しいスナップショットを特定してもよい。
【０１２９】
障害の原因となったデータが変化する前の最も新しいスナップショットを特定した後、ハイパーバイザｈｖは、データが変化する前の最も新しいスナップショット４１３から、障害が発生した仮想マシンｖｍの状態を復元する。図２５の例では、ハイパーバイザｈｖは、２１時時点のスナップショット４１３から、障害が発生した仮想マシンｖｍの２１時時点の状態を復元する。そして、ハイパーバイザｈｖは、２１時時点のスナップショット４１３からトレースデータ４１４による再現を開始する。図２５の例では、レコード２４０２−５が示す命令によって、アドレス０ｘ１００００００２のデータが書き換えられることになる。
【０１３０】
このように、ハイパーバイザｈｖは、２１時時点からの仮想マシンｖｍの状態を再現しているため、管理者ａｄは、どこで障害の原因となったデータが書き換えられたかを短時間で特定できる。
【０１３１】
ここで、従来技術として、スナップショットもトレースデータも採取しない場合、どこで障害の原因となったデータが書き換えられたかを特定することができないことがある。また、従来技術として、仮想マシンの運用開始前だけにスナップショットを採取し、仮想マシンの運用中にトレースデータを採取した場合、どこでデータが書き換えられたかを特定することはできる。しかしながら、仮想マシンの運用開始前からのスナップショットから、順次トレースデータの命令を実行することになるため、原因の特定に時間がかかる。
【０１３２】
具体的には、図２４、図２５と比較するため、０時時点のスナップショットと、０時以降のトレースデータがあるとする。この場合、調査を行う環境上で現象を確認するまでに２３時間分の処理を実行しなければならない。また、２３時間経過時点の処理を確認した結果、それ以前の処理が問題であったことが判明した場合、詳しい調査を行うためには、もう一度最初から処理を行わなければならない。また、毎回再生を行いたくない場合、調査環境上で時間をかけて再生しながら、一定時間毎にデータを保存する必要がある。しかし、この場合、どこに問題の原因があるか不明なので、一度現象が発生するまで再生することになる。この手間を省くことはできないため、調査に時間がかかる。
【０１３３】
以上説明したように、ハイパーバイザｈｖは、第１の時刻における仮想マシンｖｍのスナップショット採取中に発生した入出力命令による変更前のデータを変更前データ保存バッファ４１７に退避する。そして、ハイパーバイザｈｖは、変更前データ保存バッファ４１７に該データがあれば該データをスナップショットに書き込む。これにより、ハイパーバイザｈｖは、仮想マシンｖｍの動作を継続させたまま、すなわち、ダウンタイムを発生させずに、適切なスナップショット４１３とトレースデータとを関連付けることができる。
【０１３４】
また、ハイパーバイザｈｖは、第１の時刻以降の仮想マシンｖｍの動作を再現する場合、第１のスナップショットに基づいて仮想マシンｖｍの状態を復元し、第１のスナップショットに関連付けた入出力命令を発生順に投入してもよい。これにより、ハイパーバイザｈｖは、第１の時刻以降の仮想マシンｖｍの動作を再現することができる。また、入出力命令を発生順に投入した結果、第２の時刻における仮想マシンｖｍの状態となった場合、引き続き動作を再現させたい場合、ハイパーバイザｈｖは、第２のスナップショットに関連付けた入出力命令を投入すればよい。
【０１３５】
また、仮想マシンｖｍが有する記憶領域は、仮想マシンｖｍのプロセッサのレジスタ、メモリ、ディスクである。さらに、仮想マシンｖｍが有する記憶領域は、仮想マシンｖｍのプロセッサがキャッシュメモリを有していれば、キャッシュメモリを含む。さらに、仮想マシンｖｍのプロセッサは、ＣＰＵの他、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等でもよい。また、仮想マシンｖｍが、図４で示したように、ＮＩＣ４２４、キーボード４２５、マウス４２６、モニタ４２７といった周辺機器を有するならば、仮想マシンｖｍが有する記憶領域は、周辺機器のレジスタを含む。周辺機器のレジスタとは、例えば、周辺機器を制御するレジスタや、周辺機器のステータスを示す値が格納されるレジスタ等である。
【０１３６】
また、本実施の形態では、動作を再現させる対象のコンピュータが仮想マシンである場合、特別なハードウェアを用意しなくても実施することができる。また、動作を再現させる対象のコンピュータが物理マシンである場合、本実施の形態にかかる物理マシンｐｍが、動作を再現させる対象の物理マシンの状態の取得と、発生した入出力命令の取得とができればよい。例えば、動作を再現させる対象の物理マシンのマザーボードに、物理マシンの状態や、発生した入出力命令を出力できる機能があればよい。
【０１３７】
なお、本実施の形態で説明した再現情報作成方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本再現情報作成プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本再現情報作成プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１３８】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１３９】
（付記１）コンピュータに、
動作を再現させる対象のコンピュータが有する記憶領域への入出力命令を、前記入出力命令が発生した時刻に関連付けて記憶し、
前記対象のコンピュータから第１の時刻における前記対象のコンピュータの状態を示す第１のスナップショットを採取する間に前記入出力命令が発生した場合、前記入出力命令の対象となる記憶領域のデータが前記第１のスナップショットに含まれていなければ、前記入出力命令によって変更される前の変更前のデータを前記第１のスナップショットとは異なる他の記憶領域に記憶し、
前記対象のコンピュータから前記第１のスナップショットを採取する際に、前記他の記憶領域に記憶した前記変更前のデータがある場合、前記変更前のデータを前記第１のスナップショットに書き込み、
前記第１の時刻から前記第１のスナップショットの次に取得する第２のスナップショットを取得する第２の時刻までの時刻に関連付けた入出力命令と、前記第１のスナップショットとを関連付けて記憶する、
処理を実行させることを特徴とする再現情報作成プログラム。
【０１４０】
（付記２）前記コンピュータに、
前記第１の時刻以降の前記対象のコンピュータの動作を再現する場合、前記第１のスナップショットに基づいて、前記第１の時刻における前記対象のコンピュータの状態を復元し、
前記第１の時刻における前記対象のコンピュータの状態を復元したコンピュータに、前記第１のスナップショットに関連付けた入出力命令を、当該入出力命令が発生した順に実行させる、
処理を実行させることを特徴とする付記１に記載の再現情報作成プログラム。
【０１４１】
（付記３）前記対象のコンピュータが有する記憶領域は、前記対象のコンピュータのプロセッサのレジスタ、メモリ、ディスクであることを特徴とする付記１または２に記載の再現情報作成プログラム。
【０１４２】
（付記４）前記対象のコンピュータは、仮想マシンであることを特徴とする付記１〜３のいずれか一つに記載の再現情報作成プログラム。
【０１４３】
（付記５）動作を再現させる対象のコンピュータが有する記憶領域への入出力命令を、前記入出力命令が発生した時刻に関連付けて記憶し、
前記対象のコンピュータから第１の時刻における前記対象のコンピュータの状態を示す第１のスナップショットを採取する間に前記入出力命令が発生した場合、前記入出力命令の対象となる記憶領域のデータが前記第１のスナップショットに含まれていなければ、前記入出力命令によって変更される前の変更前のデータを前記第１のスナップショットとは異なる他の記憶領域に記憶し、
前記対象のコンピュータから前記第１のスナップショットを採取する際に、前記他の記憶領域に記憶した前記変更前のデータがある場合、前記変更前のデータを前記第１のスナップショットに書き込み、
前記第１の時刻から前記第１のスナップショットの次に取得する第２のスナップショットを取得する第２の時刻までの時刻に関連付けた入出力命令と、前記第１のスナップショットとを関連付けて記憶する、
制御部を有することを特徴とする再現情報作成装置。
【０１４４】
（付記６）コンピュータが、
動作を再現させる対象のコンピュータが有する記憶領域への入出力命令を、前記入出力命令が発生した時刻に関連付けて記憶し、
前記対象のコンピュータから第１の時刻における前記対象のコンピュータの状態を示す第１のスナップショットを採取する間に前記入出力命令が発生した場合、前記入出力命令の対象となる記憶領域のデータが前記第１のスナップショットに含まれていなければ、前記入出力命令によって変更される前の変更前のデータを前記第１のスナップショットとは異なる他の記憶領域に記憶し、
前記対象のコンピュータから前記第１のスナップショットを採取する際に、前記他の記憶領域に記憶した前記変更前のデータがある場合、前記変更前のデータを前記第１のスナップショットに書き込み、
前記第１の時刻から前記第１のスナップショットの次に取得する第２のスナップショットを取得する第２の時刻までの時刻に関連付けた入出力命令と、前記第１のスナップショットとを関連付けて記憶する、
処理を実行することを特徴とする再現情報作成方法。
【符号の説明】
【０１４５】
１０１  再現情報作成装置
４０１  トレースデータ記憶部
４０２  スナップショット記憶部
４０３  関連付け記憶部
４０４  復元部
４０５  実行部
４１３  スナップショット
４１４  トレースデータ
４１５  動作再現用情報
【図１】
2018022441.tif 000003
【図２】
2018022441.tif 000004
【図３】
2018022441.tif 000005
【図４】
2018022441.tif 000006
【図５】
2018022441.tif 000007
【図６】
2018022441.tif 000008
【図７】
2018022441.tif 000009
【図８】
2018022441.tif 000010
【図９】
2018022441.tif 000011
【図１０】
2018022441.tif 000012
【図１１】
2018022441.tif 000013
【図１２】
2018022441.tif 000014
【図１３】
2018022441.tif 000015
【図１４】
2018022441.tif 000016
【図１５】
2018022441.tif 000017
【図１６】
2018022441.tif 000018
【図１７】
2018022441.tif 000019
【図１８】
2018022441.tif 000020
【図１９】
2018022441.tif 000021
【図２０】
2018022441.tif 000022
【図２１】
2018022441.tif 000023
【図２２】
2018022441.tif 000024
【図２３】
2018022441.tif 000025
【図２４】
2018022441.tif 000026
【図２５】
2018022441.tif 000027