JP5519909B2 - アプリケーション・プロセスにおいて内部イベントをリプレイするための非侵入的方法およびこの方法を実装するシステム - Google Patents

アプリケーション・プロセスにおいて内部イベントをリプレイするための非侵入的方法およびこの方法を実装するシステム Download PDF

Info

Publication number
JP5519909B2
JP5519909B2 JP2007551678A JP2007551678A JP5519909B2 JP 5519909 B2 JP5519909 B2 JP 5519909B2 JP 2007551678 A JP2007551678 A JP 2007551678A JP 2007551678 A JP2007551678 A JP 2007551678A JP 5519909 B2 JP5519909 B2 JP 5519909B2
Authority
JP
Japan
Prior art keywords
replay
application
logged
called
logging
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2007551678A
Other languages
English (en)
Other versions
JP2008529113A (ja
Inventor
ヴェルテス、マーク
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2008529113A publication Critical patent/JP2008529113A/ja
Application granted granted Critical
Publication of JP5519909B2 publication Critical patent/JP5519909B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • G06F11/3476Data logging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1438Restarting or rejuvenating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1471Saving, restoring, recovering or retrying involving logging of persistent data for recovery
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/86Event-based monitoring

Description

本発明は、ソフトウェア・アプリケーションに属するプロセス内で、ログ・ファイルからイベントをリプレイするための方法に関する。この方法は、特に、マルチコンピュータ環境で実行されるアプリケーションに属するプロセス内の内部イベントを対象とする。
本発明の分野は、協働するいくつかのコンピュータによって形成されるコンピュータのネットワークまたはクラスタの分野である。これらのクラスタは、1つまたは複数のサービスをユーザに提供するソフトウェア・アプリケーションを実行するために使用される。こうしたアプリケーションは、単一または複数のプロセスとすることが可能であり、単一のコンピュータ上で実行されるか、あるいは、たとえば、MPI(「Message Passing Interface(メッセージ受け渡しインターフェース)」)タイプまたは「Shared Memory(共有メモリ)」タイプの分散アプリケーションなどのように、いくつかのコンピュータにわたって分散されることが可能である。
特に本発明は、ミドルウェア・タイプのアプリケーションに統合することが可能な、たとえば中間アプリケーションと呼ばれる他のソフトウェア・アプリケーションによって、クラスタ内の、マスタまたは1次と呼ばれるようなアプリケーションの機能を管理することができる。この機能管理は、とりわけ、1次ノード内での、または2次と呼ばれる他のノードと連携した、このアプリケーションのすべてまたは一部の、複製、再配布、確実化、あるいは追跡またはデバッグのオペレーションを含むことができる。
アプリケーションの機能を、たとえばその動作を強制またはリダイレクトすることによって管理するために、あるイベントの発生をシミュレートすることになるデータの注入によって、その環境の特定の開発をシミュレートすることが知られている。こうした実施は、ある状況に対するこのアプリケーションの反応を、たとえばそのデバッグに関してテストする際に有用な場合がある。第1のアプリケーション内で以前に発生したイベントを格納する1つまたは複数のロギング・ファイルがある場合、新しいアプリケーションにこれらと同じイベントを含められることが有用な場合がある。こうしたリプレイは、たとえば、この新しいアプリケーションが以前のものに代わってどのように機能するかを発見するために、その動作をテストするのに役立つ可能性がある。この新しいアプリケーションが、これらの被ロギング・イベントの発生後に開始または活動化したものである場合、こうしたリプレイによってこの新しいアプリケーションを、これらの同じイベントをすでに考慮に入れた状態にすることができる可能性がある。加えて、この新しいアプリケーションが、以前のアプリケーションの所与の状態に対応するリプレイ時点の状態を使用してあらかじめ復元された場合、リプレイ時点後に以前のアプリケーションにロギングされたイベントのリプレイによって、新しいアプリケーションを、これらのイベント発生後の以前のアプリケーションの状態に対応する状態に復元することができる。
アプリケーションの機能中に発生するイベントの中で、このアプリケーションの外からのデータ、すなわち、特に制御の対象でないハードウェアまたはソフトウェア要素からのデータによって、アプリケーション内で開始されたイベントを、外部イベントと呼ぶことができる。これは、たとえばキーボード上でのアクションから発生する信号、または通信ネットワークを介して着信するメッセージとすることができる。
アプリケーション内またはそのプロセスのうちの1つで、内部イベントのシミュレーションまたはリプレイを実施するために、それらを発生させるアクションまたはメッセージを実際に再作成することが知られているが、この方法は、大量のリソースを必要とし、依然として比較的単純な状況に限定されている。これらのイベントの発生後に示されることになる値を得るために、これらイベントの結果を管理および格納するためのメモリの値を修正することも知られている。しかしながらこの方法では、このアプリケーションのプログラミングにおいて複雑さが増加し、これによってコストおよびエラーのリスクが発生する。
加えて、アプリケーションが初めからこうした記録を生成するように設計されていない場合、こうした機能を後で追加することは困難かつコストがかかり、これによってかなりのエラー・リスクとなる。
いくつかの方法は、外部からアプリケーションの機能を強制できるようにプログラムを調整またはデバッグすることによっても使用される。しかしながらこれらの方法は、通常、たとえばシステム内のカーネルを修正または追加することによる、アプリケーションを実行するコンピュータ・システムにおける内部介入を必要とする。さらにこれらのシステム変更は、特定のシステム技術を必要とし、いくつかのネットワーク・コンピュータ間に、エラーおよび不安定性の源となる可能性のある異機種混合をもたらすことになる。たいていの場合、これらの欠点により、記録およびリプレイ原理の使用は、主に調整タスクまたは分離された構成に大いに限定され、実際の開発で使用される広範囲かつストレスのかかる構成には受け入れられない。
さらに、リソースがいくつかのプロセス間で非同期的に共用される場合、1つまたは複数のこれらプロセスのリプレイには、こうしたリソースの共用性に固有の、不確実性または非決定性の要素が含まれる可能性がある。
リプレイ時にプロセスがこうした共用リソースにアクセスしようとすると、このオペレーションの結果は実際に、たとえば、同様にこのリソースにアクセスしている他のプロセスの進行状態などの、予期せぬ要因による影響を受ける場合がある。加えて、2つのプロセスが同時に同じリソースにアクセスしようとした場合、この2つのプロセスを一緒にリプレイするという事実は、ロギング時またはいくつかの異なるリプレイ時に得られる結果と同一の結果を保証するとは限らない。こうした変動性は、たとえば、同時プロセス間の実行速度の差異から、あるいは、ソフトウェア・エージェントのリプレイまたは機能管理によって直接管理することのできない、実行のハードウェア条件における偶然要因または差異から、生じる可能性がある。
この状況は、たとえば、Michiel RONSSE等による出版物「Debuggingshared memory parallel programs using record/replay」Elsevier Science, Ghent 2002 (FGCS 19 (2003)679-687)において、「競合条件(racecondition)」の名前で説明される。
そこには、管理しようとするアプリケーションに応じて特定のプログラミング・タスクを構成し、プログラミングおよび処理能力の両方においてかなりの作業負荷を示す、共用変数のコンテンツの監視を維持することからなる、既知のソリューションが記載されている。この作業負荷によって、このソリューションの実施は費用のかかる柔軟性のないものとなり、その性能はしばしば開発条件の下で使用するには低すぎるものとなる。
同様の出版物において、著者は、非決定論的結果を生成するリスクのある、こうした同時アクセス状況の発生を具体的に検証するために、当該プロセス内で侵入的な(intrusive)方法を使用することからなるソリューションを提案する。こうした方法は、たとえば、リプレイされるアプリケーションの機能内に同期セマフォを追加することを含む。しかしながら、リプレイまたは管理されるアプリケーションにおけるこうした修正は、複雑で、柔軟性がなく、費用がかかるものであり、エラーのリスクを生じさせる。特に、マスタ・アプリケーションの実行中には、ロギング・オペレーションはオペレーション・ノードに対する作業負荷を示し、中間アプリケーションのアクションによる性能低下の原因となる可能性がある。
フランス特許出願第2820821号 Michiel RONSSE等による「Debuggingshared memory parallel programs using record/replay」Elsevier Science, Ghent 2002 (FGCS 19 (2003)679-687)
本発明の一目的は、アプリケーションまたはそのプロセスの1つにおいて、このアプリケーションおよびこれを実行するシステムに対してできる限り最もトランスペアレントなように、内部イベントのシミュレーションまたはリプレイを可能にする方法を提案することである。
このため、本発明は、ターゲット・プロセスによって、ロギング・データによって表される、被ロギング・オペレーションと呼ばれる少なくとも1つのオペレーションのリプレイを実施することを特徴とする、コンピュータ上でのターゲット・プロセスと呼ばれる少なくとも1つのアプリケーション・プロセスの実行のための方法を提案する。
この方法は、
・被ロギング・オペレーションに対応する被リプレイ・オペレーションと呼ばれるオペレーションを開始し、当該被リプレイ・オペレーションによって得られる結果を表す少なくとも1つのリプレイ結果データをこのターゲット・プロセスに戻す、リプレイ命令と呼ばれる少なくとも1つのプログラム命令を、このターゲット・プロセスによって実行するステップと、
・ターゲット・プロセスによってリプレイ結果データの代わりにロギング・データから抽出された強制データを考慮に入れること、および、被リプレイ・オペレーションに対して被ロギング結果と呼ばれる所与の結果を表すことを含む、強制と呼ばれるプロシージャを、再始動プロセス外部のソフトウェア・エージェントによって実行するステップと、
を含む。
ターゲット・プロセスの外側から制御される強制プロシージャを使用することにより、リプレイの取得が可能になる一方で、この強制を実行するエージェント・プロセスによる機能侵入(intrusion)を制限する。
有利なことには、ターゲット・プロセスは、少なくとも1つの実行可能ファイル内の少なくとも1つのプログラム実行ポインタを移動させることによって、リプレイ命令を自発的に実行する。
とりわけ、本発明に従った方法は、リプレイ命令またはそれが開始する被リプレイ・オペレーションのインターセプト・ステップをさらに有する。
したがって、オリジナルの実行可能ファイルからの自力での進行をアプリケーション・プロセスに任せることが可能である。本発明は、機能への侵入ならびに機能構成への侵入を大幅に削減することが可能である。加えて、本発明は、このリプレイを管理する強制エージェントまたはアプリケーション内で、再始動プロセス実行ポインタの進行メカニズムを体系的に提供する必要がないため、こうしたリプレイ機能を非侵入的に実施することができる。
複数のオペレーションを含むシーケンスをリプレイするために、本発明に従った方法は、一連のロギング・オペレーションのリプレイを実施することによって、少なくとも1つのターゲット・プロセスを実行するための、一連のロギング・オペレーションを表す、ログと呼ばれるロギング・データの順序付けセットを使用する。
有利な特徴によれば、インターセプト・ステップは、被リプレイ・オペレーションに対応する被ロギング結果を表すロギング・データを含むかどうかを検証するための、ログ・データ・テスト・フェーズをさらに含み、強制ステップは、このログがこうした被ロギング結果を含む場合にのみ実施される。
したがって本発明は、不必要なオペレーションに伴う作業負荷を削減することができる。
特に、被リプレイ・オペレーションが、決定論的オペレーションおよび非決定論的オペレーションの両方を含む場合、有利なことに、強制フェーズは当該決定論的オペレーションのうちの少なくとも1つに適用されない可能性がある。
実際、コンピュータまたはそのソフトウェア・システムあるいはその両方の内部の多数のオペレーションは、決定論的特徴を備えており、すなわち、プロセスの状態およびそれが使用するリソースにのみ依存する結果を与える。同じ状態から、このプロセスのすべてのオペレーション、あるいは、所与のタイプであるかまたはある特定のリソースにのみ影響を与えるすべてのオペレーションを、リプレイすることによって、リプレイされたシーケンスは、必然的に再始動プロセスを被ロギング・プロセスと同じ状態にする。自発的な再始動プロセスが、決定論的オペレーションを実行する新しい命令を実行する場合、得られる結果は、必然的に、被ロギング・プロセスに対応するオペレーションの結果と同一になる。したがって、求める目的の観点から決定論的であると識別されるオペレーションをロギングおよびリプレイしないことによって、ロギングまたはリプレイあるいはその両方によってもたらされる作業負荷を制限することが可能である。
このログは、たとえば、1つまたは複数の所与のプロセスに従って編成可能であり、要件に応じて選択可能な1つまたは複数の観点に従って、リプレイされるすべてのオペレーションのグローバルな視野を構成することができる。
本発明に従った方法は、被ロギング・プロセスのリプレイを実施するターゲット・プロセスを実行するための、被ロギング・プロセスと呼ばれるプロセスの実行時に実行される、少なくとも1つの所与のタイプのオペレーション・セットを表すログを使用することができる。
特に、この方法は、被ロギング・プロセスの実行の少なくとも一部で発生した、すべての被決定論的内部イベントのリプレイを、少なくとも1つのターゲット・プロセスによって実施することができる。
その実行の特定部分ですべての内部イベントを含む被ロギング・シーケンスのリプレイを実行するためにこの方法を使用することによって、および、同一状態から開始することによって、この方法は、ターゲット・プロセスおよび関係するリソースに関して、被ロギング・プロセスの状態と同一の状態を取得することが可能となる。
有利なことには、ログをテストするステップは、ログが被ロギング結果を表すデータを含む、被ロギング・プロセスの実行でまだリプレイされていない第1のオペレーションのポジションと比較した、ターゲット・プロセスの実行でリプレイされたオペレーションのポジションに関する。
したがって再始動プロセス・オペレーションは、リプレイ時に強制フェーズが必要であるか否かを特定する、シーケンスまたはポジション番号を増分することによって、ログに関してより単純に監視することができる。
別の方法として、またはプロセスの一部を形成するオペレーションをグループ化したログの使用と組み合わせて、本発明は、被ロギング・リソースと呼ばれる共有リソースに適用される少なくとも1つの所与のタイプのオペレーション・セットを表すログを使用することによって、リプレイ・プロセスを実施することも提案する。このログから、この方法は、再始動プロセスと呼ばれる少なくとも1つのターゲット・プロセスによって、当該被ロギング・オペレーションのリプレイを実行するために使用され、この再始動プロセスは、ターゲット・リソースと呼ばれるリソースにアクセスし、被ロギング・リソースに対応する。
特に、本発明に従った方法は、ターゲット・プロセスによってリプレイされ、共有タイプの少なくとも1つのターゲット・リソースに関するプリエンプティブ(pre-emptive)属性要求を含む、少なくとも1つのオペレーションに適用することができる。次に強制ステップは、
・このリソースに関してまだリプレイされていない次の被ロギング・オペレーションの被ロギング結果が、ターゲット・プロセスに対する属性に対応するかまたは対応しないかを検証する、テスト・フェーズ・ステップと、
・当該テストの結果が否定である場合は必ず、ターゲット・プロセスが保留され、肯定結果が得られるまで当該テストが反復されるステップと、
を含むことができる。
したがって本発明は、いくつかのプロセス間で共用されるリソースに適用されるリプレイ機能の実施を簡略化する一方で、ロギング中に通知されたこれら異なるプロセスのアクセス順序のリプレイを保持することができる。この機能は、たとえば、セマフォまたは共有メモリ・ゾーンの属性などの、プリエンプティブタイプのオペレーションに適用される。
本発明の特徴によれば、リプレイ命令は、実行可能ファイル外部のオリジナルと呼ばれるルーチンへの呼び出しを含み、インターセプト・ステップは、当該オリジナル・ルーチンの代わりに被修正と呼ばれるルーチンへの呼び出しを含み、この被修正ルーチンが強制オペレーションを実行または開始する。
たとえば、システムによってロードされた動的ライブラリを呼び出す命令の場合、本発明は、アプリケーションの実行可能ファイルが優先として呼び出す、追加のモジュールまたはライブラリをシステムにロードすることによって、インターセプトを実行することを提案する。フランス特許出願第2820821号に開示されるように、その後、このモジュールは機能管理エージェントまたはアプリケーションによって動的にロードすることが可能であり、オリジナル・ルーチンのコンテンツに加えて、異なるタスクを実行する被修正ルーチンを含むことになる。
有利なことには、被修正ルーチンは、ソフトウェア・システム内で実行される少なくとも1つの命令を含み、ターゲット・プロセス・コンピュータのコンピュータのユーザ・メモリ・スペース内で実行され、ターゲット・プロセスによるリプレイの実施を管理する、リプレイと呼ばれる少なくとも1つのソフトウェア・エージェントへの呼び出しを含む。
たとえば、機能管理アプリケーション内でアプリケーション・プロセスとして、ユーザ・メモリ・スペース内で機能する1つまたは複数のリプレイ・エージェントを使用することにより、システム・スペース内での修正または介入を制限し、それらをターゲット・アプリケーションに関してトランスペアレントに実行しながら、柔軟かつモジュール式にこれらの機能を実施することができる。
1機能によれば、被修正ルーチンは、これを呼び出した命令が、リプレイのコンテキストで実行されるか否かを検証するテスト命令を含み、このテストはリプレイ・エージェントへの呼び出しに影響を与える。
変形形態では、被修正ルーチンは、これを呼び出した命令が、ロギングのコンテキストで実行されるか否かを検証するテスト命令も含み、この場合、ロギング・エージェントへの呼び出しを開始する。
したがって、リプレイを実行するために使用される被修正ルーチンを含むこうしたシステム・モジュールは、そこで実行される様々なアプリケーションの機能、ならびにいかなるリプレイまたはロギング・モードを妨害することなく、1つまたは複数のコンピュータまたはネットワークのノード上にインストールまたはロードすることが可能であるか、あるいはその両方が可能である。
シミュレーションまたはリプレイ機能の改善範囲内で、本発明の他の目的は、アプリケーションまたはこれらのプロセスの少なくとも1つの機能の管理を改善することである。
次に、本発明に従った方法は、被ロギングと呼ばれる少なくとも1つのアプリケーション・プロセスの機能管理を実行し、
・ロギング・データの形で、再始動ポイントと呼ばれる所与のポイントから中断と呼ばれるポイントまでの、前記被ロギング・プロセスの実行時に発生した少なくとも1つの所与のタイプのイベントを表すデータを、記録および格納するステップと、
・被ロギング・プロセスの再始動ポイント状態に対応する状態の再始動プロセスから、当該ロギング・データからの当該イベントを当該再始動プロセスによってリプレイし、この再始動プロセスを中断ポイントでの被ロギング・プロセスの状態に対応する状態にするステップと、
を含む。
本発明の特徴によれば、ロギング・データは、再始動ポイントと呼ばれるその実行における所与のポイント以降に被ロギング・プロセスで発生する、1つまたは複数の所与のタイプのすべてのイベントを表す。次にリプレイ・ステップが、被ロギング・プロセスの再始動ポイント状態に対応する状態から始まる再始動プロセスに適用され、リプレイ・シーケンスは、この再始動プロセスを、被ロギング・シーケンス後の被ロギング・プロセスの状態に対応する状態に復元する。
本発明によれば、再始動ポイントでの被ロギング・プロセスの状態は、特に、再始動ポイント・データの形で取り込みおよび格納され、これを使用して、再始動プロセスは、リプレイ・フェーズを適用する前の再始動ポイント状態に復元される。
本発明に従った方法は、特に、外部イベントならびに内部イベントを含む一連のイベントのリプレイを実行するために使用することができる。したがって本発明は、これら外部のイベントそれぞれを再始動プロセス内に注入またはシミュレーションすることによって、外部イベントのリプレイを実施することを提案する。リプレイの実行における各外部イベントに続き、内部イベントが、直前の外部イベントの発生または処理あるいはその両方に応答して、再始動プロセスによって自発的に実行される。次に再始動プロセスは、外部リプレイ・エージェントによってトリガされた外部イベントの発生に応答して、内部イベントの少なくとも1つの被ロギング・シーケンスのリプレイを実行する。
機能管理の機能における本発明の一目的は、アプリケーションまたはこのアプリケーションからのプロセスのうちの少なくとも1つの機能の少なくとも一部の、デバッグ、あるいは分析または再生成のためのツールを改良することでもある。
したがって本発明は、たとえば、このアプリケーションのデバッグのコンテキスト内で、制御可能な、被追跡アプリケーションと呼ばれるアプリケーションの実行の監視を実施するために、機能管理を使用することを提案する。こうした監視は、被追跡アプリケーションの少なくとも1つのプロセスに適用され、
・被追跡アプリケーションの所与の状態から、被追跡アプリケーションの実行において調査済みシーケンスを構成する複数の一連の連続する被ロギング・シーケンスのロギングを開始するステップと、
・残りの被ロギング・シーケンスの制御された実行を生成する、制御された一連のリプレイ・ステップを生成し、制御リズムに従って調査済みシーケンスのリプレイを生成するステップと、
を含む。
機能管理の機能における本発明の目的は、アプリケーションの、またはこれらプロセスのうちの少なくとも1つの、機能を確実化するためのツールを改良することでもある。
こうした確実化は、特に、そのクライアントに提供されるサービスの観点から、アプリケーションの改良されたオペレーションの連続性の維持を通じて取得することができる。障害時にはこの連続性が全体的である可能性があり、すなわちクライアントは、同じサービスを取得するためにまったくオペレーションを再始動する必要がない。こうした連続性は部分的である可能性もあり、すなわち、同じサービスまたはこのサービスの一部を取得するために、クライアントが反復するかまたは余分に実行しなければならなくなる、オペレーションの数または複雑さあるいはその両方をできる限り低減させることによる。
このコンテキストにおいて、本発明は、クラスタと呼ばれる、通信またはさらに言えば冗長マルチコンピュータ・アーキテクチャの、オペレーション・ノードと呼ばれる少なくとも1つの1次ノードで実行される、管理された被確実化アプリケーションと呼ばれる第1のアプリケーションの機能を確実化するために、機能管理方法を実装することを提案する。この確実化は、スタンバイ・ノードと呼ばれる第2のクラスタ・ノードにおける、スタンバイと呼ばれる第2のアプリケーションの、再始動ポイントでの被確実化アプリケーションの状態に対応する状態への復元を含む。
この復元は、諸実施形態に応じて、または状況に応じて、いかなる障害もなく予防手段として実行するか、または障害検出後に、以前格納されたデータに基づいて実施することができる。
この確実化は、
・開始ポイント以降に被確実化アプリケーションの実行をロギングし、ロギングされたイベントを、オペレーション・ノード外部の少なくとも1つのログ・ファイルに格納するステップと、
・オペレーション・ノード内の障害を検出するステップと、
・被確実化アプリケーションにロギングされたイベントをスタンバイ・アプリケーションでリプレイするために、当該ログ・ファイルを使用し、最後にロギングされたイベント後に、被確実化アプリケーションの状態に対応する状態にスタンバイ・アプリケーションを復元するステップと、
を、さらに含む。
本発明は、協働するコンピュータのネットワークを備え、こうした方法を実装する少なくとも1つのノードを含む、システムも提案する。
とりわけ、本発明は、当該ネットワーク内で実行される少なくとも1つのアプリケーションの機能を管理するために本発明に従った方法を実装する、ミドルウェア・タイプのアプリケーションを使用するようなネットワークを提案する。
本発明は、特に、たとえばネットワーク、または、1つまたは複数のネットワークにわたって分散されたアプリケーション、あるいはその両方を管理する、「ミドルウェア」タイプの環境で適用可能である。
本発明の他の特徴および利点は、まったく限定的でない実施形態の方法の詳細な説明、および添付の図面から明らかとなろう。
図1は、本発明を実施する中間アプリケーションの機能アーキテクチャを示す図である。
クラスタ内で、たとえばトランザクション・アプリケーションなどのAOPマスタ・アプリケーションは、特に様々な形でのデータの入力および出力によって、一定数のサービスをユーザまたはクライアントに提供する。クラスタ内で、このアプリケーションは単一またはマルチタスク(マルチプロセスまたはマルチスレッド)とすることが可能であり、一定数のリソースを使用する。特にこれらのリソースは、たとえば作業メモリのスペース、共有メモリ、またはデータ・ファイルの形の、データとするか、あるいは、たとえばセマフォまたはミューテックス(mutex)の形の状態インジケータとすることができる。
マスタ・アプリケーションは、オペレーティング・ノードOPまたは1次ノードと呼ばれるノードを形成する、1つまたは複数のコンピュータ上で実行される。中間アプリケーションINTと呼ばれる機能管理アプリケーションは、1つまたは複数のクラスタ・ノード内の1つまたは複数の部分で実行される。
諸実施形態によれば、この中間アプリケーションは、クラスタ内で機能するマスタ・アプリケーションの様々な面を処理することができる。こうした中間アプリケーションINTは、特に、「ミドルウェア・タイプ」の中間クラスタ管理ソフトウェアと並行して、こうしたミドルウェアと統合して、またはそれ自体がミドルウェアの形で、作業を行うことができる。
本明細書で説明する機能を介し、中間アプリケーションINTを使用して、特に、クラスタ内のマスタ・アプリケーションのすべてまたは一部の複製を生成することができる。マスタ・アプリケーションの複製は、次にリプレイ・アプリケーションと呼ばれることになる他のアプリケーションを提供することが可能である。
特にこうした複製に関連して本明細書で説明される機能は、マスタ・アプリケーションに関する信頼性(reliability)機能の実装、あるいは、「デバッグ」、調整、または開発タスクを実施するためのこのアプリケーションの追跡または調査も可能にする。信頼性実装のための使用には、たとえばバックアップまたは置換アプリケーションとしての再始動アプリケーションが含まれる。追跡またはデバッグの使用には、たとえば、以下で説明するように、被ロギング・イベントの速度低下または制御リズムに従った、イベントのロギングJOPまたはリプレイRSBあるいはその両方が含まれる。
したがって本明細書では、信頼性機能に適用される諸実施形態について、非限定的な例としてのみ説明する。
再始動ポイントまたは「チェックポイント」と呼ばれる異なるポイントで、定期的またはイベント時に、AOPマスタ・アプリケーションを信頼されるように実行する場合、中間アプリケーションINTは、2次、または「スタンバイ」SBと呼ばれるノード上で実行される少なくとも1つの再始動アプリケーションASBを、作成または更新する。
この再始動アプリケーションは、たとえば、再始動方法と呼ばれるアプリケーションの取り込みおよび復元による複製の方法によって、作成または更新される。当該複製方法は、マスタ・オペレーションの状態の取り込みオペレーションCAPと、それに続く、この状態、すなわち、そのプロセスの状態、およびこれが使用するリソースのすべてまたは一部の状態の、復元オペレーションRESを含む。
こうした取り込みオペレーションCAP時に、AOPマスタ・アプリケーションの状態は、チェックポイント状態EPRを形成するデータの形でバックアップされる。
マスタ・アプリケーションのリソースの一部、特に、ハード・ディスクなどのストレージ手段上の大容量を表すデータ・ファイルを、進行中(on-the-flow)に、ミラー・ディスクまたは共用ディスク上に再始動データ・ファイルを構成する、いくつかの異なるストレージ・メディア上のいくつかのコピーに更新することが可能である。この場合、チェックポイント状態を形成するデータは、これらの再始動データ・ファイルへの参照を構成する情報を含むことができる。
チェックポインティングまたは複製が、直接またはリプレイ・データ・ファイルへの参照のいずれかによる、すべての実行環境およびマスタ・アプリケーション・リソースを含む取り込み状態に基づく場合、当該チェックポイントまたは当該複製はホリスティック(holistic)と呼ぶことができる。
チェックポイント状態EPRのデータから、中間アプリケーションINTは、再始動アプリケーションASBの作成または更新によって復元RESを実施することができる。当該復元は、定期的に、または開始イベント時、たとえば管理者またはクラスタ作業負荷を管理するためのメカニズムの要求時に、実施することができる。この復元は、オペレーション・ノードの障害が検出によって検出された後に実施可能であり、その後再始動アプリケーションは、永続または非永続のバックアップ・アプリケーションとして使用することができる。
必要であれば、中間アプリケーションは、マスタ・アプリケーション・サービスのすべてまたは一部の、1つまたは複数の再始動アプリケーションへの切り替えを組織化する。この切り替えをクライアントに対してトランスペアレントにするために、中間アプリケーションは、仮想ネットワーク・アドレスを管理する「メタプロセス」を通じて介入方法を使用し、クライアントのマスタ・アプリケーションからこれら再始動アプリケーションへの接続のマイグレーションを実施することができる。中間アプリケーションは、仮想プロセス識別(仮想PID)を管理する「メタプロセス」を通じて介入方法を使用し、これら再始動またはクローン・プロセスに関する通信を、それらオリジナル・プロセスのものと同一に復元することもできる。
これらの技法は、たとえば、フランス特許第2843210号に記載されたものとすることができる。
たとえば、マスタ・アプリケーションの作業負荷を分散させるため、またはオペレーション・ノードまたはネットワークの特定要素の保守を可能にするために、任意の障害以外に、復元およびそれに続く部分または全体切り替えを実施することもできる。
この障害または切り替えあるいはその両方を、クライアントの観点からできる限りトランスペアレントとするために、中間アプリケーションは、マスタ・アプリケーションのいくつかのチェックポイントに影響を与えるイベントのすべてまたは一部を記録し、それらを1つまたはいくつかの「ログ」の形でバックアップする。
チェックポイント状態からの復元の完了時、再始動アプリケーションは、当該チェックポイントを確立する際のマスタ・アプリケーションの状態にある。この状態から始まり、中間アプリケーションは、当該チェックポイント以降バックアップされたログを使用して、このチェックポイント以降マスタ・アプリケーションで行われたイベントの、再始動アプリケーションによる再実行またはリプレイを発生させる。
中間アプリケーションは、たとえば、再始動アプリケーションに関するいくつかのリソースが、復元されたチェックポイント以降変更された場合、当該実際の状態に対応する状態に戻されない限り、これらのリソースの実際の状態を干渉することなく、その再実行を実行できるように、これらのリソースの仮想化を実施することもできる。
オペレーション・ノード上でロギングされ、2次ノード上でリプレイされるイベントの中には、外部と呼ばれるイベントと内部と呼ばれるイベントの区別がある。
外部イベントは、マスタ・アプリケーションの出現時に、当該アプリケーションの外部として定義される。したがって外部イベントは、アプリケーション内部で、このアプリケーションの外部からの、すなわち、特に制御を行わないハードウェアまたはソフトウェアからのアクションまたは情報によって開始される、イベントとして定義される。これらの外部イベントは、たとえば、キーボードまたはマウスなどのハードウェア・インターフェース入力であるデータまたは信号入力、あるいは、クライアント・サーバ・アプリケーションの場合のクライアントなどの、ネットワークを介して着信し、外界から入ってくるデータ、の形を取ることができる。最も頻繁には、これら外部イベントは、アプリケーションの環境から推定または再作成することができない。これら外部イベントは、マスタ・アプリケーションによってロギングされ、再始動アプリケーションによってリプレイすることができる。
時にはターゲット・アプリケーションと呼ばれる当該アプリケーションが、1次ノード以外のノード上で実行される要素を組み込む場合、当該アプリケーション内であるが1次ノードの外部であるイベントを、外部イベントとして処理することもできる。
内部イベントは、たとえば、このアプリケーションのプロセスによって受け取られ、同様にアプリケーションの一部である他のプロセスから入ってくる、データまたは信号入力の形で、マスタ・アプリケーションのまたはこれを実行中のノードの、内部として定義される。これらの内部イベントは、直接、あるいは、アプリケーション外部であるがこれを実行しているノードの一部であるソフトウェア・メカニズムまたはエージェントを介して、たとえば、Unix(登録商標)タイプのシステムからの「プロセス間通信」(IPC)エージェントなどの、パートナ・アプリケーションまたはオペレーティング・システムの一部を介して、受け取ることができる。これらの内部イベントは、たとえば「パイプ」、「信号キュー」、または「メッセージ・キュー」、あるいは「ソケット」のインターフェースから入ってくる、「メッセージ受け渡しイベント」を含むことができる。これらの内部イベントは、「共有メモリ・アクセス」イベント、たとえばセマフォまたは「ミューテックス」を含むこともできる。
アプリケーションが実行中の間、内部イベントは、たとえば外部イベントに比べてかなり数が多い。さらに内部イベントは、高速の実行、または特にロギング・オペレーションに関する時間に比べて少ない待ち時間、オペレーションに対応し、とりわけ、後者がネットワーク伝送またはハード・ディスクなどの永続メディア上のストレージを含む場合はそうである。たとえばロギング・オペレーションは、内部イベントの10から10,000倍の持続時間を示す場合がある。
図2に示されるように、チェックポイント以降に発生したイベントのロギングJOPは、外部イベントおよび内部イベントに対して異なるように実施され、別々にバックアップされる。
ネットワークによってクラスタに接続されたオペレーション・ノードOPは、それ自体が「ユーザ・スペース」と呼ばれるスペースをサポートする、システム・スペースをサポートするハードウェア・スペースを備える。OSIモデルの1つまたは複数の最下層を基準にして画定することが可能なハードウェア・スペースは、特に、プロセス、実際のメモリおよびプロセッサ、ならびにネットワーク・カードなどの通信を実行するための、ハードウェア・デバイスを備える。通常、多くの外部イベントは、ネットワークを介して渡される通信の形で、ハードウェア・スペースを介して移行する。
OSIモデルの1つまたは複数の中間層を基準にして画定することが可能なシステム・スペースは、特にオペレーティング・システムを含む。このシステム・スペースは、Unix(登録商標)システムでのソケットの形で、アプリケーションからのハードウェア・スペースを介した外界との通信を管理する、あるいは、たとえばUnix(登録商標)システムでの「パイプ」およびIPCの形で、いくつかのアプリケーション・プロセス間の通信を管理する、様々なソフトウェア・メカニズムおよびエージェントを備える。
OSIモデルの1つまたは複数の最上層を基準にして画定することが可能なユーザ・スペースは、マスタおよび中間アプリケーションなどのノードによって実行される様々なアプリケーションの一部である、プロセスを備える。このユーザ・スペースでは、たとえばマスタ・アプリケーションなどの1つまたは複数のアプリケーションの一部である、いくつかのプロセスP1、P2、およびPnが実行される。これらのプロセスは、システム・スペースからの1つまたは複数の「ソケット」を介して外部と、ならびに、システム・スペースからの1つまたは複数の「パイプ」を介してそれらの間で、情報を交換する。これらのプロセスのいくつかは、状態リソース(図示せず)によって管理された形で、「共有メモリ」リソースSHMにも同時にアクセスする。
チェックポイントをセットアップする場合、中間アプリケーションは、1つまたは複数の新しいログを開始するか、または実行ログ内に「チェックポイント・マーク」を記録することができる。
特に、「ユーザ・スペース」または内部イベント・ログ(「ユーザ・ログ」)(以下で説明)の場合、「ユーザ」という用語は、本明細書では「システム・スペース・ユーザ」の意味に取られることに留意されたい。これは、その後「クライアント」として定義されることになる、アプリケーションと通信する人物またはコンピュータが、たとえこのユーザ・スペースに直接アクセスできない場合であっても、これらアプリケーションが、ノードおよびそのオペレーティング・システムを使用して、ユーザ・スペースにアクセス可能であることを意味する。
外部イベントは、「カーネル・ログ」と呼ばれる、1つまたは複数のファイルKLからなるログにバックアップされる(図2を参照)。このバックアップを実施するために、これらのイベントを表すデータが、ノードに着信後、OSI国際分類の低レベル層で読み取られる。好ましくはこれらのイベントは、システム・スペース、たとえばカーネル内で、逆多重化(demultiplex)される前、および「プロトコル・スタック」によって処理される前に、読み取られる。このロギングはシステム・スペース内部から直接実行されるため、バッファに書き込むことによって生じる性能損失および不必要なコンテキスト変更を避けることが可能である。
図3は、特にTCP−IPプロトコル・メッセージの形を取る場合の、外部イベントのロギング・オペレーションをより詳細に示す。マスタ・アプリケーションは、オペレーション・ノードOP上で実行され、少なくとも1つのプロセスP1を備える。中間アプリケーションは、オペレーション・ノードOP上で実行される制御プロセスCtlOPを有する第1の「IplogOP」モジュールと、2次ノードSB上で実行される制御プロセスCtlSBを有する第2の「IPlogSB」とを備える。これらのノードOPおよびSBのそれぞれで、制御プロセスは、当該ノードのシステム・スペースで実行される、ソフトウェア・メカニズムまたはエージェント「disp」(DISPP、DISPS)のオペレーションを管理する。
Unix(登録商標)タイプのシステムの場合、当該「disp」エージェントは、特に、システム・スペースにロードされたカーネル・モジュールを備える。このカーネル・モジュールは、システムがブートされた場合、あるいは管理されるかまたは信頼できるようになるアプリケーションを起動する前でさえ、カーネルに動的にロードされる。機能構造の観点からすれば、たとえばOSI層を参照すると、このモジュールはIP層の下に、ハードウェア・スペースに応じて特にIP層と「ネットワーク・デバイス」層の間に、挿入される。
この「disp」エージェントは、ネットワークから受け取られ、TCP層にアドレス指定されたメッセージを、インターセプトし、必要に応じて送信または受信により動作する、メッセージ・ファイルQOPおよびQSBに格納することができる。
ステップ1では、クライアントから着信し、プロセスP1にアドレス指定されたメッセージが、オペレーション・ノードOPのシステム・スペース内の「disp」エージェントによって受け取られ、メッセージ・キューQOP内で保持される。
ステップ2では、メッセージが受け取られたことを表すロギング・メッセージが、「DISPP」エージェントによって1次ノードから2次ノードSBに送られ、DISPSエージェントは受信済みメッセージ・キューQSB内でこれを受け取る。
オペレーション・ノードOPは、クライアントとの通信に使用されるものとは異なるネットワーク・デバイスを使用することによって、特に、別のローカル・エリア・ネットワーク(LAN)を介して、1つまたは複数の2次ノードSBと通信することができる。
いくつかのこれら2次ノードは、オペレーション・ノードOPと通信するために、RFC 1112標準に従った「マルチキャスト」タイプのアドレスにもサブスクライブすることができる。たとえばRFC 1112標準「Host Extensions for IP Multicasting」によって、224.0.0.0から239.255.255.255の間の範囲のIPアドレスとして定義された、マルチキャスト・アドレスを使用することにより、オペレーション・ノードは、ネットワーク内のすべてのアドレスに送信されることになる伝送によってネットワークに過負荷をかけることなく、いくつかの2次ノードに同時にアドレス指定されたメッセージを、1度だけ送信することができる。
好ましくは、ノードOPから他のノードSBに送信されるロギング・メッセージは、物理層レベルで受け取られるすべてのパケットを、それらのオリジナルの形で含むはずである。すなわち、マスタ・アプリケーションにアドレス指定されたすべてのデータ、ならびにイーサネット(登録商標)、IP、およびTCPヘッダなどのネットワーク・データを含む。
ステップ3では、2次ノードSBは、肯定応答メッセージをオペレーション・ノードOPに送信する。
ステップ4では、オペレーション・ノードOPで、対応する肯定応答が受け取られると、メッセージ・キューQOPからメッセージが取り出され、TCP層に送信される。
並行ステップ4’では、2次ノードSBはメッセージをログに、たとえばカーネル外部イベント・ログKLに記録し、受け取ったメッセージ・キューQSBから取り出す。
ステップ5では、オペレーション・ノードOPで、マスタ・アプリケーションのP1プロセスが「ソケット」要素内のメッセージを読み取り、次に、その動作を続けるためにこれを処理する。
マスタ・アプリケーションは、2次ノードSBによる確認応答の後、入ってくるメッセージを考慮するだけであるため、本発明は、ロギングされていないメッセージがアプリケーションによって処理できないことを保証する。たとえば、こうした読み取られていないメッセージをTCPプロトコルの再送機能によって取り出すことはできない。
チェックポイント・マークをカーネル・ログ内に設定しようとする場合、2次ノード内の制御プロセスCtlSBは、当該チェックポイント・マークを表すデータをそこに記録する。
内部イベントのコンテンツは、ローカル、すなわちノード内の環境に、先行する外部イベントのコンテンツに、および、プロセッサ内のスケジューリング、あるいはノード内で並行して動作するいくつかのプロセッサまたはコンピュータの管理の問題に、直接依存する。事実上、ほとんどの場合、これらイベントの順序のみがアプリケーションの後続の動作に影響を与える。
中間アプリケーションINTは、これら内部イベントそれぞれの詳細またはパラメータを記憶せずに、それらイベントの順序をロギングすることに限られる。この選択により、これら内部イベントのロギングJOPについて格納されるデータのボリュームを削減すること、およびこのロギングによりオペレーション・ノードおよびマスタ・アプリケーション内で発生する性能損失を最小限にすること、が可能になる。
内部イベントは、「ユーザ・ログ」と呼ばれる1つまたは複数のファイルで構成されるログにバックアップされる(図2を参照)。
図4に示されるように、1次ノードOPおよび2次ノードSBは、ハードウェアまたはソフトウェアあるいはその両方の高速相互接続(HSI)を介して通信する。当該HSIシステムは、1次ノードOPのロギング・プロセスPlogOPと2次ノードSBのロギング・プロセスPlogSBとの間で、および、これら2つのノードのオペレーティング・システムのすべてまたは一部をバイパスすることによって直接、データの転送を可能にする。こうしたHSIシステムは、ネットワーク・カードおよびそれらの制御ソフトウェアなどの既存のネットワーク・インターフェース・コントローラを使用することにより、既知の手段に従って実装することができる。こうしたHSIシステムは、またはクラスタ内部の残りのネットワークと並行して、またはこれらと組み合わせて、高性能ネットワーク・デバイスを使用することによって実装することもできる。
内部イベントは、中間アプリケーションのロギング・プロセスPlogOPによって、オペレーション・ノードOPのユーザ・スペース内で精査および読み取られる。これはその後、高速接続システムHSIを介して、これらの内部イベントまたはそれらの発生順序あるいはその両方を表すデータを、2次ノードのロギング・プロセスPlogSBに送信する。次にこのデータは、「ユーザ・ログ」を形成する1つまたは複数のファイルにバックアップされる。
チェックポイント・マークを「ユーザ・ログ」内に設定しようとする場合、2次ノードの制御プロセスPlogSBは、このチェックポイント・マークを表すデータをそこに記録する。
好ましくは、ロギング・プロセスPlogOPは、その「リターン」で、すなわち、その結果がすでに生成されているが、その実行を要求したマスタ・アプリケーション・プロセスにまだ送信されていない場合に、内部イベントを読み取る。
この読み取りは、たとえば入力/出力システム呼び出し、たとえば「パイプ」へのアクセス、および共有メモリ・セグメントSHMをロックするオペレーションへの応答をインターセプトすることによって、実行される。
このインターセプトは、システムによって提供され、アプリケーションによって呼び出される、ルーチンのすべてまたは一部のコンテンツに、記録命令(レコーディング・プローブ)を挿入することによって実施される。レコーディング・プローブは、図7に示されるように、以下で指定されるような「メタプロセス」による動的介入技法を使用することによって、たとえばオリジナル・ルーチン・コードの終わりに対してエピローグを形成する、追加命令の形で追加される。
内部イベント・ログ、「ユーザ・ログ」は、それぞれが内部イベントを表す一連の記録を含む。これらのイベントは、単一ファイルにロギングすることが可能であり、その後、当該リソースまたはプロセスあるいはその両方の識別を含むことになる。それらは、たとえばリソースごと、プロセスごと、またはそれら2つの組み合わせごとに、1つのファイルの、いくつかのファイルに記録することも可能である。
所与のリソースに対応するファイルの場合、これら記録のそれぞれが、特に、
・各リソース固有の順番であり、当該リソース上での新しいイベントまたはオペレーションごとに増分される、当該イベントの連続番号、
・たとえばこのリソースに関する最終イベント以降の経過時間を表す、タイムスタンプ情報、
・たとえば入力/出力リソース(「I/O」)に関する「読み取り」または「書き込み」、あるいはセマフォに関する「ロック」または「アンロック」の、イベント・タイプ、
・結果、すなわち入力/出力オペレーションの場合の値、または「ロック」の場合の排他的アクセスを得るプロセスの識別、
の、フィールドを含む。
この結果は、特に、たとえば、2次ノードで復元された再始動またはバックアップ・アプリケーションによる、ログ内のイベントのリプレイ時に、リソースの仮想化を実施するために使用される。格納された結果は、その後、リプレイ時に実行されたI/Oオペレーション要求の結果として強制される値、または「ロック」を得るタスクの場合、プロセスの仮想識別(仮想PID)を構成することになる。
オペレーション・ノードから1つまたは複数の2次ノードにロギング・データを送信することによる、性能損失を制限するために、いくつかの内部イベントを表すデータの送信を集約することが有用である。
このために、中間アプリケーションは、たとえば、オペレーション・ノードOPの1次と呼ばれるロギング・プロセスPlogOPによって実装される、いくつかの異なる方法の組み合わせを使用することができる。
アプリケーションの内部変更は、このオペレーションが外界に対して何も送信しない限り、外界に関して、たとえばそのクライアントに関して重要でないことが理解される。チェックポイントおよびログから復元された再始動アプリケーションは、当該ログが、ロギングされたマスタ・アプリケーションによって送信された最後の外部メッセージ以降に発生した内部イベントを含まない場合、外界に対するいかなるサービスの割り込みも発生させることはない。
第1の方法によれば、この1次ロギング・プロセスPlogOPは、内部ロギング・データが発生した場合、ただし非同期モードで、伝送可用性に従い、マスタ・アプリケーション機能のブロッキングなしに、後者が外部メッセージを送信しない限り、これを送信する。マスタ・アプリケーションによる外部メッセージの次の送信で、検出の手段はこの1次ロギング・プロセスに警告し、次にこの外部メッセージの送信を、および場合によっては1つまたは複数のマスタ・アプリケーションのプロセスの実行を、ブロックまたは中断する。このブロックは、その後、すべての内部ロギング・データがこの非同期伝送を介して送信されるまで、または当該データの受け取りを受け取るまで、維持される。
第2の方法によれば、1次ロギング・プロセスPlogOpは、いくつかの連続する内部イベントを表す内部ロギング・データを、2次ノードのロギング・プロセスPlogSBに即時に送信せず、バッファに格納する。これは、番号が設定されたしきい値に達した場合、またはアプリケーションが外部と呼ばれるメッセージ、たとえばクライアントまたは外部プロセスにアドレス指定されたデータまたは信号を、外界に送信しなければならない場合にのみ、これらを送信する。マスタ・アプリケーションによる外部メッセージの次の送信時に、検出の手段は、この1次ロギング・プロセスに警告し、次に、この外部メッセージの送信を、および場合によっては1つまたは複数のマスタ・アプリケーションのプロセスの実行を、ブロックまたは中断する。このブロックは、その後、1次ロギング・プロセスが、キャッシュ内の残りのロギング・データを2次ノードに送信するまで、または当該データの受け取りを受け取るまで、維持される。
これら2つの方法において、外部メッセージを送信しなければならないという事実は、外向きのイベントを構成し、これが、ブロッキングと呼ぶことのできる、すなわち、先行イベントのロギングがこのイベントの実行前にクローズされることを要求する、イベントのタイプを構成する。諸実施形態によれば、最も頻繁には、外部の外向きイベントに加えて、他のタイプのイベントをブロッキングとして選択することができる。
図5は、1次ノードOP外部の伝送前の、いくつかの内部イベントEVIに関するロギング・データDJの集約を伴う、イベント・ログのオペレーションを示す。
ステップ1では、ロギング・プロセスPlogOPが、被ロギング・プロセスP1の実行時に、イベントEVIの発生を検出する。
ステップ2では、ロギング・プロセスPlogOPが、検出されたイベントEVIをブロッキング・タイプとみなさなければならないかどうかをチェックする。
ステップ3では、イベントEVIがブロッキング・タイプでない場合、このイベントのロギングによってロギング・データ項目DJが生成される。
ステップ4では、このロギング・データ項目DJが、次のイベントの検出を待つ前に、バッファ・ログJS1Localを構成する順序付けされた構造内の1次ノードOPに格納される。
フェーズ5では、検出されたイベントEVIがブロッキング・タイプの場合、ロギング・プロセスPlogOPは、バッファ・ログJS1Localに以前にロギングされた内部イベントの実行シーケンスをクローズするフェーズを実施する。
このフェーズ5はステップ6を含み、ここでは、被ロギング・プロセスP1の実行が中断され、クロージャ・フェーズ5の満足のいく実行を保留する。
このフェーズ5はステップ7も含み、ここでは1次ノードのロギング・プロセスPlogOPがバッファ・ログJS1Localのコンテンツを2次ノードのロギング・プロセスPlogSBに送信し、検出されたイベントEVIに関するログJSem1に格納され、次に先行データが続く。1次ロギング・プロセスPlogOPは、このイベントが内部イベントでもある場合、バッファ・シーケンスを再始動すると共に、検出されたイベントEVIの直接ロギングを続行する。
図6に示された変形形態では、内部イベントのバッファリングを、ブロッキング・タイプのイベントと場合によっては異なるタイプのイベントによって開始することができる。これには、開始タイプのイベントが含まれる。単一タイプのイベントを、ブロッキング専用タイプ、または開始専用タイプ、あるいはそれら両方のタイプであるとして選択することができる。
この変形形態では、ステップ1のイベント検出の次に、ステップb1が続く。このステップb1では、検出されたイベントEVIのタイプが開始とみなされる場合、1次ロギング・プロセスPlogOPは、バッファ・メモリへのロギングに関する現行のシーケンスSEQCが進行中であるかどうかをチェックし、進行中でない場合はこれを開始する。
後続のステップb2では、バッファ・メモリへのロギングに関するこうした現行のシーケンスSEQCが、検出されたイベントEVIに対して進行中であるかどうかをテストする。
ステップb3では、このEVIイベントに対してアクティブな現行のバッファ・シーケンスSEQCがない場合、その結果はロギング・データ項目DJとしてロギングされる。
ステップb4では、当該ロギング・データ項目DJが2次ロギング・プロセスPlogSBに送られ、それらの先行に続いて、検出されたEVIイベントに関するログ・ファイルJSem1に、先行データに続いて格納される。次に1次ロギング・プロセスPlogOPは、新しいイベントの検出を待つ。
ステップb2に続いて、検出されたイベントEVIに対して現行シーケンスがアクティブの場合、図5に示されるように、このイベントのロギングは続行される。
中間アプリケーションは、すべてまたは一部のサービスをマスタ・アプリケーションから再始動アプリケーションに切り替えたい場合、2次ノード内のこの再始動アプリケーションをチェックポイント状態から復元することによって開始し、次にこの後者のチェックポイント以降にロギングされたイベントのリプレイを実施する。
特に、イベント駆動型のマスタ・アプリケーションの場合、すなわち、開始イベント(外部)、たとえばトランザクション・アプリケーションで、外部イベントおよび内部イベントについて異なるように復元リプレイが実施される。
このアプリケーションについて、こうした機能手段は、外部イベントの受け取りを依然として待つことが可能な少なくとも1つのプロセスを含み、この時点で、内部イベントを含むオペレーションを実施することによって反応する。
したがってリプレイは、ロギングされた外部イベントのアプリケーションへのアクティブな供給、ならびに、再始動アプリケーション自体によってリプレイ時に作成される、内部イベントに応答してロギング済み回答を提供する受動応答を含む。
図7は、外部または「カーネル・ログ」を構成する1つまたは複数のファイルKLにロギングされた、TCPメッセージ・タイプの外部イベントのリプレイRSBのオペレーションを示す。
当該カーネル・ログKLは、以前にロギングされたTCPメッセージを再始動アプリケーションのプロセスPB1に再注入するために、中間アプリケーションに属し、2次ノードSBのユーザ・スペース内で実行中の、リプレイ・プロセスPREによって使用される。
この再注入を実施するために、中間アプリケーションINTは、TCPメッセージ受け取り層内に、たとえばソフトウェア・メカニズムまたはエージェント「ipfilter」の形で置かれた、IP層とTCP層との間に機能カーネル・モジュールを備える、ソフトウェア・メカニズムまたはエージェントを含むかまたはこれらを使用する。2次ノードは、ユーザ・スペース・プロセスがアクセス可能にするために、それへのアクセスがインターフェースによってシステムに「マッピング」される、BLネットワークに関するローカル・ループ機能も含む。このループBLは、たとえばUnix(登録商標)などのオペレーティング・システムに実装されるソフトウェアである仮想ループバック・インターフェースとは対照的に、特に、IP層下部のデータを再注入できるようにする、ハードウェア・スペース内に物理デバイスを含むことができる。
ステップ1では、リプレイ・プロセスPREが「カーネル・ログ」KLのファイルにロギングされたメッセージを読み取る。
ステップ2では、リプレイ・プロセスPREがこのメッセージをネットワーク・ローカル・ループBLに注入する。
ステップ3では、このメッセージがIP層によって受け取られ、「ipfilter」エージェントを介して、処理のためにTCP層に送られる。
ステップ4では、TCP層が受け取りをネットワークに送る場合、後者は「ipfilter」エージェントによってフィルタリングまたはブロックされることになる。
ステップ5では、メッセージがTCP層に送られた後、その受け取りがあればそれを受け取った後、「ipfilter」エージェントは、メッセージがTCP層によって実際に受け取られたかまたは処理された旨の信号を、リプレイ・プロセスPREに送信する。
ステップ6では、再始動アプリケーション・プロセスPB1がTCP層からメッセージを受け取り、それに含まれるパケットの非同期読み取りを実施する。
リプレイ全体にわたり、「ipfilter」エージェントは再始動アプリケーションをネットワークから分離し、同時に、すべての外部メッセージがTCP層まで到達するのを防ぎ、同時に、再始動アプリケーションによって送信されるすべてのメッセージが、このアプリケーションに関してトランスペアレントにIP層に到達するのを防ぐ。
リプレイ・アプリケーションでは、2つのリプレイされた外部イベント間で生じる内部イベントのリプレイを実施するために、中間アプリケーションは、再始動アプリケーションの独力での実行を可能にし、同時にそのための関連リソースを仮想化し、受動リプレイを実施する。その後、リプレイ・プロセスPRIは、所与のリソースに関して内部イベントを構成する各オペレーションを検出し、当該リソースにロギング済みの動作を採用するように強制し、このロギング時に当該イベントについて格納された結果をリプレイ・アプリケーションに送信する。
図8から図10は、共有リソース、たとえば共有メモリ領域への相互排除アクセスを得るために、再始動アプリケーションの2つのプロセスPB1およびPB2から、セマフォSEM1を要求するオペレーションを含む場合の、内部イベントのリプレイRSBの例を示す。
2次ノードSBでの復元時に、これら2つのプロセスPB1、PB2は、ユーザ・ログを構成するファイルに基づいてリプレイを実施する。それらのリプレイ時に、再始動アプリケーションの実行により、これらそれぞれのプロセスは、内部イベント・ログ「ユーザ・ログ」に含まれるログ・ファイルJSEM1が対応する、単一のセマフォSEM1への呼び出しを実行する。
これらアクセス・オペレーションの検出およびそれらの応答の事前設定は、「メタプロセス」による動的介入の技法を使用して、システムによって提供されアプリケーションによって呼び出されるルーチンのすべてまたは一部のコンテンツで、追加命令を追加することによって実施される。こうした技法は、たとえば特許FR第2843809号に記載されたものとすることができる。特に、これらの命令は、コードがオリジナル・ルーチンからの機能を実施する前に集約され、プロローグを形成するか、またはこのコードの後に集約され、エピローグを形成することが可能である。
図9は、ルーチンR内へのプロローグおよびエピローグの挿入を示し、改定されたルーチンRMが与えられる。この例では、同じ改定済みルーチンRMを使用して、マスタ・アプリケーションのロギングを実施し、さらに再始動アプリケーションのリプレイも実施することができることに留意されたい。
アプリケーションの実行可能ファイルの実行時に、プロセスPは、たとえば、共有メモリ内の所与の領域への相互排除アクセスを得るために所与のセマフォの位置決めを要求する、「POSIX.4」標準からのルーチン「sem_wait」である、ルーチンRを呼び出す一連のコードを実行する。マルチスレッド・アプリケーションの場合、これは、同様の役割を果たす命令、「POSIXスレッド」標準からの「pthread_mutex_lock」を含むことができる。
起動された際、またはアプリケーションの実行可能ファイルの前にシステムにロードされた介入エージェントMETAは、システムのオリジナル・ルーチンRへの呼び出しをインターセプトし、これを改定されたルーチンRMに転送する。この改定済みルーチンは、プロローグを実施する命令が先行し、エピローグを実施する命令が後続する、オリジナル・ルーチンRを実施または呼び出す命令、「sem_wait」を含む。
これらの補足命令は、特に、
プロローグの場合、
if(replay) check(Jsem1)
エピローグの場合、
if(replay) end_check(Jsem1)
else record(result,Jsem1)
のタイプからのアルゴリズムを含むことができる。
命令「if(replay)」は、アプリケーションがリプレイを実施するプロセスにあるか否かを示す条件をテストする。
これに対して(「else」)の場合、これは、アプリケーションが通常通りに実行されているため、マスタ・アプリケーションとして取り扱わなければならないことを意味する。次に、エピローグは、前述のようなレコーディング・プローブである、関数「record(result,Jsem1)」を実行し、内部イベントのロギングに参加し、同時に結果「result」をログ「Jsem1」に格納する。
「Jsem1」ログを使用して、リプレイ時に「sem_wait」ルーチンが再始動アプリケーションによって呼び出される場合、プロローグは、システムのオリジナルの「sem_wait」ルーチンを実施する前に実行される。
図10は、内部イベント・ログ「ユーザ・ログ」に含まれるJSEM1ログから、2つのプロセスPB1、PB2のリプレイを実施するための、この改定済みルーチンRMのオペレーションを示す、時間流れ図である。JSEM1ログにロギングされた各イベントは、当該セマフォSEM1特有の増分シーケンス#OPに従って番号付けされる。これら番号#OPそれぞれに従って、JSEM1ログは、ロギング時に当該JSEM1ログに対応するセマフォを呼び出した、プロセスの識別情報(PID)を含む。
2つのプロセスPB1およびPB2が並行して実行される場合、「sem_wait」機能を使用するそれらそれぞれのSEM1セマフォへの呼び出しは、必ずしも、セマフォのログJSEM1に格納された順序で実行されるとは限らない。
「id2」識別子プロセスPB2が、リプレイ時にSEM1セマフォを呼び出した場合、プロローグはステップ21で、同じプロセス名PB2で命令「check(Jsem1)」を実行する。この関数「check(Jsem1)」は、JSEM1ログ内の、シーケンス番号OPSEM1の現在値に対応する行、すなわち行「#1:id1」を読み取る。
この「チェック」機能は、読み取った値PIDlog、すなわち「id1」と、呼び出し側のPB2プロセスの識別子、すなわち「id2」とを比較する。これらの値が異なることを示す場合、この「チェック」機能は、たとえば連続ループ内での比較であるこの同じステップ21を再実行することによって、呼び出し側PB2プロセスの実行を中断する。
その後、PB1プロセス識別子「id1」がリプレイ時にSEM1セマフォも呼び出した場合、プロローグは「check(Jsem1)」命令も実行するが、今回はステップ11の新しいPB1呼び出し側プロセスの名前である。当該PB1呼び出し側プロセスが実際に、アクティブ・シーケンス内の現在の番号、すなわち値「#1」に対応する行のログに識別子「id1」が格納されたプロセスであることを示す場合、「チェック」機能は、PB1呼び出し側プロセスの実行が続行されることを許可する。
ステップ12では、その後、改定済みルーチンRMがオリジナル・ルーチンRの機能、すなわち「sem_wait」命令を実施し、これにSEM1セマフォが割り当てられ、PB1呼び出し側プロセスの値「id1」を戻す。
ステップ13では、その後エピローグが、PB1呼び出し側プロセスの名前で「end_check(Jsem1)」命令を実行する。当該「end_check」機能は、次に、PB1プロセスの「sem_wait」呼び出しをクローズし、保留されてきたPB2プロセスの実行をブロック解除する。このオペレーションは、特に、このSEM1セマフォのシーケンス番号OPSEM1の増分を含み、これを次の値「#2」へと移行させることができる。
この場合、PB2プロセスによって呼び出された「チェック」機能が、ステップ22で再度実行され、JSEM1ログ「#2:id2」の次の行を読み取り、そのPB2呼び出し側プロセスに改定済みルーチンRMのその実行を続行させる。
ステップ23では、その後、改定済みルーチンRMがオリジナル・ルーチンRの機能、すなわち「sem_wait」命令を実施し、その後、これにSEM1セマフォが割り当てられ、PB2呼び出し側プロセスの値「id2」を戻す。
ステップ24では、その後、エピローグが「end_check(Jsem1)」命令をPB2呼び出し側プロセスの名前で実行し、SEM1セマフォ・シーケンスを再度増分して、リプレイの続行に使用できるようにする。
SEM1セマフォの様々なリプレイ済みプロセス要求割り当ての順序に関係なく、そのJSEM1ログに格納されたとおりの順序で、したがって、マスタ・このロギングを生成したアプリケーションの実行時と同じ順序でのみ、取得可能であることが明らかである。
これらの追加命令は、マスタ・アプリケーション外部のMETAエージェントによって追加され、オペレーティング・システムのいかなる変更もなしにオペレーティング・システムに追加されるため、これらのロギングおよびリプレイ・オペレーションは、マスタ・アプリケーションに対して、システムの既存の要素を変更することなく、トランスペアレントに、かつ煩雑でないように、実施されることが明らかである。
内部イベントが多数であるとした場合、特に、前述の特徴から得られる利点を大幅に損なうことになるいかなる性能低下も避けるために、それらのロギングまたはリプレイあるいはその両方の機能を最適化することが有用である。
2つの外部イベント間で発生する内部イベントのタイプの中で、ほとんどが決定論的である、すなわちその結果が、これらのオペレーションの前のアプリケーションの状態に確実に依存するオペレーションのみを組み込むものと、分類することができる。
他方で、特にマルチタスク・オペレーション時、またはいくつかのノードにわたるそれらの分散時に、いくつかの内部イベントは、アプリケーションまたは1次ノード外部の要素に依存する結果を提供することが可能なオペレーションを含むため、非決定論的タイプである。
非決定論的タイプの内部イベントのみをロギングまたはリプレイすることによって、オペレーション・ノードの過負荷と、マスタ・アプリケーションを信頼可能にするかまたは管理するために、中間アプリケーションの使用によって生じる性能低下とを、制限することが可能である。
図11および図12によって示されるように、ロギングおよびリプレイは、特に、作業が決定論的でない内部イベントに対して、結果のロギングのみ、およびリプレイ時の結果の事前設定のみによって、加速させることができる。
すべてのイベントについて、および特に内部イベント(EVI)について、META介入メカニズム(図9)は、前述のように、オリジナル・ルーチンRの代わりに、要求されたオペレーションを実施する改定済みルーチンRMを呼び出す。この改定済みルーチンRMは、このイベントEVIの発生から、ロギング・プロセスPlogOPまたはリプレイ・プロセスPRIを開始または通知することが可能であり、必要であれば、このイベントの処理を続行するため、または呼び出したP1またはPB1プロセスにこの処理を引き渡すための、合意を待つことが可能な、機能を含む。
これがロギングまたはリプレイを含むかどうかにかかわらず、このイベントEVIの管理は、このイベントの発生に対する反応ステップと、それに続く、コンテンツがこの内部イベントの決定論的または非決定論的性質に依存する追加の管理ステップGC(図11、図12)とを含む。
図11は、内部イベントのロギング・オペレーションを示す。P1プロセスが被ロギング(JOP、図1)実行を介して実行される間に、命令の実行は、SEM1セマフォなどの共有リソースへの内部イベントEVIの適用を実施する。
ステップ1では、ロギングされることになるイベントEVIに対応する改定済みルーチンRMが、ロギング・プロセスPlogOPを通知または開始し、このイベントEVIの発生を検出する。
ステップ2では、イベントEVIに対応する改定済みルーチンRMは、SEM1セマフォ上で、オリジナル・ルーチンRで要求されたオペレーションを実施し、被ロギング・プロセスP1にアドレス指定された結果データDRを受け取るかまたは計算する。
ステップ3では、ロギング・プロセスPlogOPは、P1ロギング・シーケンス内の検出されたイベントEVIの位置に対応する、たとえばSEM1セマフォに割り当てられたシーケンス番号SQを増分させる。
ステップ4では、当該プロセスPlogOPは、検出された内部イベントEVIが決定論的であるか否かを確定するためのテストを実施する。このテストは、たとえばその呼び出し時に改定済みルーチンRMから受け取られたパラメータに、またはこの呼び出しと共に送信される結果データDRの有無に、または、1次OPノードに以前に格納された命令またはイベント識別に、適用することができる。
ステップ5では、検出されたイベントEVIが非決定論的である場合、PlogOPプロセスは、結果データDRを2次ノードのPlogSBロギング・プロセスに送る。これにより、セマフォSEM1に対応するログ・ファイルJSem1内で関連付けられ、先行するロギングされたイベントの結果に従うように、イベントEVIに対応する結果データDRおよびシーケンス番号SQが格納される。ロギング条件に応じて、JSem1ログに格納されたデータを、PlogOPロギング・プロセスによって1次ノード内の永続メディア上のログ・ファイルに、直接格納することもできる。
被ロギング・プロセスP1に関する一連の内部イベントの完了時に、JSem1ログは、シーケンス番号を含むイベントに関するシーケンス番号に関連付けられた、SEM1セマフォによって当該P1プロセスに送られたすべての結果データの順序付けセットを含む。
図12は、JSem1ログに格納され、SEM1セマフォに対応するイベントの、リプレイ・プロセスPRI(図8を参照)によって制御された、受動リプレイ・フェーズRSB(図1)時の、再始動プロセスPB1におけるこの内部イベントEVIに関するリプレイ・オペレーションを示す。PB1プロセスの実行中、およびJSem1ログからのイベントのリプレイ時に、命令を実行することで、SEM1セマフォに適用される非決定論的タイプの内部イベントEVIが実施される。
ステップ1では、ロギングされることになるイベントEVIに対応する改定済みルーチンRMは、リプレイ・プロセスPRIを通知または開始し、このプロセスがこのイベントの発生を検出および識別する。
ステップ2では、イベントEVIに対応する改定済みルーチンRMは、SEM1セマフォ上で、オリジナル・ルーチンRで要求されたオペレーションを実施し、実際のリプレイ結果PRJに対応する結果データを受け取るかまたは計算する。改定済みルーチンRMは、再始動プロセスPB1の実行を中断し、この結果PRJを再始動プロセスPB1に送信するためにリプレイ・プロセスPRIからの信号を待つ。
ステップ3では、リプレイ・プロセスPRIは、関連付けられたシーケンス番号SQiと共に、リプレイに関するJSem1ログ内の次の未使用値RLiを読み取る。
ステップ4では、たとえばSEM1セマフォに割り当てられ、PB1内で検出されたイベントEVIの位置に対応する、シーケンス番号SQを増分するためのプロセスが、シーケンスPB1をリプレイする。
ステップ5では、進行中のリプレイ・イベントEVIがロギング済みイベントに対応するかどうかを確定するために、リプレイ・プロセスPRIが、ログ内の現在のシーケンス番号SQおよび読み取られたシーケンス番号SQiについてテストを実施する。
事前設定ステップ7では、これらのイベントが対応する場合、リプレイ・プロセスPRIは、ログ内の読み取られた結果RLiを改定済みルーチンRMに送り、このルーチンが、オリジナル・オペレーションRからの結果PRJの代わりに、これを格納する。次に改定済みルーチンRMは、この結果RLiを再始動プロセスPB1に戻し、その実行を続行させる。
オプションで、事前設定ステップ7は、リプレイ・プロセスPRIが改定済みルーチンRMから実際のリプレイ結果RRJを受け取り、これと、ロギング時の同じイベントの結果に対応する読み取られた結果RLiとを比較する、ステップ6によって先行される。当該2つの結果RRJおよびRLiが対応する場合、プロセスは改定済みルーチンを直接解放し、これがその結果を再始動プロセスPB1に戻して、その実行を続行させる。
したがって、非決定論的イベントは、忠実かつ正確に記録およびリプレイ可能であり、再始動プロセスPB1に関して、ロギング時のターゲット・プロセスP1のそれに忠実なリプレイ・ランを保証することが明らかである。
一定のイベントのみがロギングまたはリプレイされるため、および、本発明を実施するための補足的内部オペレーションが、ロギングのためのストレージまたは伝送よりもかなり高速であるため、中間アプリケーションINTのオペレーションによるオーバヘッドは低減される。
オプションで、オリジナル・ルーチンRが決定論的なイベントを記録することのみが予想(envisage)される場合、これに対応する改定済みルーチンRMは、ロギングまたはリプレイ・プロセスへのいかなる呼び出しの提供も省略することができる同様に、オリジナル・ルーチンRが非決定論的なイベントを実施することのみが予想される場合、その改定済みルーチンRMは、ロギングまたはリプレイ・プロセスへの系統的呼び出しを含むことができる。したがってロギング時に、決定論的性質をテストするためのステップ4(図11)は、受け取られる呼び出しのタイプによって、または呼び出しが受け取られたという事実によってすら、暗黙的に生成することができる。
アプリケーションのタイプまたはその実行の条件に応じて、所与のタイプの内部イベントが決定論的であるか否かの可能性がある場合、改定済みルーチンRMは、そのプロローグまたはそのエピローグあるいはその両方に、このアプリケーションのタイプまたは実行の条件を評価する命令を含むこともできる。
シーケンス番号SQの使用は、オプションとすることもできる。このケースでは、ロギング・プロセスPlogOP(図11)は、イベントEVIが非決定論的タイプである場合、結果データを記憶することに限定される。その一部について、リプレイ・プロセスRPI(図12)は、次にロギングされた結果RLiの読み取りに限定され、これが非決定論的であるとして検出される次のイベントEVIに対して強制されるものとみなされる。
さらに、最適化のヒューリスティックまたは予測的方法は、すべての内部非決定論的イベントを系統的にロギングしないことができる。この方法は、単独で、または他の最適化方法との組み合わせで、実装することができる。
ロギングおよびリプレイ・オペレーションの時間に関するコストが原因で、特に、ノード内部のオペレーションに関して、ロギング・オペレーションの数を削減することができるのであれば、ある数の追加の内部オペレーションを実施することが有用な場合がある。
このヒューリスティック最適化技法は、結果を予測すること、およびマスタ・アプリケーションのオペレーション時に検出された内部イベントのすべてまたは一部にわたって適用することによって動作する、中間アプリケーションによる、ヒューリスティック圧縮の実施を含む。
オペレーション・ノードへのロギング時に、このヒューリスティック圧縮は、たとえば内部ロギング・プロセスPlogOPによって実施することが可能である。
図13は、このヒューリスティック圧縮CHを使用する、非決定論的イベントのロギングの機能を示す。
P1プロセスがJOP被ロギング・ランを介して実行される間、命令の実行は、SEM1セマフォなどの共有リソースに適用される非決定論的タイプの内部イベントEVInDを実施する。
ステップ1では、ロギングされることになるイベントEVInDに対応する改定済みルーチンRMnDは、ロギング・プロセスPlogOPを通知または開始し、このプロセスが当該イベントEVInDの発生を検出する。
ステップ2では、イベントEVInDに対応する改定済みルーチンRMnDは、SEM1セマフォ上で、オリジナル・ルーチンRnDで予想されるオペレーションを実施し、被ロギング・プロセスP1にアドレス指定された結果データDRを受け取るかまたは計算する。
ステップ3では、プロセスPlogOPは、イベントEVInDの検出によって、含まれるSEM1リソースに対応するロギング・シーケンス番号SQを増分する。
有利なことに、当該シーケンス番号SQは、1次ノードOP内の作業メモリ内に格納される。したがって、その管理は、結果データを2次ノードに送ることに比べて、または永続メディア上のログ・ファイルに格納することに比べて、非常に低いオーバヘッドを表す。
SEM1セマフォおよびそのログJSEM1に関連付けられたこのシーケンス番号SQの増分により、結果データDRの系統的格納が表すことになるオーバヘッドを避けながら、予測機能FHによって正しく予測された非決定論的イベントEVInDの受け渡しの記録を可能にする。
ステップ4では、プロセスPlogOPは、予測結果RPの形で、この内部イベントEVInDの結果の予測を含む、ソフトウェア・オペレーションFHを実施する。好ましいことには、この予測は、被ロギング・プロセスP1の状態またはこのイベントEVInD以前のマスタ・アプリケーションの状態に基づいて、1つまたは複数の決定論的機能によって構成される、決定論的ソフトウェア・プロセスである。
ステップ5では、プロセスPlogOPは、予測結果RPと、検出されたイベントEVInDの実行RnDから出力された実結果DRとを比較する。
ステップ6では、2つの結果DRおよびRPが異なる場合、PlogOPプロセスは、実結果DRと対応するシーケンス番号SQの値とを、2次ノード・プロセスPlogSBに転送し、ここで、それらを関連付けることによって、当該リソースSEM1に対応するログ・ファイルJsem1内の次の行として記憶される。
このステップの際に、当該SEM1リソースをロギングするためのシーケンス番号SQの再初期化を予想することが可能である。この場合、シーケンス番号SQは、結果がロギングされた最後のイベント以降に正しく予測されたイベントの数を表す。
被ロギング・プロセスP1に関する一連の内部イベントの完了時に、JSem1ログは、シーケンス番号を含むイベントに関するシーケンス番号に関連付けられた、SEM1セマフォによって当該P1プロセスに送られ、予測機能FHによって正しく予測されなかった、すべての結果データの順序付けセットを含む。
内部イベントのロギングがこうしたヒューリスティック最適化を使用して実施された場合、中間アプリケーションは、2次ノードでのリプレイの際にヒューリスティック圧縮解除を実施する。このヒューリスティック圧縮解除は、圧縮に使用されたものと同一の予測を使用し、ヒューリスティック圧縮でのロギング時と同じイベントに適用される。
図14は、SEM1セマフォに適用されるログJSem1に基づいて、内部リプレイ・プロセスPRI(図8を参照)によって制御される、再始動プロセスPB1の受動リプレイにおける、このヒューリスティック圧縮解除DHを使用した、非決定論的イベントに関するリプレイ・オペレーションを示す。
JSem1ログからのイベントのリプレイ時に、命令の実行は、SEM1セマフォに適用する非決定論的タイプの内部イベントEVInDを実施する。
ステップ1では、リプレイされるイベントEVInDに対応する改定済みルーチンRMnDは、リプレイ・プロセスPRIを通知または開始し、このプロセスがこのイベントEVInDの発生を検出および識別する。
ステップ2では、イベントEVInDに対応する改定済みルーチンRMnDは、SEM1セマフォ上で、オリジナル・ルーチンRnDで要求されたオペレーションを実施し、実際のリプレイ結果PRJに対応する結果データを受け取るかまたは計算する。改定済みルーチンRMnDは、リプレイ・プロセスPB1の実行を中断する。次に、当該結果PRJを再始動プロセスP1に転送するため、およびその実行を継続させるために、リプレイ・プロセスPRIからの信号を待つ。
ステップ3では、プロセスPRIは、セマフォSEM1に対応するシーケンス番号SQの値を読み取り、これを増分する。
ステップ4では、内部リプレイ・プロセスPRIは、このシーケンス番号SQと、この同じリソースSEM1に対応するログ・ファイルJSem1に格納されたものからまだリプレイされていない、次のシーケンス番号SQiとを比較する。
ステップ5では、これらのシーケンス番号SQおよびSQiが対応する場合、内部リプレイ・プロセスPRIは、このシーケンス番号にSQiについてこのログに格納された結果RLiを読み取り、これを検出されたイベントEVInDによって戻される強制結果RFとして格納する。次に、内部リプレイ・プロセスPRIは、ログJSem1内の行SQiによって表されるイベントがリプレイされた旨の事実を格納し、次に検出されるイベントの処理のためにこの同じログの次の行SQjを活動化させる。
このステップでは、当該SEM1リソースをリプレイするためにシーケンス番号SQの再初期化を予想することが可能である。
ステップ6では、これらのシーケンス番号SQおよびSQiが対応しない場合、内部リプレイ・プロセスPRIは、予測結果RPJの形の、この内部イベントのロギング時に生成されたものと同じ結果予測を含む、ソフトウェア・オペレーションFHを実施する。内部リプレイ・プロセスPRIは、その後、この予測の結果RPJを、検出されたイベントEVInDによって戻される強制結果RFとして格納する。
ステップ8では、内部リプレイ・プロセスPRIは、強制結果RFを改定済みルーチンRMnDに転送し、内部イベントEVInDによって戻される実際のリプレイされた結果RRJに代わって、再始動プロセスPB1に賦課(impose)される。その後、改定済みルーチンは、再始動プロセスPB1にその実行を続行させる。
オプションで、この事前設定に先行して、これら2つの結果RRJおよびRFを比較するためのテスト・ステップ7を実行し、これらの結果が対応する場合は再始動プロセスPB1での動作を避けることができる。
予測最適化のこの方法で使用される順序付けデータSQの識別は、前述のもの(図11および図12)と異なる変数で構成可能であるか、またはこれらと併せて編成および処理可能であることに留意されたい。
したがって、すべての非決定論的イベントの結果をロギングすることなく、非決定論的イベントを忠実かつ正確に記録およびリプレイできることが明らかである。この場合、ロギング時にターゲット・プロセスP1のそれに忠実な再始動プロセスPB1のリプレイ・ランの実行を保証しながら、これらのロギングおよびリプレイ・オペレーションを最適化することが可能である。
ロギング・オペレーションとノード内部での単純な計算オペレーションとの間の速度の差を考えると、たとえ使用される予測機能が非常に高い成功率を持たない場合であっても、このヒューリスティック最適化技法は有用な可能性がある。この差が大きい場合、50%未満の予測成功率でも有用な最適化を可能にすることができる。
このヒューリスティック最適化技法は、単一のイベントまたは内部イベントのグループをロギングした後、これらをリプレイするために、同じ機能が使用される場合、いくつかの異なる予測機能を使用することも可能である。使用する予測機能の選択は、たとえば、知識データベースまたは規則から始まる、アプリケーションの状態またはその環境に従って実行することができる。この変更は、中間アプリケーションによって格納されたロギング・データに格納することができる。このヒューリスティック最適化技法は、ロギング時にその成功率を評価することによって、およびこの成功率の値またはその変化に基づいて当該機能の変更を開始することによって、自動的に適応するように(auto-adaptively)使用することも可能である。
このヒューリスティック最適化技法で使用される予測機能の一例に、異なるクライアントからの内部イベントの順序に基づいた、内部イベントの発生順序の予測が含まれる。
図15および図16は、それぞれ3つの異なるクライアントによって起動される3つのタスクTa、Tb、Tcを実行する、それぞれ「a」、「b」、および「c」と格付けされた識別子を備える、3つのプロセスProcA、ProcB、ProcCに参加する、外部および内部イベントの発生を示す。これら様々なタスクは、それぞれ、たとえば第1の外部イベントEa1、Eb1、Ec1と、第2の外部イベントEa2、Eb2、Ec2とを含む。これら第1と第2の外部イベントの間に、これらタスクそれぞれが、2つの内部非決定論的イベントの開始を含む。図15および図16では、タスクTaに関する連続する内部イベントはIa1およびIa2と呼ばれ、タスクTbのそれらはIb1およびIb2と呼ばれ、タスクTcのそれらはIc1およびIc2と呼ばれる。これらの内部イベントIa1からIc2は、互いに異なるか、または、たとえば単一セットの共有メモリ領域へのロック割り振りなどの、単一の決められたリソースを含むことができる。
ほぼ同時のタスク時、および特にそれらが同様または共通の部分を有するか、または同様の実行時間を有する、あるいはその両方である場合、予測機能は、中間内部イベントIa1、Ib1、Ic1の発生順序が、それらに先行する外部イベントの発生順序と同じになるという予測からなる。
マスタ・アプリケーションが実行している間、オペレーション・ノードOP上での第1の外部イベントEa1、Eb1、Ec1の発生順序は、たとえば内部ロギング・プロセスPlogOPで、中間アプリケーションによって記録される。たとえばこの外部イベントの順序は、これら外部イベントに関連付けられたプロセスの一連の識別子または一連の値「a b c」を含む。
このリソースに関する新しい内部イベントが検出されるごとに、予測機能は、この内部イベントの結果、すなわちこのリソースにわたってロックを取得することになるプロセスの識別子、すなわち、これを要求したばかりのもの、を予測する。次にこの予測された結果は、このリソースにわたってロックを取得した最後のプロセスの識別子と、外部イベントのこの順序とを比較することによって計算される。
したがって予測機能は、それぞれが破線で示され、その結果が右端に示されている、予測Pe1からPe6のセットを作成する。
図15は、内部イベントが外部イベントの順序に従う場合に、これらの内部イベントの各発生に対して行われる予測の値を示す。外部イベントの順序「a b c」から、および発生した最後の内部イベントから、予測機能は、6つの文字のみで示される一連の値「a b c a b c」を形成する予測を行う。ヒューリスティック最適化のコンテキストでは、内部ロギング・プロセスPlogOPは、内部イベントが予測機能によって正しく予測されているため、これら内部イベントについてのロギング・データを転送するための要件を持たない。
図16は、内部イベントが外部イベントの順序に従わず、「b」を識別するためのプロセスPrBのタスクTbが、他の2つのタスクよりも高速に実行されている場合に、これらの内部イベントの各発生に対して行われる予測の値を示す。外部イベントの順序「a b c」から、および発生した最後の内部イベントから、予測機能は、一連の値「a b c c a b」を形成する予測を行う。これは、2つの予測Pe3およびPe6が偽として示され、これによって内部ロギング・プロセスPlogOPが2つの発生時にロギング・データを転送することを表す。したがってこのロギング・データは、不正確として示された第3の予測Pe3の完了時の、伝送L1における値「c」、および次に、同様に不正確として示された第6の予測Pe6の完了時の、伝送L2における値「c」を含む。
これらの不正確な予測Pe3およびPe6にもかかわらず、このヒューリスティック最適化は、内部ロギング・プロセスPlogOPが、不在時に発生した6つではなく2つの伝送L1およびL2のみに影響を与えることが可能であることが明らかである。6つのうち4つの伝送を節減することで、この最適化技法を実施するために必要な内部計算およびオペレーションの場合よりもかなり大量の作業時間を表し、したがって特にオペレーション・ノードでの性能をかなり向上させることができる。
さらに、オペレーティング・システムによる標準実施によって、非決定論的動作を生成することになるいくつかの内部イベントでは、セマンティクスの変更による最適化技法を使用することが可能である。この技法は、決定論的動作を与えるために、ノードにおけるこうしたイベントの実施に対する改定を含む。中間アプリケーションは、オペレーション・ノードおよび2次ノードにおいてこの改定を同一にし、それによってこれら変更された内部イベントの結果を予測可能にする。実施に対するこの改定は、ルーチンRを実施するオリジナル・イベントを、このイベントに対して改定済み動作を実施する改定済みルーチンRMに置き換える、「メタプロセス」を通じた介入技法によって動的に実行されることになる。この改定を実施するために使用される技法は、プロローグおよびエピローグにレコーディング・プローブを追加するための前述の技法(図9を参照)と同様であるが、改定済みルーチンに関する中央部分のコードへの改定を含むことができる。この実施改定は、マスタ・アプリケーションに対してトランスペアレントに生成され、オペレーティング・システムの既存の要素は変更しない。これらの改定済みルーチンのうちの1つをマスタ・アプリケーションで、または少なくとも所定のおよび格納された実行間隔にわたって使用することによって、当該変更されたイベントの結果を格納する必要なしに、マスタ・アプリケーションの進化をロギングすることが可能である。同じ改定済みルーチンを、リプレイ・アプリケーションを実行する場合と同じ間隔にわたって使用することで、マスタ・アプリケーションの再現性を維持し、同時に、ロギングおよびリプレイの性能を向上させることができる。
この改定済み動作は、たとえば、オリジナル・ルーチンがいくつかの異なる結果を送信できた所与の状況から、改定済みルーチンが、オリジナル・ルーチンによって提供可能であった、マスタ・アプリケーションおよびオペレーティング・システムによって予想される結果のみを提供するように計画することによって、オリジナルの動作と同じ仕様に準拠し、これに完全に適合できるように設計される。
セマンティック変更による最適化のこの技法は、再始動アプリケーションの復元時にリプレイできるように、その結果をオペレーション・ノードにログしなければならない、非決定論的内部イベントの数を削減することができる。
異なる当事者のオペレーションおよび対話の一例が、図22に図示される。
たとえばシステム・ソフトウェア内の処理エージェントは、結果DRをプロセス、たとえば被ロギング・プロセスP1に転送する、オペレーションを実施する。特に内部の多くのオペレーションまたはイベントについて、当該オペレーションは、決定要素(determinant)と呼ばれるリソースのセットRDetと比べて本質的に決定論的な、オペレーション・プロセスTOによって実施される。
プロセスP1がアクセス可能なリソースからいくつかを、このプロセスP1の状態についての知識から再現可能リソースRReprと呼ぶことができる。当該再現可能リソースは、特に、状態が排他的にこれに依存するリソースを含む。
処理エージェントATのオペレーションにおいて、TOオペレーションの処理は、たとえば当該再現可能リソースからのDERデータのみを使用することから、プロセスP1の再現可能リソースRReprに関して決定論的である、処理部分TDを含むことができる。
オペレーション・プロセスTOが、プロセスP1の再現可能リソースRReprに含まれないSEM1からの個人データを使用する処理の他の部分を含む場合、これはこのTnD部分の結果とって一般的であるため、すべてのTO処理は、これを呼び出す処理P1に関して決定論的でない。
こうした状況において、このセマンティック変更技法は、この改定の結果として生じるオペレーションが、再現可能リソースRReprと比べて決定論的であるように、処理エージェントの動作またはこれが使用または生成するデータを改定するために、管理エージェントAGを使用することから構成される場合がある。
この管理エージェントは、TOオペレーティング・プロセスの内部オペレーションを改定するために、機能修正処理TMFを使用する。
当該同一プロセスP1に対して非決定論的ソースを構成することができる結果DRに対する変動を補償するために、決定要素リソースRDetから出力されるがプロセスP1に関して再現可能(RRepr)ではない、入力データDEを使用することもできる。こうした補償は、入力データDEを補償済み入力データDECに修正するTC1によって、または結果データDRを補償済み結果データDRCに修正するTC2によって、実施することができる。
この管理エージェントAGは、グローバル処理ATおよびAGの効率を最適化するために、1つまたは複数のセマンティック変更パラメータPCSに応じて、実行した修正TMF、TC1、TC2を選択または調整(regulate)することもできる。ロギングJOPとリプレイRSBとの間の再現性を維持するために、このセマンティック変更パラメータPCSに対する変動が、再現可能リソースRReprからのデータによってのみ決定されること、またはその変動がロギング時にログUL、KLに格納され、リプレイRSB時に同じ方法で読み取りおよび適用されることで、十分である。
この動作の変化は、特に、所与のリソースについて競合するいくつかのプロセスの管理に影響を与える局面に関する可能性がある。
図17および図18は、Unix(登録商標)タイプの環境において「read(読み取り)」ルーチンを使用することにより、受け取ったメッセージを読み取るために、オペレーションを決定論的にするための、セマンティック変更によるこの最適化技法の使用例を示す。
その標準実装では、アプリケーションによって開始された「read」ルーチンが、入力チャネルICH内のメッセージを読み取り、これらを当該アプリケーションに転送するために、バッファ・メモリBのゾーンを使用する。メッセージは、システム内で連続データの形で受け取られる、これらのデータは、着信した際に入力チャネルを形成するメモリ・ゾーン内に格納される。その構成によれば、「read」オペレーションは異なるサイズのバッファを使用することができるが、このバッファは全体として入力チャネルでの各読み取りに使用される。
この例では、アプリケーションは、入力チャネルICHを介して連続的に着信する3つのメッセージM1、M2、M3を受け取るために、サイズ「50」のバッファBに対して一連の「read」オペレーションを使用する。これら3つのメッセージは、それぞれ「20」、「30」、および「50」に等しいデータ・ボリュームを表す。しかしながら、一方ではデータが入力チャネル内で着信する速度、および他方では読み取りオペレーションの速度が、ロギングまたはリプレイの段階では予測不可能なように、互いに異なる場合がある。
図17は、オリジナルの「read」ルーチンを使用して同じ3つのメッセージを読み取るための、2つの異なる可能なシナリオを示す。
最初のシナリオSCAでは、サイズ「20」の第1のメッセージM1からのデータのみが着信したため、第1の読み取りRA1が行われる。バッファBは完全には満たされず、オペレーションはコンテンツ「M1」およびデータ・サイズ「20」に対応する結果を戻す。次に、第2のメッセージM2のみが着信した後に、第2の読み取りRA2が行われ、コンテンツ「M2」およびデータ・サイズ「30」に対応する結果を戻す。次に、第3のメッセージM3の着信後、第3の読み取りRA3が行われ、コンテンツ「M3」およびデータ・サイズ「50」に対応する結果を戻す。たとえば、アプリケーションによって受け取られたデータのサイズについては、この第1のシナリオSCAは「20、30、および50」に等しい3つの結果のセットを戻す。
第2のシナリオSCBでは、同じ第1および第2のメッセージM1、M2がすでに着信したとして第1の読み取りRB1が行われ、コンテンツ「M1、M2」およびデータ・サイズ「50」に対応する結果を戻す。次に、第3のメッセージM3の到着後、第2の読み取りRB2が行われ、コンテンツ「M3」およびデータ・サイズ「50」に対応する結果を戻す。アプリケーションによって受け取られたデータのサイズについては、この第2のシナリオSCBは、同じメッセージの読み取りに関する「50、50」に等しい2つの結果のセットを戻す。
したがってこれら2つのシナリオは、一方は「20、30、50」および他方は「50、50」の、異なる結果を戻す。ここで「read」オペレーションを実施する標準的なシステム・ルーチンは、マスタ・アプリケーションのロギングならびに再始動アプリケーションのリプレイについて、アプリケーションの観点から非決定論的なイベントを実施する。
図17と同じ状況で、図18は、オリジナルの「read」ルーチンの代わりに改定済み「readM」ルーチンを使用することによって得られる、単一のシナリオScUを表す。
この例では、改定済みルーチンは受け取られる各メッセージの実際の長さを認識し、たとえバッファBが満杯でなく、入力チャネルICH内で読み取るデータが依然として存在する場合であっても、単一のメッセージに対応するデータのみを入力チャネルICH内で読み取る。マスタ・アプリケーションのロギングの場合、改定済みルーチンは、これら同じメッセージの受け取りに対応する外部イベント・ロギング・メカニズム、たとえばIPlogOPモジュールを使用して、メッセージM1、M2、M3の実際の長さを認識する。再始動アプリケーションが復元中のリプレイの場合、改定済みルーチンは、これら同じメッセージの受け取りに対応する外部イベント・リプレイ・メカニズム、たとえばIPlogSBモジュールを使用して、メッセージM1、M2、M3の実際の長さを認識する。
このようにして、これら2つの異なる着信シナリオSCA、SCBは、アプリケーションによって受け取られるデータのサイズに関して「20、30、50」に等しい3つの結果の単一セットの発生時に、読み取りオペレーションに対して単一の動作を与える。
同様に、バッファBの他のサイズについて、異なる結果セットを生成するオリジナルの「read」ルーチンが可能である。
したがって、バッファ・サイズ「20」の場合、以下の結果、たとえば「20、20、20、20、20」または「20、20、10、20、20、10」を得ることができる。
バッファ・サイズ「100」の場合、以下の結果、たとえば「20、30、50」または「50、50」または「20、80」、または「100」を得ることができる。
他方で、各バッファ・サイズについて、改定された「readM」ルーチンは単一の結果セットしか与えることができない。
したがって、バッファ・サイズ「20」の場合、得られる結果セットは「20、20、10、20、20、10」となる。
バッファ・サイズ「100」の場合、得られる結果セットは「20、30、50」となる。
したがって改定された「readM」ルーチンは、こうした読み取りオペレーションに対応する内部イベントのための決定論的動作を実施する。
図19から図21は、キューイング・ループを実施するアプリケーション・プロセスによって開始され、特にいくつかのファイル記述子に関連付けられたいくつかの入力/出力(I/O)チャネルからデータを受け取ることが可能な、決定論的な多重化読み取りオペレーションを行うために使用される、セマンティック変更によるこの最適化技法の他の使用例を示す。この例は、Unix(登録商標)タイプの環境における「select(選択)」ルーチンの使用に基づくものであるが、「poll(ポーリング)」ルーチンの使用にも適用可能である。
この例では、2つの異なるチャネルICH1、ICH2にアドレス指定された、それぞれ「a」、「b」、および「c」に等しいコンテンツを備えた3つのメッセージM1、M2、M3が、ノード・オペレーティング・システムOSによって受け取られる。
この例は、特に、第1のチャネルICH1による「ストリーム」の形でのデータ、および第2のチャネルICH2によるTCPタイプのメッセージまたはパケットの形でのデータの、受け取りに適用可能である。オペレーティング・システムOSでは、2つのTCPパケットと、それに続く「ストリーム」パケットが、それぞれ「a」、「b」、および「c」に等しいコンテンツを備えた3つの連続するメッセージM1、M2、M3として受け取られる。
これらをその作業負荷に従って受け取る場合、オペレーティング・システムOSは、チャネルICH1、ICH2内のこのデータを、それらのタイプに応じて処理および分配する。その実行中の所与の瞬間に、アプリケーションは、「select」ルーチンを呼び出して、メッセージを受け取る際に介することができる異なるチャネルに対して読み取りオペレーションを開始する。
その標準的な実施において、「select」ルーチンは、第1のチャネルICH1内の、およびそれに続く第2のチャネルICH2内の、キューイング・データを読み取り、これを即時に、それらを読み取った順序でアプリケーションに転送する。
ここで、一方ではオペレーティング・システムOS内でデータが着信する速度、オペレーティング・システムによるその処理速度、および入力チャネル内でのその着信速度、ならびに他方では、一連の読み取りオペレーションのアプリケーションによる実行速度は、ロギングまたはリプレイの段階では予測できないようにそれぞれ異なる可能性がある。
図19に示された第1のシナリオSCAでは、アプリケーションは、2つの入力チャネルICH1、ICH2内に3つのメッセージがすでに着信しているため、第1の瞬間IAで「select」ルーチンによって多重化読み取りを開始する。「select」ルーチンはデータを読み取る場合、第1に、第1のチャネルICH1内に含まれる3番目のメッセージを読み取り、次に、第2のチャネルICH2内の最初の2つのメッセージM1、M2を読み取る。次に「select」ルーチンは、このデータを読み取り順に転送するため、読み取りオペレーションはデータ・セット「c、a、b」を含む結果を生成する。
図20に示された第2のシナリオSCBでは、アプリケーションは、第2の入力チャネルICH2内に最初の2つのメッセージしか着信していないため、第1の瞬間IBで「select」ルーチンによって多重化読み取りを開始する。「select」ルーチンはデータを読み取る場合、第2のチャネルICH2内の最初の2つのメッセージM1、M2のみを読み取り、このデータを読み取り順に、すなわちセット「a b」で、アプリケーションに転送する。次の読み取り時に、第3のメッセージM3が第1のチャネルICH1内に着信した後、「select」ルーチンはこの第3のメッセージを読み取り、これをアプリケーションに転送する。当該第2のシナリオSCBでは、オリジナルの「select」ルーチンによる読み取りオペレーションはデータ・セット「a、b、c」を含む結果を生成する。
これら2つの異なるシナリオSCA、SCBは、一方については「c、a、b」、他方については「a、b、c」という、異なる結果を戻す。ここで、「select」オペレーションを実施する標準システム・ルーチンは、マスタ・アプリケーションのロギングならびに再始動アプリケーションのリプレイについて、アプリケーションの観点から非決定論的なイベントを実施する。
図19および図20と同じ状況について、図21は、オリジナルの「select」ルーチンの代わりに改定された「selectM」ルーチンを使用することによって得られる、単一の結果を表す。
この例では、改定済みルーチンは、メッセージがオペレーティング・システムOS内に着信する順序を認識し、着信した順序でメッセージを読み取る。さらに、あいまいさのリスクを低減させるために、改定済みルーチンは毎回単一のファイル記述子のみを送信する。改定済みルーチンは、たとえば入力チャネルICH1、ICH2内のメッセージのコンテンツを検査することによって、あるいはロギングまたはリプレイ・データから、メッセージが着信する順序に関する情報を取得することができる。
このようにして、これら2つの異なる着信シナリオSCA、SCBは、多重化読み取りオペレーションに単一の動作、結果として「a b c」に等しい3つの結果の単一セットを与える。
決定論的にするための標準の環境で、決定論的でなかった内部イベントの動作を実施する一定のルーチンのオペレーション方法をこのように改定することにより、非決定論的イベントの数が削減されることが明らかである。この改訂が、マスタ・アプリケーションでのロギング時と、再始動アプリケーションでのリプレイ時に、まったく同様に適用される場合、リプレイの完了時に、マスタ・アプリケーションの状態に対応する状態にあるか、当該マスタ・アプリケーションとの満足できるオペレーションの連続性を有する、再始動アプリケーションを、取得可能にするためにロギングしなければならないイベントの数が削減される。
したがって、セマンティック変更によるこの最適化技法は、ロギングおよびリプレイ・オペレーションならびに中間アプリケーションの性能を向上させられることが明らかである。
実際、このセマンティック変更の技法が適用されるルーチンに従って、およびそれらに対して実行される改定の性質に従って、当該ルーチンにおける性能に、そのオリジナルの動作と比べてわずかな低下が発生する可能性がある。しかしながら、ロギング・オペレーションの速度低下を考えると、ロギングすることになるオペレーションの数に関して生じる節減により、中間アプリケーション内のマスタ・オペレーションの全体性能が大幅に向上できることになる。
この説明で、中間アプリケーションのメカニズムは、主に、オペレーション・ノードまたは2次ノードのユーザ・スペース内で実行されるプロセスまたはモジュールによって実施されることがわかる。これは特に、本明細書では、参照「Plog」(図2)、「IPlogOP」および「IPlogSB」(図3)、「PlogOP」および「PlogSB」(図4)、「PRE」(図7)および「PRI」(図8)、「META」(図9)の下の中間アプリケーションINT(図1)で識別される、外部または内部の、ロギングまたはリプレイ・プロセスを意味する。
これとは対照的に、システム・スペース内で実行されるメカニズムは、とりわけ介入モジュール、またはアプリケーション・モジュールから管理される機能を追加または改定するためのモジュールを備える。これは特に、本明細書では、参照「DISP」(図3)、および「ipfilter」(図7)の下で識別される、モジュールを意味する。一定のこれらカーネル・モジュールは、必要に応じて、アプリケーション・モジュールからロードまたはアンロードすることも可能である。
中間アプリケーションの実行および「存続(life)」がユーザ・スペース内で生じるという事実により、異なるノードのオペレーティング・システムとの対話を制限することができる。この特徴は、特に、配置および管理における柔軟性、オペレーティング・システムに対するある種の独立性、およびそれらの任意の異機種混合性を提供し、タイプまたは解放の非互換性のリスクを制限し、関連しないノードのシステム・スペースにおいて、またはそれほどではなくとも当該中間アプリケーションの配置において、介入を制限することができる。このオペレーティング・システムに対する独立性は、システム・スペースの既存の要素への過大な介入を避けること、ならびに、これらのオペレーティング・システムおよびそれらを管理する組織の政策への指定および変更に対するある種の商業的および技術的な独立性を維持することによって、開発時間およびコストを制限することもできる。
前述の中間アプリケーションは、ユーザまたはクラスタの管理者に、他のアプリケーションに関するサポートまたは管理サービスを提供するために、様々な方法で、および様々な組み合わせに従って、実施可能である。こうしたサービスは、特に、「ミドルウェア」のネットワーク・ソフトウェア製品の形で取得することが可能であり、クラスタにおける、オリジナル版(「レガシー」)の1つまたは複数のアプリケーションの管理、最適化、または信頼性の向上を可能にすると同時に、たとえばクラスタの性質に適合される、柔軟性あるいは追加のセキュリティまたは耐障害性の機能を提供する。
こうした中間アプリケーションの使用は、とりわけ、これらのアプリケーションによってクライアントに提供されるサービスを確保する形を取ることができる。したがって各アプリケーションは、マスタ・アプリケーションとして扱うこと、および、必要に応じてそのクライアントに対するマスタ・アプリケーションを置き換えるために、再始動アプリケーションの形で復元することが可能である。
所与のノードのすべてまたは一部で実行中のアプリケーションによって提供されるサービスは、オリジナルのノードを完全に解放することによって、動的にまたはオンデマンドで、1つまたは複数の他のノードに移行することもできる。したがって、保守、試行、アップグレード、または置換のいずれであっても、このノード上で望まれるすべてのハードウェアまたはソフトウェアの介入を実施することが可能となる。
こうした中間アプリケーションを使用して、特に、ネットワークにおける能力、可用性、またはその地理的状況、たとえばそのクライアントまたは使用されるデータからの遠隔性に従って、異なるハードウェアの使用を最適化するために、特に、異なるノード間で作業負荷を分散する(負荷平準化)のための機能を備える、「ミドルウェア」タイプの環境を実装することができる。
本発明はこれまで説明してきた例に限定されるものではなく、本発明の枠組みを逸脱することなく多数の改定が実行可能であることは明白である。
本発明を実施する中間アプリケーションの機能アーキテクチャを示す記号図である。 オペレーション・ノードにイベントをロギングするための機構を要約した記号図である。 オペレーション・ノードおよび2次ノード上のそのバックアップからの、外部イベントのロギングのオペレーションを示す、記号図である。 オペレーション・ノードおよび2次ノード上のそのバックアップからの、内部イベントのロギングのオペレーションを示す、記号図である。 一連の内部イベントからのロギング・データの集約伝送のためのメカニズムの、オペレーション・バージョンを示す図である。 一連の内部イベントからのロギング・データの集約伝送のためのメカニズムの、オペレーション・バージョンを示す図である。 2次ノードで再始動アプリケーションを更新する間の、被ロギング外部イベントのリプレイ機能を示す記号図である。 2次ノードで再始動アプリケーションを更新する間の、内部イベントのリプレイ機能を示す記号図である。 当該ルーチンの実行に補足命令を挿入するための、システム・ルーチンへの呼び出し時の介入技法の使用を示す記号図である。 ロギング時と同じ進行を取得するためにシステム・ルーチンへの補足命令の追加を使用する、2つの同時プロセスに関する内部イベントの進行を示す時間図である。 非決定論的イベントのみを処理するような内部イベントの、ロギング・オペレーションを示す図である。 非決定論的イベントのみを処理するような内部イベントの、リプレイ・オペレーションを示す図である。 ヒューリスティック圧縮による内部ロギングの最適化を示す図である。 ヒューリスティック圧縮解除による内部ロギングの最適化を示す図である。 オペレーション・ノード上のいくつかの同時プロセスにおける、2つの外部イベント間での内部イベントの異なるスケジューリング時の、ヒューリスティック圧縮による、非決定論的内部イベントのロギングの最適化の一例を示す記号図である。 オペレーション・ノード上のいくつかの同時プロセスにおける、2つの外部イベント間での内部イベントの異なるスケジューリング時の、ヒューリスティック圧縮による、非決定論的内部イベントのロギングの最適化の一例を示す記号図である。 「Unix(登録商標)」タイプのシステムにおける、「read」ルーチンによる読み取りオペレーションの非決定論を示す記号図である。 動的セマンティック変更によって決定論的となった、同じルーチンの一動作を示す記号図である。 「Unix(登録商標)」タイプのシステムにおける「選択」および「ポーリング」ルーチンによる、オペレーション・システムの2つの競合チャネルからのアプリケーションのデータ受け取りオペレーションの非決定論を示す、記号図である。 「Unix(登録商標)」タイプのシステムにおける「選択」および「ポーリング」ルーチンによる、オペレーション・システムの2つの競合チャネルからのアプリケーションのデータ受け取りオペレーションの非決定論を示す、記号図である。 動的セマンティック変更によって決定論的となった、同じルーチンの一動作を示す記号図である。 セマンティック変更によって使用される対話を示す図である。

Claims (19)

  1. コンピュータ(SB)上でターゲット・プロセス(PB1)と呼ばれる少なくとも1つのアプリケーション・プロセスの実行のための方法であって、
    ロギング・データ(JSem1)によって表される、被ロギング・オペレーションと呼ばれる少なくとも1つのオペレーションのターゲット・プロセスによって形成されるリプレイ(RSB)を実施し、
    前記方法は、
    前記被ロギング・オペレーションに対応する被リプレイ・オペレーション(EVI)と呼ばれるオペレーションを開始し、前記被リプレイ・オペレーション(EVI)によって得られる結果を表す少なくとも1つのリプレイ結果データ(RRJ)を前記ターゲット・プロセス(PB1)に戻す、リプレイ命令と呼ばれる少なくとも1つのプログラム命令を、前記ターゲット・プロセスによって実行するステップと、
    前記リプレイ結果データ(RRJ)の代わりに前記ロギング・データから発行された強制データを前記ターゲット・プロセスが採用すること、および、前記被リプレイ・オペレーションに対して被ロギング結果(RLi)と呼ばれる所与の結果を表すこと、を含む強制と呼ばれる処理を、再始動プロセス外部のソフトウェア・エージェント(PRI)によって実施するステップと、
    前記リプレイ命令またはそれが開始する前記被リプレイ・オペレーション(EVI)のインターセプト・ステップ(META)であって、前記インターセプト・ステップ(META)が、被ロギング結果(RLi)を表すロギング・データを含むかどうかを検証するために、前記ロギング・データ(JSem1)をテストするステップをさらに含み、前記被ロギング結果は前記被リプレイ・オペレーション(EVI)に対応し、前記強制と呼ばれる前記処理は前記ログがそのような被ロギング結果(RLi)を含む場合にのみ実行される、前記インターセプト・ステップ(META)と、
    一連の被ロギング・オペレーションのリプレイ(RSB)を実施することによって、少なくとも1つのターゲット・プロセス(PB1)を実行するために、一連の被ロギング・オペレーションを表す、ログ(UL、JSem1)と呼ばれるロギング・データの順序付けセットを使用するステップと
    を含み、前記被ロギングと呼ばれるプロセス(P1)の実行の少なくとも一部で発生した、すべての被決定論的内部イベント(EVInD)のリプレイ(RSB)を、少なくとも1つのターゲット・プロセス(PB1)によって実行する、前記方法。
  2. 少なくとも1つの実行可能ファイル(EXE)内の少なくとも1つのプログラム実行ポインタを移動させることによって、前記ターゲット・プロセス(PB1)が前記リプレイ命令を自発的に実行する、請求項1に記載の方法。
  3. 前記被リプレイ・オペレーションが、一方で決定論的オペレーションを、および他方で非決定論的オペレーションを含み、
    前記強制と呼ばれる前記処理は前記決定論的オペレーションのうちの少なくとも1つに適用されない、
    請求項1に記載の方法。
  4. 被ロギングと呼ばれるプロセス(P1)の実行時に実行される、少なくとも1つの所与のタイプのすべてのオペレーションを表すログ(JSem1、UL)を使用し、
    前記ログは、前記被ロギング・プロセスのリプレイ(RSB)を実行するターゲット・プロセス(PB1)を実行できるように設計されている、
    請求項1または2に記載の方法。
  5. 所与のリソース(SEM1)に関する、被ロギングと呼ばれるプロセス(P1)の実行時に実行される、少なくとも1つの所与のタイプのすべてのオペレーションを表すログ(JSem1、UL)を使用し、
    前記ログは、前記所与のリソース(SEM1)に関する前記被ロギング・プロセスのリプレイ(RSB)を実行するターゲット・プロセス(PB1)を実行できるように設計されている、
    請求項1〜4のいずれか一項に記載の方法。
  6. 前記ロギング・データ(JSem1)をテストするステップが、前記ログ(JSem1)が被ロギング結果(RLi)を表すデータを含む、前記被ロギング実行でまだリプレイされていない第1のオペレーションのポジション(SQi)に関して比較した、前記ターゲット・プロセス(PB1)の実行での前記被リプレイ・オペレーションのポジション(SQ)に関する、請求項1〜のいずれか一項に記載の方法。
  7. 再始動プロセスと呼ばれる少なくとも1つのターゲット・プロセス(PB1、PB2)によって、前記被ロギング・オペレーションのリプレイを実行するために、被ロギング・リソース(SEM1)と呼ばれる共有リソースに適用される少なくとも1つの所与のタイプのすべてのオペレーションを表すログ(JSem1)を使用し、
    前記再始動プロセスは、前記被ロギング・リソースに対応するターゲット・リソース(SEM1)と呼ばれるリソースにアクセスする、
    請求項1〜のいずれか一項に記載の方法。
  8. ターゲット・プロセス(PB2)によって少なくとも1つの被リプレイ・オペレーションに適用され、共用リソース・タイプの少なくとも1つのターゲット・リソース(SEM1)の属性に関するプリエンプティブ要求を含み、
    前記強制と呼ばれる前記処理が、
    前記リソースに関してまだリプレイされていない次の被ロギング・オペレーション(#1)の前記被ロギング結果(id1)が、前記ターゲット・プロセス(PB2)に対する属性に対応するかまたは対応しないかを検証する、テスト・ステップと、
    前記テストの結果が否定である場合は必ず、前記ターゲット・プロセス(PB2)を保留し、肯定結果が得られるまで前記テストを反復するステップと
    を含む、請求項に記載の方法。
  9. 前記リプレイ命令が、前記実行可能ファイル(EXE)外部のオリジナル(R)と呼ばれるルーチンへの呼び出しを含み、
    前記インターセプト・ステップ(META)が、前記オリジナル・ルーチンの代わりに被修正(RM)と呼ばれるルーチンへの呼び出しを含み、
    前記被修正ルーチンが強制処理を実行または開始する、
    請求項1〜のいずれか一項に記載の方法。
  10. 前記被修正ルーチン(RM)が、ソフトウェア・システム(SBS)内で実行される少なくとも1つの命令を含み、
    前記ターゲット・プロセス(PB1、PB2)のコンピュータのユーザ・メモリ・スペース(SBU)内で実行され、前記ターゲット・プロセスによるリプレイの実施を管理する、リプレイ・エージェント(PRI)と呼ばれる少なくとも1つのソフトウェア・エージェントへの呼び出しを含む、
    請求項に記載の方法。
  11. 前記被修正ルーチン(RM)が、これを呼び出した命令が、リプレイ(RSB)のコンテキストで実行されるか否かを検証するためのテスト命令を含み、
    前記テストは前記リプレイ・エージェント(PRI)への呼び出しに影響を与える、
    請求項または10に記載の方法。
  12. 前記被ロギング・プロセス(PI)と呼ばれる少なくとも1つのアプリケーション・プロセスの機能の管理を実行し、
    前記方法が、
    ロギング・データ(UL、KL)の形で、再始動ポイントと呼ばれる所与のポイントから中断と呼ばれるポイントまでの、前記被ロギングと呼ばれるプロセス(P1)の実行時に発生した少なくとも1つの所与のタイプのイベントを表すデータを、記録(JOP)および格納するステップと、
    前記被ロギングと呼ばれるプロセス(P1)の前記再始動ポイント状態に対応する状態の再始動プロセス(PB1)から、前記ロギング・データ(UL、KL)からの前記イベントを前記再始動プロセスによってリプレイ(RSB)するステップであって、従って前記再始動プロセスを前記中断ポイントでの前記被ロギング・プロセスの状態に対応する状態にする、前記リプレイ(RSB)するステップと
    を含む、請求項1〜11のいずれか一項に記載の方法。
  13. 前記ロギング・データ(UL、KL)が、再始動ポイントと呼ばれるその実行における所与のポイント以降に前記被ロギングと呼ばれるプロセス(P1)で発生する、1つまたは複数の所与のタイプのすべてのイベントを表し、
    前記リプレイ(RSB)するステップが、被ロギング・プロセスの前記リプレイ・ポイント状態に対応する状態から始まる前記再始動プロセス(PB1)に適用され、
    被リプレイ・シーケンスは、前記再始動プロセスを、前記被ロギング・シーケンス後の前記被ロギング・プロセスの状態に対応する状態に復元する、
    請求項12に記載の方法。
  14. 外部リプレイ・エージェント(PRE)によって開始された外部イベントの発生に応答して、前記再始動プロセス(PB1)が、内部イベントの少なくとも1つの被ロギング・シーケンスの前記リプレイ(RSB)を実行する、請求項12または13に記載の方法。
  15. 前記再始動ポイントでの前記被ロギングと呼ばれるプロセス(P1)の状態が、再始動ポイント・データ(EPR)の形で取り込み(CAP)および格納され、これを使用して、前記再始動プロセスが、前記リプレイ・フェーズ(RSB)を適用する前の前記再始動ポイント状態に復元(RES)される、請求項1214のいずれか一項に記載の方法。
  16. 被追跡アプリケーション(AOP)と呼ばれるアプリケーションの実行の監視を実行し、前記監視が、前記被追跡アプリケーションの少なくとも1つのプロセス(P1)に適用され、
    前記方法が、
    前記被追跡アプリケーションの所与の状態から、前記被追跡アプリケーションの実行において調査済みシーケンスを構成する複数の一連の連続する被ロギング・シーケンスのロギング(JOP)を開始するステップと、
    残りの前記被ロギング・シーケンスの制御された実行を生成する、制御された一連のリプレイ・ステップ(RSB)を生成し、制御リズムに従って調査済みシーケンスのリプレイを生成するステップと
    を含む、請求項1215のいずれか一項に記載の方法。
  17. クラスタと呼ばれる、通信マルチコンピュータ・アーキテクチャの、オペレーション・ノード(OP)と呼ばれる少なくとも1つの1次ノードで実行される、被確実化アプリケーション(AOP)と呼ばれる第1のアプリケーションの機能の確実化を実施し、
    前記確実化は、スタンバイ・ノードと呼ばれる第2のクラスタ・ノードにおける、スタンバイ・アプリケーション(ASB)と呼ばれる第2のアプリケーションの、前記再始動ポイントでの前記被確実化アプリケーションの状態に対応する状態への復元(RES)を含み、
    前記確実化は、
    前記開始ポイント以降に前記被確実化アプリケーション(AOP)の実行をロギング(JOP)し、ロギングされたイベントを、前記オペレーション・ノード(OP)外部の少なくとも1つのログ・ファイル(UL、KL)に格納するステップと、
    前記オペレーション・ノード(OP)内の障害を検出するステップと、
    被確実化アプリケーション(AOP)にロギングされた前記イベントを前記スタンバイ・アプリケーション(ASB)でリプレイ(RSB)するために、前記ログ・ファイルを使用し、最後にロギングされたイベント後に、前記被確実化アプリケーションの状態に対応する状態に前記スタンバイ・アプリケーションを復元するステップと
    をさらに含む、請求項1316のいずれか一項に記載の方法。
  18. 協働するコンピュータのネットワークを備えているシステムであって、請求項1〜17のいずれか一項に記載の方法を実装する少なくとも1つのノード(OP、SB)を備えている、前記システム。
  19. 前記ネットワーク内で実行される少なくとも1つのアプリケーション(AOP)の機能を管理するために、ミドルウェア・タイプのアプリケーション(INT)を使用する、請求項18に記載のシステム。
JP2007551678A 2005-01-21 2006-01-20 アプリケーション・プロセスにおいて内部イベントをリプレイするための非侵入的方法およびこの方法を実装するシステム Expired - Fee Related JP5519909B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
FR0500613 2005-01-21
FR0500613A FR2882449A1 (fr) 2005-01-21 2005-01-21 Procede non intrusif de rejeu d'evenements internes au sein d'un processus applicatif, et systeme mettant en oeuvre ce procede
PCT/EP2006/050345 WO2006077249A1 (en) 2005-01-21 2006-01-20 Non- intrusive method for replaying internal events in an application process, and system implementing this method

Publications (2)

Publication Number Publication Date
JP2008529113A JP2008529113A (ja) 2008-07-31
JP5519909B2 true JP5519909B2 (ja) 2014-06-11

Family

ID=34953259

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007551678A Expired - Fee Related JP5519909B2 (ja) 2005-01-21 2006-01-20 アプリケーション・プロセスにおいて内部イベントをリプレイするための非侵入的方法およびこの方法を実装するシステム

Country Status (8)

Country Link
US (1) US20080046696A1 (ja)
EP (1) EP1839153B1 (ja)
JP (1) JP5519909B2 (ja)
CN (1) CN101107598B (ja)
AT (1) ATE409328T1 (ja)
DE (1) DE602006002872D1 (ja)
FR (1) FR2882449A1 (ja)
WO (1) WO2006077249A1 (ja)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2882448B1 (fr) * 2005-01-21 2007-05-04 Meiosys Soc Par Actions Simpli Procede de gestion, de journalisation ou de rejeu du deroulement d'un processus applicatif
US9928071B1 (en) * 2008-05-02 2018-03-27 Azul Systems, Inc. Enhanced managed runtime environments that support deterministic record and replay
US8402318B2 (en) * 2009-03-24 2013-03-19 The Trustees Of Columbia University In The City Of New York Systems and methods for recording and replaying application execution
US8250405B2 (en) * 2010-05-27 2012-08-21 International Business Machines Corporation Accelerating recovery in MPI environments
US8924788B2 (en) * 2010-06-28 2014-12-30 Intel Corporation Replaying architectural execution with a probeless trace capture
US9189308B2 (en) 2010-12-27 2015-11-17 Microsoft Technology Licensing, Llc Predicting, diagnosing, and recovering from application failures based on resource access patterns
US9317297B2 (en) * 2012-09-27 2016-04-19 Intel Corporation Replay execution of instructions in thread chunks in the chunk order recorded during previous execution
JP6491207B2 (ja) 2013-08-16 2019-03-27 インテュイティブ サージカル オペレーションズ, インコーポレイテッド 異種の装置間のロギング及び再生のためのシステム及び方法
US9098359B2 (en) * 2013-10-10 2015-08-04 Microsoft Technology Licensing, Llc Durable execution of long running applications
US9886363B2 (en) 2015-03-27 2018-02-06 International Business Machines Corporation Identification of storage performance shortfalls
EP3121724A1 (en) * 2015-07-24 2017-01-25 Thomson Licensing Method for monitoring a software program and corresponding electronic device, communication system, computer readable program product and computer readable storage medium
US11188336B2 (en) * 2015-12-28 2021-11-30 Qualcomm Incorporated Replay of partially executed instruction blocks in a processor-based system employing a block-atomic execution model
US9858151B1 (en) 2016-10-03 2018-01-02 International Business Machines Corporation Replaying processing of a restarted application
US10353753B1 (en) 2017-03-29 2019-07-16 Amazon Technologies, Inc. Optimizing startup time for event-driven functions
CN108196963B (zh) * 2017-12-29 2021-11-16 中国电力科学研究院有限公司 基于自适应释放的确定性重放方法

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5214780A (en) * 1990-03-23 1993-05-25 Sun Microsystems, Inc. Synchronized journaling system
US5363503A (en) * 1992-01-22 1994-11-08 Unisys Corporation Fault tolerant computer system with provision for handling external events
JPH0950365A (ja) * 1995-08-10 1997-02-18 Oki Electric Ind Co Ltd 命令履歴の符号化装置
JPH09212385A (ja) * 1996-02-02 1997-08-15 Mitsubishi Electric Corp 並列プログラムデバッグ装置
US6182086B1 (en) * 1998-03-02 2001-01-30 Microsoft Corporation Client-server computer system with application recovery of server applications and client applications
US6449733B1 (en) * 1998-12-07 2002-09-10 Compaq Computer Corporation On-line replacement of process pairs in a clustered processor architecture
AU2002327599A1 (en) * 2001-08-29 2003-03-18 Analog Devices, Inc. Generic serial port architecture and system
FR2843210B1 (fr) * 2002-08-02 2005-10-14 Meiosys Procede de migration de connexions dans une architecture multi-ordinateurs, procede pour realiser une continuite de fonctionnement mettant en oeuvre ce procede de migration, et systeme multi-ordinateurs ainsi equipe.
JP4125169B2 (ja) * 2003-04-02 2008-07-30 キヤノン株式会社 ログ取得方法

Also Published As

Publication number Publication date
EP1839153B1 (en) 2008-09-24
ATE409328T1 (de) 2008-10-15
US20080046696A1 (en) 2008-02-21
EP1839153A1 (en) 2007-10-03
CN101107598B (zh) 2010-05-19
FR2882449A1 (fr) 2006-08-25
DE602006002872D1 (de) 2008-11-06
CN101107598A (zh) 2008-01-16
JP2008529113A (ja) 2008-07-31
WO2006077249A1 (en) 2006-07-27

Similar Documents

Publication Publication Date Title
JP5519909B2 (ja) アプリケーション・プロセスにおいて内部イベントをリプレイするための非侵入的方法およびこの方法を実装するシステム
JP5258019B2 (ja) アプリケーション・プロセス実行の範囲内での非決定論的オペレーションを管理、ロギング、またはリプレイするための予測方法
US7613597B2 (en) Non-intrusive method for simulation or replay of external events related to an application process, and a system implementing said method
US8904361B2 (en) Non-intrusive method for logging of internal events within an application process, and system implementing this method
US8539434B2 (en) Method for the management, logging or replay of the execution of an application process
US7568131B2 (en) Non-intrusive method for logging external events related to an application process, and a system implementing said method
US7840940B2 (en) Semantic management method for logging or replaying non-deterministic operations within the execution of an application process
US10599551B2 (en) Automatically detecting distributed concurrency errors in cloud systems
JP4866864B2 (ja) マルチ・プロセッサ環境において共有されるリソースへのアクセスを管理する方法およびプログラム
Ghormley et al. GLUix: a global layer unix for a network of workstations
US7536587B2 (en) Method for the acceleration of the transmission of logging data in a multi-computer environment and system using this method
US20180165177A1 (en) Debugging distributed web service requests
Goldstein et al. Ambrosia: Providing performant virtual resiliency for distributed applications
Lin et al. Tracing function dependencies across clouds
US7533296B2 (en) Method for optimizing the transmission of logging data in a multi-computer environment and a system implementing this method
Mohamed et al. MidCloud: an agent‐based middleware for effective utilization of replicated Cloud services
Lea et al. Towards new abstractions for implementing quorum-based systems
Cooper Pilgrim: A debugger for distributed systems
Furlong et al. The case for determinism on the edge
Batista et al. Managing asynchronous workloads in a multi‐tenant microservice enterprise environment
Miller et al. The tool daemon protocol (TDP)
Beck et al. Event Filter Summary Document
Van Tendeloo Research Internship II: Distributed and parallel DEVS simulation
Boyd III Virtualizing operating systems for distributed services on networked workstations
Arntzen A client for chain replication

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080905

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111206

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120224

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20120224

RD12 Notification of acceptance of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7432

Effective date: 20120224

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20120228

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20120904

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121120

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20121120

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20121205

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20130315

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20130624

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140220

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20140220

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20140320

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20140320

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140404

R150 Certificate of patent or registration of utility model

Ref document number: 5519909

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees