図1は、計算機システムのハードウェア構成の一例を示す。
本実施例の計算機システムは、複数の計算機10を含む。計算機10は少なくとも、OS(Operating System)を含むプログラムを実行する演算装置11と、プログラムおよびその実行に必要なデータを格納する記憶装置12と、他の計算機10に対してメッセージの送受信を行う通信装置13と、外部ネットワーク22との間で制御データ等の送受信を行う通信装置14とを含む。ここで記憶装置12は、例えばRAMやハードディスクなどである。また、通信装置13、14は、例えばLANアダプタなどである。演算装置11は2つ以上のCPUコアを含んでいてもよい。
複数の計算機10は通信装置13を用いて通信を行う。複数の通信装置13は内部ネットワーク21で接続される。外部ネットワーク22は例えばネットワークスイッチなどで構成され、計算機10間でのデータの送受信を行う。制御システムにおいて、計算機10は外部ネットワーク22から同時に同じ制御データを受信するシステムが多いが、本実施例では限定事項ではない。また、計算機10間でのメッセージの送受信と制御データの送受信を同じ通信装置で行ってもよい。
本実施例の計算機システムは、3台の計算機10を含み、それぞれ計算機A、計算機Bと計算機Cとする。計算機システムを構成する計算機10の台数は限定事項ではない。
複数の計算機10の何れかが、入力装置と表示装置を含んでいてもよいし、計算機システムが、入力装置と表示装置を含む管理計算機を含んでいてもよい。表示装置は、入力のための画面を表示し、入力装置は、ユーザからの入力を受け付ける。
図2は、計算機A及びBのソフトウェア構成を示す。
このソフトウェアは、記憶装置12内で記憶され、演算装置11によって実行される。このソフトウェアは、OS31と、システム状態再現部41と、AP管理ミドル51と、少なくとも1つのアプリ(アプリケーション)61とを含む。AP管理ミドル51は、アプリ61の実行に必要な機能を提供するミドルウェアである。計算機AとBで実行されるアプリ61は、AP管理ミドル51によって実行を管理される。アプリ61は、周期的に動作する。
AP管理ミドル51は、通信処理部51Aと、AP制御部51Bと、OS31からのタイマーイベントやシグナルイベントを処理するイベント管理部51Cとを含む。通信処理部51Aは、OS31の機能を利用して、アプリ61に必要なデータを通信装置13または通信装置14を通じて送受信を行う。AP制御部51Bは、アプリ61の順序制御(シーケンス制御)を行う。イベント管理部51Cは、OS31の機能を利用して、タイマーイベントについてアプリ61からの設定や、OS31からのタイマーイベントの受信や、複数のアプリ61間のシグナルの送受信処理を行う。
AP管理ミドル51において、通信装置13または通信装置14からアプリ61へ入力される送受信データと、OS31からのタイマーイベント及びシグナルイベントを含む内部イベント入力データとが、管理される。また、通信処理部51AとAP制御部51Bとイベント管理部51Cとは、実行のログを記録する。ログ記録の処理方法は、限定されないが、例えば標準的なOS31のトレース機能を用いることで実現できる。
アプリ61の実行状態再現処理を行うシステム状態再現部41は、通信管理部42と、APログ制御部43と、Snapshot制御部44と、状態再現制御部45と、Snapshot制御テーブル46と、ログ情報47と、状態再現同期制御テーブル49とを含む。
通信管理部42は、計算機A、計算機Bと計算機C間でのシステム状態再現に必要なデータ送受信と、AP管理ミドル51の通信処理部51Aからの外部通信ログとを処理する。APログ制御部43は、AP管理ミドル51からAPログを取得する。Snapshot制御部44は、ある特定の時刻の、計算機Aと計算機Bと計算機Cとの夫々のアプリ61の状態を再現するために必要なシステム状態をコピーするSnapshot作成を行う。状態再現制御部45は、Snapshot制御部44により作成されたSnapshotと、AP管理ミドル51のログ情報47をもとに、ある特定の時刻の計算機Aと計算機Bと計算機Cの夫々のアプリ61の状態を再現する。本実施例では、計算機システム内のアプリ61の状態をシステム状態と呼ぶ。Snapshot制御テーブル46は、Snapshot作成とアプリ61の状態の再現とに必要なパラメータを格納する。ログ情報47は、通信処理部51Aにより作成される外部通信ログと、APログ制御部43により作成されアプリ61の実行結果を示すAPログと、イベント管理部51Cにより作成されるイベントログとを格納する。状態再現同期制御テーブル49は、計算機Aと計算機B、計算機Cの間でSnapshot作成時刻と再現時刻の同期をとるための情報を格納する。
計算機Aと計算機Bの夫々におけるアプリ61は、それぞれの制御周期で動作し、制御処理を行う。計算機A及び計算機Bは、制御対象機器に接続されている。制御対象機器は例えば、工場や鉄道における機器である。制御処理は、制御対象機器を制御する。制御処理の実行は、制御周期の一部の時間で終了する。そのため、制御周期のうち、制御処理の実行状態の残りの期間において、アプリ61は、アイドル状態である。例えば、制御周期が1秒であり、制御周期の最初の0.5秒間においてアプリ61は実行状態であり、残りの0.5秒間においてアプリ61はアイドル状態である。制御処理を行うアプリ61を制御アプリと呼ぶことがある。AP管理ミドル51は、制御処理を制御する。
図3は、計算機Cのソフトウェア構成を示す。
このソフトウェアは、OS31と、システム状態再現部41と、仮想化基盤71と、仮想計算機81とを含む。計算機Cのソフトウェアは、計算機Aと計算機BのAP管理ミドル51の代わりに仮想化基盤71を含み、計算機Aと計算機Bのアプリ61の代わりに仮想計算機81を含む。仮想化基盤71は、仮想計算機81を実行する。仮想計算機81は、OS82と、少なくとも1つのアプリ61とを実行する。仮想化基盤71は、APログを記録する。このAPログは、計算機A、Bのようにアプリ61の実行結果を示すAPログではなく、仮想計算機81の実行結果を示すAPログである。仮想化基盤71は、計算機と計算機BのAP管理ミドル51と同様、仮想計算機81のAPログを記録する。仮想化基盤71は、一つの仮想計算機81を一つのアプリとして運用する。仮想計算機81が実行されると仮想計算機81内のOS82が仮想計算機81内のアプリ61を実行する。仮想計算機81のAPログを記録することで、アプリ61の実行結果を示すAPログを記録することが可能である。
計算機Cのシステム状態再現部41において、通信管理部42とAPログ制御部43により受信されるアプリ61のAPログは、仮想化基盤71からのAPログであり、ログ内容は、仮想計算機81のAPログである。計算機Cのアプリ61の状態のSnapshotを作成し、その状態を再現するには、仮想計算機81のSnapshotを作成し、その状態を再現すればよい。このように計算機Cの仮想計算機81と、計算機Aと計算機Cのアプリ61とは、計算機Aと計算機Bと計算機Cのシステム状態再現部41による再現対象のアプリとして扱うことができる。以下の実施例においては、Snapshot作成とシステム状態再現におけるアプリ61とAP管理ミドル51の処理の内容について述べるが、計算機Cにおいては仮想計算機81と仮想化基盤71の処理に置き換えればよい。
計算機A及びBにおいては、アプリ61を実行部と呼び、計算機Cにおいては、仮想計算機81を実行部と呼ぶ。計算機A及びBにおいては、AP管理ミドル51を実行制御部と呼び、計算機Cにおいては、仮想化基盤71を実行制御部と呼ぶ。
本実施例では、システムの中に、AP管理ミドル51と、AP管理ミドル51によって実行管理されるアプリ61とを含む計算機が、少なくとも1台あることを前提とする。
AP管理ミドル51または仮想化基盤71が、外部通信と、アプリ61の実行結果と、OS31から発行されるイベントとのログを記録し、システム状態再現部41が、再現を制御することで、OS31を変更することなく、複数の計算機の状態を再現することができる。これにより、計算機A、Bのような物理計算機上のアプリ61であっても、計算機Cのような仮想計算機上のアプリ61であっても、同様に扱うことができ、物理計算機と仮想計算機が混在していても、システム状態を再現することができる。
図4は、Snapshot制御テーブル46を示す。
本テーブルは、システム状態を再現する目標の再現時刻からシステムの最後の実行時刻までの時間を示す戻り時間RTNと、特定時刻で作成されたSnapshotから再現時刻までの再現にかかる時間の許容時間Tsと、Coordinatorの役割の計算機をあらわすCoordinator情報と、計算機Aと計算機Bと計算機Cが再現処理状態か否かをあらわす動作モードとを含む。Coordinatorは、計算機Aと計算機Bと計算機Cの間で、Snapshot作成の同期とシステム再現の同期とを調停する。本実施例において、復元に用いられる復元Snapshotの状態から再現時刻の状態までログに基づいて再現する時間は、復元Snapshotの作成時刻から再現時刻までの時間に等しいとする。
戻り時間RTNは、ミリ秒単位でユーザから設定される。許容時間Tsは、分単位でユーザから設定される。その設定方法は、コマンド入力でも設定ファイルによるものでもよい。Coordinator情報は、「1」であれば、Coordinatorの役割の計算機であることを示し、「0」であればCoordinatorの役割をしない計算機であることを示す。動作モードは、「L」であれば、通信管理部42とAPログ制御部43がログテーブル48にログを格納するログモードであることを示す。「R」であれば、計算機システムがある特定時刻の状態を再現する状態再現モードであることを示す。Coordinatorは、通信管理部42の初期処理により設定される。動作モードは通信管理部42と状態再現制御部45によって設定される。
Coodinatorである計算機は、表示装置と入力装置に接続されていてもよいし、表示装置と入力装置を含む端末に、ネットワークを介して接続されていてもよい。Coodinatorである計算機は、許容時間を受け付ける画面(第1入力画面)を表示装置に表示させ、許容時間が入力装置に入力される場合、入力された許容時間を取得し、Snapshot制御テーブル46へ設定してもよい。また、Coodinatorである計算機は、再現要求を受け付ける画面(第2入力画面)を表示装置に表示させ、再現要求が入力装置に入力される場合、入力された再現要求を取得し、後述の再現同期開始処理を実行してもよい。再現要求は、戻り時間及び再現時刻の何れかを含む。ユーザが許容時間を入力することにより、再現に要する時間を制限することができる。ユーザが戻り時間又は再現時刻を入力することにより、任意の時刻の再現を行うことができる。
図5は、ログ情報47を示す。
ログ情報47は、ログ管理テーブル47Aと、外部通信ログテーブル48Aと、APログテーブル48Bと、イベントログテーブル48Cとを含む。
ログ管理テーブル47Aは、アプリ61に関わるログを格納する。ログは、外部通信ログと、APログと、イベントログとを含む。ログ管理テーブル47Aは、ログ毎のエントリを含む。各エントリは、ログ識別子と、ログ種類と、ログ内容と、照合状態とを含む。ログ識別子は、ログを識別するためのものである。ログ種類は、通信管理部42とAP管理ミドル51の通信処理部51Aからの外部通信ログを表すCOMMと、AP管理ミドル51のAP制御部51BからのAPログを表すAPと、AP管理ミドル51のイベント管理部51Cからのイベントログを表すEVTとの何れか一つを示す。ログ内容は、当該種類のテーブルの対応するエントリの内容を示す。ログ種類がCOMMであれば、ログ内容は、外部通信ログテーブル48Aの対応するエントリの内容を示す。ログ種類がAPであれば、ログ内容は、APログテーブル48Bの対応するエントリの内容を示す。ログ種類がEVTであれば、ログ内容は、イベントログテーブル48Cの対応するエントリの内容を示す。照合状態は、Snapshot制御テーブルの動作モードが「R」の状態再現モードである時、特定時刻のアプリ61の再現の照合結果を示す。照合処理は後述する。照合が未実施である場合、照合状態は「0」、照合結果が一致である場合、照合状態は「OK」、照合結果が不一致である場合、照合状態は「NG」となる。照合状態は、照合結果によってシステムの再現処理の継続可否を決定し、システム再現処理の健全性を確保するために用いられる。
外部通信ログテーブル48Aは、通信管理部42によって作成され、計算機間の通信パケットの入力と出力である外部通信のログを示す。外部通信ログテーブル48Aは、外部通信毎のエントリを含む。各エントリは、タイムスタンプと、ログ内容と、通信内容保存先とを含む。タイムスタンプは、通信が行われた時刻が格納される。ログ内容は、外部通信ログフォーマットにしたがって格納される。詳細は後述する。通信内容保存先は、計算機10間の通信パケットの内容の保存先のディスク上のファイル名や、メモリ上の番地等を示す。
APログテーブル48Bは、AP管理ミドル51のAP制御部51Bから送られ、アプリ間の通信のログを示す。APログテーブル48Bは、IPC(プロセス間通信)毎のエントリを含む。各エントリは、タイムスタンプと、タスク識別子と、IPC識別子と、開始終了情報とを含む。タイムスタンプは該当ログの発生時刻を表す。タスク識別子は、アプリ61を識別するための情報であり、例えばOS31のプロセス識別子のPIDである。IPC識別子は、複数のアプリ61間で順序制御を行うために、AP管理ミドル51により作成され管理されるIPCの情報である。アプリ61が、処理終了時に次に実行が必要な別のアプリ61を、AP管理ミドル51により提供されるIPCを通じて起し実行させることで、複数のアプリ61の順序制御が実現される。開始終了情報は、制御処理の初めに処理するアプリに対して「S」を示し、制御処理の終了時に処理するアプリに対して「E」を示し、それ以外のアプリに対して「0」を示す。
イベントログテーブル47Cは、AP管理ミドル51のイベント管理部51Cから送られ、イベントのログを示す。イベントログテーブル47Cは、イベント毎のエントリを含む。各エントリは、タイムスタンプと、タスク識別子と、イベント識別子と、イベント内容とを含む。タイムスタンプは、該当ログの発生時刻を表す。タスク識別子は、イベント送受信対象のアプリ61を識別するための情報である。イベント識別子は、発生イベントを識別するための情報である。イベント内容は、イベント種類がタイマーである場合に「TRi」を示し、イベント種類がシグナルである場合に「SIGj」を示す。ここでi、jは、イベント種類毎の発生順を表す整数である。
図6は、外部通信ログフォーマットで表されたログ内容を示す。
前述の外部通信ログテーブルのログ内容48AAの各エントリは、予め設定された外部通信フォーマットで表され、計算機識別子と、ロジックカウンタと、入出力識別子と、通信相手計算機識別子とを含む。計算機識別子は、対応するエントリに示された動作を実行する計算機を識別する。ロジックカウンタは、当該エントリが発生した計算機識別子と計算機Aと計算機Bと計算機Cのそれぞれにより管理される。入出力識別子は、当該エントリが入力か出力かを識別する。通信相手計算機識別子は、当該エントリの通信相手計算機を識別する。
この例では、計算機識別子は、計算機Aであれば「a」、計算機Bは「b」、計算機Cは「c」を示す。ロジカルカウントは、外部通信が発生するたびに1つ加算され、通信発生の順序を保証する。入出力識別子には、通信パケットの入力(受信)であれば「E」、通信パケットの出力(送信)であれば「P」が格納される。通信相手計算機識別子には、通信パケットの送信元または送信先の計算機識別子が格納される。通信パケットが後述の再現同期チェックメッセージであれば、通信相手計算機識別子には「x」が格納される。これらの情報によって、通信の因果性確認が可能である。
図7は、状態再現同期制御テーブル49を示す。
状態再現同期制御テーブル49は、計算機Aと計算機Bと計算機Cの間でのシステム状態の再現の同期のために必要な情報を格納する。状態再現同期制御テーブル49は、再現時刻TRと、復元Snapshot識別子と、リストレコード数と、同期リストとを含む。
再現時刻TRは、最後の実行時刻から戻り時間RTNを減じた時刻である。復元Snapshot識別子は、Snapshot制御部44により作成されたSnapshotの中で再現時刻の直前のSnapshotである復元Snapshotの識別子である。リストレコード数は、計算機A、B、Cで発生した外部通信のログの数が格納される。
同期リストは、復元Snapshotの作成時刻から再現時刻までの期間に、計算機A、B、Cで発生した外部通信ログのエントリを含む。各エントリは、タイムスタンプと、ログ内容と、再現状態とを含む。計算機A、B、Cの夫々がSnapshotからアプリ61の状態の再現処理を行う際、同期リストのログに現れる通信の再現をするたびに全計算機の再現処理の歩調を合わせる処理を行う。それによって、全計算機の再現処理の同期が可能となる。再現状態は、状態再現制御部45によって設定される。再現状態は、対応するログが再現済みのログの場合に「1」を示し、それ以外の場合に「0」を示す。詳細処理は後述する。
以下、各計算機10のAP管理ミドル51の動作について説明する。
図8は、通信管理処理を示す。
各計算機10の通信管理部42は、通信管理処理を行う。
ステップ101:通信管理部42は、ユーザ入力から、戻り時間RTNと許容時間Tsの初期設定値を取得する。通信管理部42は更に、外部通信における送受信の順序性保証に利用するロジカルカウンタを0に設定する。
ステップ102:通信管理部42は、Snapshot制御テーブル46へ初期設定値を設定する。
ステップ103:通信管理部42は、Snapshot制御テーブル46の動作モードへログモード「L」を設定する。
ステップ104:計算機Aにおいて、アプリ61は、制御周期で動作し、AP管理ミドル51によって制御される。計算機Bにおいて、アプリ61は、別の制御周期で動作し、AP管理ミドル51によって制御される。Snapshot作成の同期とシステム再現の同期をするCoordinatorは、制御周期を持つアプリ61を実行する計算機の中から選定される。そのために、通信管理部42は、AP管理ミドル51で管理されているアプリ61の制御周期を、互いに送信しあって、計算機Aの制御周期と計算機Bの制御周期との共通制御周期LCMを算出する。例えば、通信管理部42は、計算機Aの制御周期と計算機Bの制御周期との最小公倍数を、共通制御周期LCMとして算出する。
ステップ105:計算機Aの制御周期と計算機Bの制御周期との中の最小の制御周期を持つ計算機がCoordinatorとなる。例えば、計算機Aの制御周期が1秒であり、計算機Bの制御周期が3秒である場合、計算機AがCoordinatorとなり、計算機Bと制御周期アプリを持たない計算機Cが非Coordinatorとなる。通信管理部42は、Snapshot制御テーブル46のCoordinator情報へ、ローカルの計算機がCoordinatorである場合に「1」を、それ以外である場合に「0」を格納する。
ステップ106:通信管理部42は、後述の同期メッセージ受信処理のためのプロセス(同期メッセージ受信処理用プロセス)を生成する。
ステップ107:通信管理部42は、後述のSnapshot同期処理(Coordinator)又は後述のSnapshot同期受信処理(非Coordinator)のためのプロセス(Snapshot同期処理用プロセス)を生成する。
ステップ108:通信管理部42は、後述の再現同期開始処理(Coordinator)又は後述の再現同期開始受信処理(非Coordinator)のためのプロセス(再現同期開始処理用プロセス)を生成し、このフローを終了する。
以上の通信管理処理によれば、各計算機10は、再現に必要な、定期的なSnapshotの作成と、ログの記録とを開始することができる。また、複数の計算機は、その中の一つの計算機を同期の基準となるCoordinatorに設定することができる。Coordinatorは、共通制御周期毎に、制御処理の終了時を再現同期ポイントとすることで、複数の制御アプリのアイドル状態で再現を同期させることができる。Coordinatorは、Snapshot周期毎に、制御処理の終了時にSnapshotを作成することで、複数の制御アプリに影響を与えることなく、Snapshotを作成することができる。
図9は、同期メッセージ受信処理の動作を示す。
各計算機10の通信管理部42は、前述の通信管理処理のステップ106で生成されたプロセスを用いて、同期メッセージ受信処理を行う。
ステップ201:通信管理部42は、他計算機または自計算機からのメッセージを受信したか判定する。メッセージを受信した(Y)場合、通信管理部42は、次のステップを処理する。そうでない(N)場合、通信管理部42は、ステップ201へ戻る。
ステップ202:通信管理部42は、受信したメッセージがSnapshot同期メッセージであるかを判定する。
ステップ203:通信管理部42は、受信したメッセージがSnapshot同期メッセージであれば(Y)、後述のSnapshot同期処理を行い、ステップ201へ戻る。
ステップ211:通信管理部42は、受信したメッセージが再現開始メッセージか判定する。
ステップ221:通信管理部42は、受信したメッセージが再現開始メッセージであれば(Y)、後述の再現同期受信処理を行い、ステップ201へ戻る。
ステップ231:通信管理部42は、受信したメッセージが再現開始メッセージでなければ(N)、後述の外部通信ログ処理を行い、ステップ201へ戻る。
以上の同期メッセージ受信処理によれば、計算機は、受信したメッセージに応じて、Snap作成の同期、再現の開始、外部通信ログの作成の何れかを行うことができる。
図10は、Snapshot同期処理を示す。
Coordinatorの通信管理部42は、前述の通信管理処理のステップ107で生成されたプロセスを用いて、Snapshot同期処理を行う。Snapshot同期処理は、前述のステップ105で決定したCoordinatorとなった計算機Aにより行われる。非Coordinatorである計算機B及びCは、本処理は行わず、後述のSnapshot同期受信処理を行う。
ステップ301:通信管理部42は、AP管理ミドル51からのAPログテーブル48Bの開始終了情報を参照することで、アプリ61の制御処理終了を待つ。アプリ61の制御処理終了時点は、アプリ61の状態が実行状態でなく、Snapshotの実行に必要な計算機資源の状態を決定できるため、システム全体のSnapshot同期ポイントとして適切である。
ステップ302:通信管理部42は、前述のステップ104で算出した共通周期LCMが経過したか判定する。経過していなければ(N)、通信管理部42は、ステップ301に戻り次の制御処理終了を待つ。
ステップ303:共通周期LCMが経過した場合(Y)、通信管理部42は、計算機B及びCに対して再現同期チェックメッセージを送信する。再現同期チェックメッセージの送信の時点で、制御アプリは、アイドル状態であり、状態が確定している。この時点を、再現同期ポイントと呼ぶ。計算機B及びCは、計算機Aにより本メッセージの送信の再現に従って、再現の歩調を合わせる。
ステップ304:ステップ303の再現同期チェックメッセージは、計算機をまたがる外部通信であるため、通信管理部42は、外部通信を記録する外部通信ログ処理を行う。外部通信ログ処理については後述する。
ステップ305:通信管理部42は、Snapshot制御テーブル46の許容時間TsをSnapshot周期とし、前回のSnapshotの実行からSnapshot周期が経過したか否かを判定する。なお、通信管理部42は、許容時間から予め設定されたマージンを減ずることで、Snapshot周期を算出してもよい。経過していなければ(N)、通信管理部42は、ステップ301に戻り次の制御周期の終了を待つ。
ステップ306:Snapshot周期が経過した場合(Y)、通信管理部42は、計算機BとCにSnapshotの作成を要求するためのSnapshot同期メッセージを送信し、計算機BとCからの合意メッセージであるACKを待つ。
ステップ307:通信管理部42は、自計算機のSnapshotの作成を要求するためのSnapshot作成要求をSnapshot制御部44へ送信し、ステップ301に戻り、次の制御処理終了を待つ。
以上のSnapshot同期処理によれば、Coordinatorは、共通周期毎の制御処理の終了時を、再現同期ポイントとして各計算機10の外部通信ログに記録することができる。これにより、各計算機は、再現時に、再現同期ポイントを参照して同期することができる。更に、Coordinatorは、制御処理の終了後に、Snapshot周期で各計算機10にSnapshotを作成させることができる。
図11は、Snapshot同期受信処理を示す。
非Coordinatorの通信管理部42は、前述の通信管理処理のステップ107で生成されたプロセスを用いて、Coordinatorから送信されたSnapshot同期メッセージの受信に応じて、Snapshot同期受信処理を行う。
ステップ401:通信管理部42は、実行制御部の処理終了を待つ。ここで通信管理部42は、APログテーブル48Bの開始終了情報を参照することで処理終了を判断する。各計算機10は、アプリ61の終了状態において同期的にSnapshotを作成する。アプリ61の終了状態は、アプリ61の実行時に使用される計算機資源の状態が安定している状態である。例えば、アプリ61の終了状態は、通信ソケットにメッセージを書き終えた状態や、アプリ間制御メッセージをメッセージキューで送信し終えた状態や、アプリ61の処理で使用した計算機資源を解放した状態である。
ステップ402:通信管理部42は、受信したSnapshot同期メッセージに対し、Snapshot作成同期の合意を表すACKをCoordinatorへ送信する。
ステップ403:通信管理部42は、自計算機のSnapshotを作成するためのSnapshot作成要求をSnapshot制御部44へ送信し、このフローを終了する。
以上のSnapshot同期受信処理によれば、非Coordinatorは、CoordinatorからのSnapshot同期メッセージに応じて、Snapshotを作成することで、Coordinatorに同期してSnapshotを作成することができる。
図12は、Snapshot作成処理を示す。
各計算機10のSnapshot制御部44は、前述のSnapshot同期処理のステップ307またはSnapshot同期受信処理のステップ403で送信されたSnapshot作成要求に応じて、Snapshotを作成するSnapshot作成処理を行う。
ステップ501:Snapshot制御部44は、Snapshot作成要求の受信を待つ。
ステップ502:Snapshot制御部44は、Snapshot作成要求を受信すると、実行部の状態をコピーする。例えば、Snapshot制御部44は、OS31のforkシステムコールを使用して、実行部の状態をコピーする。本実施例は、実行部の状態のコピー手法について限定しない。本実施例は、forkによるコピーを行う場合について、以降のステップを述べる。
ステップ503:forkによって、実行部のプロセスのコピーがOS31によって生成される。forkによって生成されたプロセス(コピープロセス)は、もとの実行部のプロセスの識別子と異なる識別子を持ち、OS31からの別のプロセスとして扱われる。本ステップで、Snapshot制御部44は、コピープロセスを別のCPUコア(管理用コア)へ移動させる。
ステップ504:Snapshot制御部44は、ステップ503で移動したコピープロセスを停止する。
ステップ505:Snapshot制御部44は、前回のSnapshot作成処理で作成されて停止しているコピープロセスが存在するか判定する。なければ(N)、Snapshot制御部44は、ステップ501に戻る。
ステップ506:Snapshot制御部44は、存在すると判定されたコピープロセスをファイルに書き出し、ファイル名として「Snapshot_Ts+n」を与える。Tsは、Snapshot周期である。nは、Snapshot作成処理実施回数を表す整数である。
ステップ507:Snapshot制御部44は、最初のSnapshotファイルである「Snapshot0」があるか判定する。
ステップ508:「Snapshot0」があれば(Y)、Snapshot制御部44は、「Snapshot0」と「Snapshot_Ts+n」の差分である「ΔTs+n」を作成する。Snapshot制御部44は、差分と共に、そのSnapshotの識別子、Snapshotの作成時刻を格納する。
ステップ509:Snapshot制御部44は、ステップ506で作成した「Snapshot_Ts+n」を削除し、ステップ501へ戻る。
ステップ511:「Snapshot0」がなければ(N)、Snapshot制御部44は、ステップ506で作成した「Snapshot_Ts+n」を「Snapshot0」としてコピーし、ステップ509に進む。
以上のSnapshot作成処理によれば、各計算機10は、実行部のプロセスのコピーをSnapshotとして作成することができる。また、各計算機10は、最初のSnapshotと最新のSnapshotの差分ΔTs+nを作成することにより、Snapshotに必要な容量を抑えることができる。
図13は、外部通信ログ処理を示す。
通信管理部42は、前述の同期メッセージ受信処理のステップ231、前述のSnapshot同期処理のステップ304、または後述のAPログ制御処理のステップ705において、外部通信ログ処理を行う。外部通信ログは、システム状態再現において同期ポイントとして使用される。
ステップ601:通信管理部42は、タイムスタンプを取得する。
ステップ602:通信管理部42は、前述のステップ101で初期化されたロジカルカウントに1を加算する。
ステップ603:通信管理部42は、外部通信の通信パケットから、その外部通信の送信元又は送信先を示す通信相手計算機情報を取得する。
ステップ604:通信管理部42は、各ステップで取得した情報をもとに、外部通信ログフォーマットにしたがって外部通信ログを作成する。
ステップ605:通信管理部42は、外部通信ログテーブル48Aへ外部通信ログを格納する。
ステップ606:通信管理部42は、当該通信パケットが、Snapshot同期処理のステップ303で送信された再現同期チェックメッセージであるかを判定する。
ステップ607:当該通信パケットが再現同期チェックメッセージであれば(Y)、通信管理部42は、外部通信ログの通信相手計算機識別子に対して「x」を設定し、当該通信パケットの保存を行わず、外部通信ログテーブル48Aの通信内容保存先に対してNULLを設定する。
ステップ608:通信管理部42は、ログ管理テーブル47Aにエントリを作成し、そのエントリのログ内容に、ステップ605で格納した外部通信ログを格納し、そのエントリの照合状態に対して「0」を設定し、このフローを終了する。
ステップ611:再現同期チェックメッセージでなければ(N)、通信管理部42は、通信パケットの保存を行い、その保存先を外部通信ログテーブル48Aの通信内容保存先に設定する。
以上の外部通信ログ処理によれば、各計算機10は、外部通信の度に外部通信ログを記録することができる。これにより、各計算機は、再現時に外部通信ログに基づいて同期することができる。
図14は、APログ制御処理を示す。
各計算機10のAPログ制御部43は、APログ制御処理を行う。
ステップ701:APログ制御部43は、実行制御部からの、実行部の動作を表すログを待つ。
ステップ702:APログ制御部43は、Snapshot制御テーブル46の動作モードを読み取る。
ステップ703:APログ制御部43は、動作モードがログモード「L」であるか判定する。
ステップ704:動作モードがログモード「L」であれば(Y)、APログ制御部43は、受信したログが、実行制御部から実行部へ受け渡す外部通信ログであるか判定する。
ステップ705:受信したログが外部通信ログであれば(Y)、APログ制御部43は、前述の外部通信ログ処理を行い、ステップ701へ戻る。
ステップ711:受信したログが外部通信ログでなければ(N)、APログ制御部43は、受信したログが、実行部の実行結果を示すAPログであるか判定する。
ステップ712:受信したログがAPログであれば(Y)、APログ制御部43は、APログをAPログテーブル48Bへ格納し、ログ管理テーブル47Aにエントリを作成し、そのエントリのログ内容に当該APログを格納し、そのエントリの照合状態を「0」に設定し、ステップ701へ戻る。
ステップ721:受信したログがAPログでなければ(N)、APログ制御部43は、受信したログがイベントログであると判定し、そのイベントログをイベントログテーブル48Cへ格納し、ログ管理テーブル47Aにエントリを作成し、そのエントリのログ内容に当該イベントログを格納し、そのエントリの照合状態を「0」に設定し、ステップ701へ戻る。
ステップ731:動作モードがログモード「L」でなければ(N)、即ち、動作モードが状態再現モードであれば、APログ制御部43は、後述の再現照合処理を行う。
以上のAPログ制御処理によれば、各計算機10は、実行制御部により作成されたログを分類して格納することができる。
図15は、再現同期開始処理を示す。
Coordinatorの通信管理部42は、前述の通信管理処理のステップ108で生成されたプロセスを用いて、再現同期開始処理を行う。
ステップ801:通信管理部42は、ユーザからの再現要求を待つ。ユーザからの再現要求はコマンドでも設定ファイルも形でもよい。再現要求は、ユーザから入力される情報として、再現時刻までの戻り時間RTNを含む。再現要求は、戻り時間RTNの代わりに、再現時刻を含んでもよい。
ステップ802:再現要求から再現時刻までの戻り時間RTNを読取り、戻り時間RTNと現在時刻に基づいて、状態再現同期制御テーブル49の再現時刻を設定する。
ステップ803:通信管理部42は、Snapshot作成処理で作成されたSnapshotの中から、再現時刻直前のSnapshotの識別子を選択し、選択された識別子を状態再現同期制御テーブル49の復元Snapshot識別子に設定する。通信監理部42は、復元Snapshotを示す情報を、表示装置に表示させてもよい。
ステップ804:通信管理部42は、復元Snapshotの作成時刻から再現時刻までの外部通信ログを、外部通信ログテーブル48Aから読取り、読み取られた外部通信ログを状態再現同期制御テーブル49の同期リストに設定し、同期リストのエントリ数をリストレコード数へ設定する。
ステップ805:通信管理部42は、再現開始メッセージを計算機B及びCへ送信する。
ステップ806:通信管理部42は、再現開始合意を示すACKの受信を待つ。
ステップ807:通信管理部42は、ACKとともに計算機B及びCから送られた状態再現同期制御テーブル49の同期リストをマージし、各ログ内容のロジカルカウンタと入出力識別子と通信相手計算機識別子から外部通信発生の因果性を判定し、因果性に基づいて、マージされた同期リストを発生順に並べる。例えば、通信管理部42は、状態再現同期制御テーブル49において、計算機Aが計算機B及びCに対して再現同期チェックメッセージを送信したログ「a1P(x)」が最初のログである。その時、計算機Aのロジカルカウントは1となる。計算機BとCは、計算機Aからの再現同期チェックメッセージの受信を示すログとして、「b1E(x)」と「c1E(x)」を外部通信ログテーブル48Aに格納する。次に、計算機Cは計算機Bに対してデータを送信し、計算機Bはそのデータを受信し、処理を行った上で、計算機Aへ制御データを送信したことが、ログから読み取れる。計算機Cの外部通信は計算機Bへのデータ送信が最後なので、計算機Cのロジカルカウンタは2である。計算機Bは計算機Cからの受信と計算機Aへの送信を行ったので、計算機Bのロジカルカウンタは3となる。計算機Aは計算機Bからの制御データの受信を行ったので、計算機Aのロジカルカウンタは2となる。
ステップ808:通信管理部42は、ステップ807でマージされ並べ替えられた同期リストを状態再現同期制御テーブル49に再設定し、その同期リストと、同期リストの合意の要求とを示す、同期リスト合意要求メッセージとを、計算機BとCへ送信する。
ステップ809:通信管理部42は、計算機BとCからの同期リストの合意を示すACK受信を待つ。
ステップ810:通信管理部42は、状態再現制御部45へ状態再現制御要求を送信し、ステップ801へ戻る。
以上の再現同期開始処理によれば、Coordinatorは、再現開始メッセージを非Coordinatorへ送信することで、全ての計算機の、復元Snapshotから再現時刻までの外部通信ログを取得し、外部通信ログの内容を実行順に並べ替え、並べ替えた内容を同期リストとして非Coordinatorへ送信することができる。これにより、各計算機は、同じ同期リストに基づいて、再現を同期することができる。
図16は、再現同期開始受信処理を示す。
非Coordinatorの通信管理部42は、前述の通信管理処理のステップ108で生成されたプロセスを用いて、再現開始メッセージの受信に応じて、再現同期開始受信処理を行う。
ステップ901:通信管理部42は、受信した状態再現同期制御テーブル49から、再現時刻及び復元Snapshot識別子を読み取る。
ステップ902:通信管理部42は、復元Snapshotの作成時刻から再現時刻までの外部通信ログを、外部通信ログテーブル48Aから読取り、状態再現同期制御テーブル49の同期リストとして設定し、その同期リストのエントリ数をリストレコード数に設定する。
ステップ903:通信管理部42は、状態再現同期制御テーブル49の同期リストと再現開始メッセージに対する合意とを示すACKを、Coordinatorである計算機Aへ送信する。
ステップ904:通信管理部42は、計算機Aからの同期リスト合意要求メッセージを待つ。
ステップ905:通信管理部42は、受信された同期リスト合意要求メッセージに含まれている同期リストを、状態再現同期制御テーブル49に再設定する。
ステップ906:通信管理部42は、計算機Aへ同期リストの合意を示すACKを送信する。
ステップ907:通信管理部42は、状態再現制御部45へ状態再現制御要求を送信し、このフローを終了する。
以上の再現同期開始受信処理によれば、非Coordinatorは、再現に必要な外部通信ログをCoordinatorへ送信することができる。
図17は、状態再現制御処理を示す。
各計算機10の状態再現制御部45は、状態再現制御処理を行う。
ステップ1001:状態再現制御部45は、前述の再現同期開始処理のS810または前述の再現同期開始受信処理のS907で発行される、状態再現制御要求を待つ。
ステップ1002:状態再現制御部45は、状態再現同期制御テーブル49から再現時刻と復元Snapshot識別子を読み取る。
ステップ1003:状態再現制御部45は、復元Snapshotの差分ΔTs+nをSnapshot0に適用することで復元Snapshotを作成し、復元Snapshotをメモリにロードすることで、実行部を復元する。
ステップ1004:状態再現制御部45は、外部通信ログテーブル48AとAPログテーブル48Bとイベントログテーブル48Cとを基に、実行部の実行に必要な計算機資源の再構築を、実行制御部に要求する。これに応じて、実行制御部は、計算機資源を再構築する。本実施例では、実行制御部は、システム状態の再現のために必要な計算機資源構築機能を含む。例えば、計算機資源構築機能は、criuの機能を含み、アプリ61と仮想計算機81で使用されている通信ソケットやアプリ間順序制御用のIPCの資源及びタイマーイベント、シグナルなどが再構築可能である。
ステップ1005:状態再現制御部45は、後述の状態再現同期受信処理のためのプロセスを作成する。状態再現同期受信処理は、各計算機10がシステム状態の再現の同期に必要な外部通信ログの再現のために、他計算機に対して再現同期要求メッセージを送信する。その詳細は、後述する。
ステップ1006:状態再現制御部45は、Snapshot制御テーブル46の動作モードに状態再現モード「R」を設定する。
ステップ1007:状態再現制御部45は、実行部の処理を開始する。ステップ1003で復元されメモリにロードされたSnapshotは、OS31からみて処理停止中の一つのプロセスに見える。処理停止中のプロセスの開始処理は、例えば、cgroupsの機能を用いることができる。本実施例は、処理停止中のプロセスの開始方法について限定することはない。
ステップ1008:状態再現制御部45は、状態再現同期処理を行う。その詳細は後述する。
その後、状態再現制御部45は、ステップ1001に戻る。
以上の状態再現制御処理によれば、各計算機10は、再現時刻の直前の復元Snapshotを用いて実行部の状態を再現し、実行制御部の処理を開始することで、実行部の処理を開始することができる。
図18は、再現照合処理を示す。
各計算機10のAPログ制御部43は、前述のAPログ制御処理のステップ731において、再現照合処理を行う。即ち、状態再現モードにおいて、APログ制御部43が実行制御部からログを受信した場合、APログ制御部43は、再現照合処理を行う。
ステップ1101:状態再現制御処理のステップ1007で処理を開始した実行部が、実行制御部により提供される機能を実行すると、APログ制御部43は、実行により作成されるログを、実行制御部から受信する。APログ制御部43は、受信されたログに対応する、ログ管理テーブル47A内のログを選択する。
ステップ1102:APログ制御部43は、ログ管理テーブル47Aの中で、ステップ1101で選択されたログの直前のログの照合状態が「OK」であるかを判定する。照合状態が「OK」であれば、APログ制御部43は、システム状態が正常に再現されていると判断する。照合状態が「0」のままの場合、APログ制御部43は、再現順序がログと異なっているため、再現処理エラーと判断し、エラー処理を行う。エラー処理は、すべての計算機に対して再現中止メッセージを送信する。エラー処理は更に、再現のリトライやユーザへの通知等を行う。本実施例では、AP管理ミドル51がOS31のイベントを格納して処理することから、再現の順序が入れ替わる可能性がある。そのため、各計算機10は、システム状態が正常に再現されているか否かを判定する。
ステップ1103:ステップ1101で選択されたログの直前のログが外部通信ログ(COMM)であれば、APログ制御部43は、状態再現制御部45へ再現継続要求を送信する。再現継続要求は、選択されたログの内容を含む。ここで、直前のログが外部通信ログであり正常に処理されているので、状態再現制御部45は、後述の状態再現同期処理において、再現を進めることを示す再現継続要求メッセージを他計算機へ送信する。
ステップ1104:APログ制御部43は、ステップ1101で参照したログの直後のログが外部通信ログであるか判定する。直後のログが外部通信ログである場合、APログ制御部43は、再現処理の同期ポイントであるため、次のステップ1105で、その外部通信ログの再現の直前に全計算機の状態再現の歩調をあわせる処理を行う。直後のログが外部通信ログでない場合、APログ制御部43は、ステップ1109へ進む。
ステップ1105:APログ制御部43は、状態再現同期制御テーブル49の同期リストにおいて、当該外部通信ログを検索し、その直前のログの再現状態を判定する。APログ制御部43は、その再現状態が「1」になるまで処理を待つ。APログ制御部43は、全計算機の同期リストに従って外部通信ログの順序性を確保しながら再現する必要があり、直前のログの再現状況を判定することで、当該外部通信ログの再現を待つ。
ステップ1106:APログ制御部43は、ステップ1101で判定したログの直後のログが、外部通信ログでありかつ再現同期チェックメッセージを示すか判定する。
ステップ1107:APログ制御部43は、Snapshot制御テーブル46のCoordinator情報を読取り、自計算機がCoordinatorであるか判定する。前述のSnapshot同期処理において再現同期チェックメッセージの送信元はCoordinatorであるため、Coordinatorが再現同期チェックメッセージの送信を再現する。Coordinatorが計算機AまたはBである場合、AP管理ミドル51が再現同期チェックメッセージの送信を再現する。再現同期チェックメッセージは、外部通信ログに含まれており、共通周期毎の制御処理の終了時を示す再現同期ポイントを示す。Coordinatorが計算機Cである場合、システム状態再現部41が再現同期チェックメッセージの送信を再現する。自計算機が非Coordinatorである場合、APログ制御部43は、ステップ1109へ進む。
ステップ1108:APログ制御部43は、状態再現制御部45へ再現同期要求を送信する。再現同期要求は、選択されたログの内容を含む。
ステップ1109:APログ制御部43は、ログ管理テーブル47Aにおいて、ステップ1101で選択されたログの照合状態へ「OK」を設定する。これは、実行制御部から送られてきたログがログ管理テーブル47Aに存在し、その再現順序も正しいと判定されるためである。その後、APログ制御部43は、このフローを終了し、APログ制御処理へ戻る。
以上の再現照合処理によれば、各計算機10は、状態再現モードにおいて、APログ制御部43が再現により発生したログを実行制御部から受信した場合、ログ情報のうち受信されたログに対応するログを選択し、選択されたログの直前のログが照合済の外部通信ログであれば、選択されたログを再現済にするための再現継続要求メッセージを他計算機へ送信することができる。更に、各計算機は、選択されたログの直後のログが外部通信ログであれば、選択されたログの直前のログの再現を待って、選択されたログの再現を同期するための再現同期要求メッセージを他計算機へ送信することができる。
図19は、状態再現同期処理を示す。
各計算機10の状態再現制御部45は、前述の状態再現制御処理のステップ1008において状態再現同期処理を行う。
ステップ1201:状態再現制御部45は、要求を待つ。
ステップ1202:状態再現制御部45は、受信された要求が、前述の再現照合処理のステップ1108で送信される再現同期要求であるか判定する。
ステップ1203:要求が再現同期要求であれば(Y)、状態再現制御部45は、実行制御部の処理を停止する。実行制御部の処理停止方法は、システム状態再現部41との間にインタフェースを設けることで、実施する。インタフェースは、例えば、Unix Domain ソケットなどで容易に実装可能である。
ステップ1204:状態再現制御部45は、他計算機に対して再現同期要求メッセージを送信する。
ステップ1205:状態再現制御部45は、他計算機から、再現同期要求メッセージに対する合意を示すACKの受信を待つ。
ステップ1206:状態再現制御部45は、再現同期要求に含まれているログを状態再現同期制御テーブル49から探し、そのログの再現状態を「1」に設定する。
ステップ1207:状態再現制御部45は、AP管理ミドル51または仮想化基盤71の処理を開始し、アプリ61と仮想計算機81の実行を継続し、再現時刻までの再現を継続する。その後、状態再現制御部45は、ステップ1201へ戻る。
ステップ1211:要求が再現同期要求でなければ(N)、状態再現制御部45は、再現継続要求メッセージを他計算機へ送信する。その後、状態再現制御部45は、ステップ1201へ戻る。
以上の状態再現同期処理によれば、各計算機10は、再現同期要求に応じて、実行制御部の処理を停止させ、再現同期要求メッセージを他計算機へ送信し、実行制御部の処理を再開させることができる。これにより、各計算機10は、他計算機の再現を待って、他計算機と同期することができる。また、各計算機10は、再現継続要求に応じて再現継続要求メッセージを他計算機へ送信することができる。
図20は、状態再現同期受信処理を示す。
状態再現制御部45は、前述の状態再現制御処理のステップ1005で生成されたプロセスを用いて、状態再現同期受信処理を行う。
ステップ1301:状態再現制御部45は、他計算機からの要求メッセージを待つ。要求メッセージは、再現同期要求メッセージと再現継続要求メッセージの何れかである。
ステップ1302:状態再現制御部45は、受信された要求メッセージが再現同期要求メッセージであるか判定する。
ステップ1303:要求メッセージが再現同期要求メッセージであれば(Y)、状態再現制御部45は、再現同期要求メッセージから要求元の計算機識別子を取得し、外部通信ログテーブル48Aにおいて、要求元の計算機識別子を持つログを探す。
ステップ1304:要求元の計算機識別子を持つログが存在し、かつログ管理テーブル47Aにおいて、その直前のログの照合状態が「0」であるかを判定する。
ステップ1305:直前のログの照合状態が「0」であれば(Y)、状態再現制御部45は、直前のログの照合状態が「OK」になるまで待つことで、再現順序を守る。
ステップ1306:状態再現制御部45は、実行制御部の処理を停止することで、再現の歩調を他計算機に合わせる。
ステップ1307:状態再現制御部45は、状態再現同期制御テーブル49において、再現同期要求メッセージに含まれているログを探し、そのログの再現状態を「1」に設定する。
ステップ1308:状態再現制御部45は、再現同期要求メッセージに対する合意を示すACKを、再現同期要求メッセージの送信元へ送信する。
ステップ1309:状態再現制御部45は、実行制御部の処理を再開する。その後、状態再現制御部45は、ステップ1301へ戻る。
ステップ1311:要求メッセージが再現同期要求メッセージでなければ(N)、状態再現制御部45は、要求メッセージが再現継続要求メッセージであるか判定する。全計算機は、再現継続要求メッセージを用いて、再現の正しさを確認し合いながら、再現していくことで、再現の健全性を確保する。
ステップ1312:要求メッセージが再現継続要求メッセージであれば(Y)、状態再現制御部45は、状態再現同期制御テーブル49において、再現継続要求メッセージに含まれているログを探し、そのログの再現状態を「1」に設定する。その後、状態再現制御部45は、ステップ1301へ戻る。
ステップ1313:要求メッセージが再現継続要求メッセージでなければ(N)、状態再現制御部45は、再現処理エラーと判断し、エラー処理を行う。
以上の状態再現同期受信処理によれば、各計算機10は、他計算機からの再現同期要求メッセージに応じて、要求されたログ以前の照合を待って、ACKを返すことができる。また、各計算機10は、他計算機からの再現継続要求メッセージに応じて、要求されたログ以前の照合を待って、ACKを返すことができる。
計算機システムは、再現時刻の直前のSnapshotとログを用いることで、複数の計算機の状態を迅速に再現することができる。許容時間に基づいてSnapshot周期を決定することで、復元Snapshotによる実行部の復元から、再現時刻までの、再現に要する時間を許容時間以下に抑えることができる。Snapshot同期処理と、Snapshot同期受信処理と、Snapshot作成処理とによれば、計算機システムの性能の低下を防ぐことができるとともに、複数の計算機のSnapshotの作成を同期させることができる。再現同期開始処理と、再現同期開始受信処理と、状態再現制御処理と、再現照合処理と、状態再現同期処理と、状態再現同期受信処理とによれば、複数の計算機の間の通信のログを用いて、複数の計算機の再現の歩調を合わせると共に、通信の発生順序を保証することができる。
計算処理は、アプリ61及び仮想計算機81の処理等に対応する。第1計算機は、Coordinatorの計算機等に対応する。第1計算処理は、制御アプリの処理等に対応する。作成同期処理は、Snapshot同期処理等に対応する。作成処理は、Snapshot作成処理等に対応する。記録処理は、外部通信ログ処理、APログ制御処理等に対応する。再現開始処理は、再現同期開始処理等に対応する。特定時刻は、再現時刻等に対応する。再現処理は、状態再現制御処理、再現照合処理、状態再現同期処理、状態再現同期受信処理等に対応する。作成条件は、ステップ301、302、305等の条件に対応する。制御計算機は、制御アプリを実行する計算機等に対応する。選択条件は、ステップ105の条件等に対応する。作成情報は、Snapshot同期メッセージ等に対応する。復元スナップショット情報は、再現開始メッセージ、復元Snapshot識別子等に対応する。順序情報は、同期リスト、同期リスト合意要求メッセージ等に対応する。再現同期情報は、再現同期要求メッセージ、再現継続要求メッセージ等に対応する。同期情報は、再現同期チェックメッセージ等に対応する。ミドルウェアは、システム状態再現部41等に対応する。管理プログラムは、AP管理ミドル51、仮想化基盤71等に対応する。
以上、本発明の実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲を上記構成に限定する趣旨ではない。本発明は、他の種々の形態でも実施する事が可能である。