以下、実施の形態を説明する。説明は実施例1と実施例2とに分けて行う。実施例1では実施形態の詳細について説明を行った後、更に3つの具体的なケースを想定してケース毎に実施態様を説明する。実施例2では、実施例1で説明した内容を踏まえて、多数決同期システムに新たな計算機ノードを加える場合における処理を説明する。尚、図面においては、同じ要素には同じ参照番号を用いる。
<全体構成(図1)>
図1は多数決同期システムの全体構成の一例を示す図である。多数決同期システムは一つの同期システム1(フォルトトレランスコンピュータとも呼ぶ)と複数の端末2および外部ネットワーク3により構成される。同期システム1は複数台の計算機ノード100と内部ネットワーク4により構成されている。
同期システム1は外部ネットワーク3を経由して端末2から外部入力パケット500を受信する。端末2から送信される外部入力パケット500の内、因果関係のある複数の外部入力パケット500はその送信順序が守られて同期システム1に到着する。なぜならば、このような外部入力パケット500については、同期システム1が外部入力パケット500を受信した後、当該外部入力パケット500に対する応答を同期システム1から端末2が受け取った後にはじめて、次の外部入力パケット500が端末2から同期システム1に送信されるからである。その他の外部入力パケット500については、端末2における送信順序と同期システム1における受信順序は必ずしも一致しない。従って、順序を守って処理する必要がある外部入力パケット500に関しては、外部入力パケット500に順序を示す情報(タイムスタンプやシーケンス番号)が付与されている。
尚、外部入力パケット500は端末2から同期システム1へマルチキャスト方式で送信され、これに対する応答(処理結果等)は同期システム1から端末2へマルチキャスト方式で返信される。また、同期システム1で実行されるアプリケーションは内部状態(オープン状態のファイル、ネットワークコネクション等)を持たないものとする。
計算機ノード100はメモリ101、プロセッサ102、二次記憶装置103、外部通信インタフェース104(図中、インタフェースをI/Fと略記)、ノード間通信I/F105のハードウェアを備え、これらが内部バス等の通信路によって接続されている。計算ノード100を制御するソフトウェアプログラムは、アプリケーション200、基盤ソフトウェア300、オペレーティングシステム400から構成されている。さらに基盤ソフトウェア300は外部入力パケット記憶部301と入出力同期部310に大別され、入出力同期部310は処理状態記憶部311、ノード間通信処理部312、入力同期部313、決定入力記憶部314、入出力決定処理カウンタ315、再同期検知部316、計算機ノード構成管理テーブル317、再同期要求部318、プログラム処理部319、出力同期部320、決定出力管理テーブル321から構成される。同期システム1内の複数の計算機ノード100は、いずれも同様のハードウェア/ソフトウェア構成を有する。図1では3台の端末2A、2B、2Cと3台の計算機ノード100A、100B、100Cの例が示されているが、特に台数は限定されない。またアプリケーション200の個数や種類の数は限定されるものでは無い。
端末2と計算機ノード100は外部ネットワーク3を介して接続される。計算機ノード100側では、外部ネットワーク3はノード間通信I/F105に接続される。同期システム1内の各計算機ノード100A、100B、100Cは、ノード間通信I/Fに接続された内部ネットワーク4を介して接続される。
端末2は、外部ネットワーク3を通じて同期システム1に要求を送信し、同期システム1が当該要求を処理して結果を端末2に返信する。同期システム1内の各計算機ノード100は、外部ネットワーク3及び外部通信I/F104を通じて受信した端末2からの要求を、内部ネットワーク4とノード間通信I/F105を介して他の計算機ノード100にも送信し、他の計算機ノードと協調して動作して処理し、処理結果を端末2に返信する。
計算機ノード100内の二次記憶装置103はアプリケーション200、基盤ソフトウェア300、オペレーティングシステム400を格納している。プロセッサ102は二次記憶装置103からアプリケーション200、基盤ソフトウェア300、オペレーティングシステム400をメモリ101への読み込んで展開し、基盤ソフトウェア300やアプリケーション200、オぺレーションシステム400を実行すると共に、外部通信I/F104やノード間通信I/F105からの割込みも処理する。以降、アプリケーション200やオペレーションシステム400や基盤ソフトウェア300(その構成要素を含む)が実行する処理として説明される動作は、実際にはプロセッサ102がこれらのソフトウェアを実行することによって行われる。外部通信I/F104は外部ネットワーク3を通じて端末2とのパケットの送受信を行う。ノード間通信I/F105は内部ネットワーク4を通じて計算機ノード100間のパケットの送受信を行う。
メモリ101内に展開されたオペレーティングシステム400は基盤ソフトウェア300やアプリケーション200の動作を制御する。基盤ソフトウェア300の外部入力パケット記憶部301と入出力同期部310は異なるタスクとして動作し、アプリケーション200は必要に応じてプログラム処理部319から実行される。
外部入力パケット記憶部301は外部入力パケット管理テーブル550を保有し、外部通信I/F104が受信した外部入力パケット500を外部入力パケット管理テーブル550に格納する。外部入力パケット500の詳細は図2と共に後述する。外部入力パケット管理テーブル550の詳細は図3と共に後述する。
処理状態記憶部311は計算機ノード処理状態テーブル700を保有し、計算機ノード100の処理状態が記録される。計算機ノード処理状態テーブル700の詳細は図4と共に後述する。
ノード間通信処理部312は計算機ノード100間の通信処理を制御し、ノード間通信パケット600の送受信する。ノード間通信パケット600の詳細は図10と共に後述する。
入力同期部313は処理対象入力パケット選定開始処理S113および処理対象入力パケット選定処理S114を実効する。処理対象入力パケット選定開始処理S113の詳細は図12と共に後述する。処理対象入力パケット選定処理S114の詳細は図13〜図16と共に後述する。
決定入力記憶部314は決定入力管理テーブル800および決定済み入力管理テーブル810を保有し、入力同期部313にて決定され、入出力同期部310が処理する外部入力パケット500の情報を保持する。決定入力管理テーブル800の詳細は図7と共に後述する。決定済み入力管理テーブル810の詳細は図8と共に後述する。
入出力決定処理カウンタ315は計算機ノード100が実行する処理段階のカウンタ値を保持する。他の計算機ノード100との間で入出力決定処理カウンタ315を比較することで、計算機ノード100が実行する処理の周期ずれを識別する。
再同期検知部316は複数の計算機ノード100が協調動作している同期システム1に新しく参加しようとする計算機ノード100や、一度協調動作している同期システム1から排除されたが再参加を試みている計算機ノード100を検出して、受入れ処理を行う。再同期検知部316は再同期検知処理S111を実行する。再同期検知処理S111の詳細は図25と共に後述する。
計算機ノード構成管理テーブル317は処理対象入力パケット選定処理S114を実行し、選定入力パケット処理S115の処理対象となる外部入力パケット500の決定に寄与する計算機ノード100情報を保持するテーブルである。計算機ノード構成管理テーブル317の詳細は図6と共に後述する。
再同期要求部318は複数の計算機ノード100が協調動作している同期システム1に新しく参加しようとする計算機ノード100や、一度協調動作している同期システム1から排除されたが再参加を試みている計算機ノード100が実行する処理である。サイ同期要求部318は再同期処理S118を実行する。再同期処理S118の詳細は図25と共に後述する。
プログラム処理部319は端末2からの処理要求に応じてアプリケーション200を選択、起動を実行する処理である。選定入力パケット処理S115を実行する。選定入力パケット処理S115の詳細は図17と共に後述する。
出力同期部320は、各計算機ノード100のアプリケーション200の実行結果を用いて多数決判定を行い、各計算機ノード100についてリーダーとモニターの役割分けを行い、端末2への実行結果送信処理を行う。出力同期部320は実行結果決定処理S116を実行する。実行結果決定処理S116の詳細は図18〜図24と共に後述する。
決定出力管理テーブル321は実行結果決定処理S116に寄与した計算機ノード100の情報を保持するテーブルである。決定出力管理テーブル321の詳細は図9と共に後述する。
<外部入力パケット(図2)>
図2は外部入力パケット500の構成の一例を表す図である。端末2は同期システム1へ外部入力パケット500を送信することで要求命令を伝える。
送信元情報501は送信元端末2を識別する情報である。シーケンス番号502は送信元端末2から発せられた複数の外部入力パケット500各々を一意に識別する情報である。シーケンス番号502の値は、送信元端末2の識別子を含んだ値にすることによって、端末2間で重複しないようにすることができる。送信タイムスタンプ503は送信元端末2が外部入力パケット500を発信した時刻である。順列処理要否フラグ504は送信元端末2が送信した複数の外部入力パケット500間に一連の順序性が存在することを識別する情報である。順列処理ブロック数505は前述の一連の順序性が存在する複数の外部入力パケット500の個数を示す。順列処理開始番号506は前述の一連の順序性が存在する複数の外部入力パケット500の内、先頭に位置する外部入力パケット500のシーケンス番号502である。コンテンツ507はアプリケーション200の実行に関係する情報であるアプリ識別子508とパラメタ509から構成される。アプリ識別子508は計算機ノード100内で実行されるアプリケーション200を指定する情報であり、パラメタ509にはアプリケーション200に引渡されるパラメタ情報である。
<外部入力パケット管理テーブル(図3)>
図3は外部入力パケット管理テーブル550の構成の一例を示す図である。外部入力パケット管理テーブル550は外部入力パケット記憶部301内に保持され、計算機ノード100が受信した外部入力パケット500を格納するテーブルである。外部入力パケット管理テーブル550に格納される外部入力パケット500数は特に限定されるものではない。
番号551は格納した外部入力パケット500を一意に特定する管理番号である。外部入力パケット管理テーブル550には、受信した外部入力パケット500が改変されることなく格納されるため、番号551以外の列(要素)は外部入力パケット500の要素と同様である。
<計算機ノード処理状態テーブル(図4)>
図4は計算機ノード処理状態テーブル700の構成例を示す図である。計算機ノード処理状態テーブル700は処理状態記憶部311内に保持され、計算機ノード100の実行状態情報を格納する。計算機ノード処理状態テーブル700は処理状態識別子701、付加情報702、Penalty703、処理状態704の列から構成される。
処理状態識別子701と処理状態704は常に有効な値を保持する列であるが、付加情報702とPenalty703は処理状態識別子701に格納される値により有効な場合と無効な場合がある。
処理状態識別子701は計算機ノード100の処理状態を識別する値である。処理状態識別子として「REJOIN-WAIT」、「REJOIN-REQ」、「REJOIN-ACK」、「JOINED」、「INPUT」、「OUTPUT」がある。
「REJOIN-WAIT」は当該計算機ノード100が他の計算機ノード100からの再同期要求を待っている状態を表す。この状態の時、処理状態704にも「REJOIN-WAIT」が設定されるが、付加情報702とPenalty703は有効な値を保有しない(行705)。
「REJOIN-REQ」は当該計算機ノード100が再同期要求を行っている状態を表す。この状態の時、処理状態704にも「REJOIN-REQ」が設定されるが、付加情報702とPenalty703は有効な値を保有しない。(行706)
「REJOIN-ACK」は当該計算機ノード100が他の計算機ノード100からの再同期要求を受領した状態を表す。この状態の時、処理状態704にも「REJOIN-ACK」が設定されるが、付加情報702とPenalty703は有効な値を保有しない。(行707)
「JOINED」は当該計算機ノード100が行った再同期要求に対して他の計算機ノード100からの返答を取得し、取得した情報を当該計算機ノード100に反映した状態を表す。この状態の時、処理状態704にも「JOINED」が設定されるが、付加情報702とPenalty703は有効な値を保有しない。(行708)
「INPUT」は当該計算機ノード100が「入力同期」を行っている状態を表す。「入力同期」とは、計算機ノード100の外部入力パケット管理テーブル550に格納されている外部入力パケット500をアプリケーション200で処理するためにおこなわれる処理である。具体的には、各計算機ノード100間で多数決判定を行い、処理対象の外部入力パケット500と、アプリケーション200を実行する計算機ノード100を決定する処理である。この状態の時、付加情報702とPenalty703が有効になる。付加情報702には入力同期ステップ710情報が格納される。入力同期ステップ710は、外部入力パケット管理テーブル550から取得する外部入力パケット500の個数である。Penalty703は、例えば初期値として「0」、初期値以外の値として「1」のいずれかをとることができ、「1」である場合には当該計算機ノード100が他の計算機ノード100との間で行われる入力同期処理に一時不参加であったことを表す。処理状態704には「BEGIN」もしくは「END」が保持される。「BEGIN」は当該計算機ノード100が「入力同期」を実行している状態を表し、「END」は「入力同期」が完了した状態を表す(行709)。
「OUTPUT」は当該計算機ノード100が「出力同期」を行っている状態を表す。「出力同期」とは、他の計算機ノード100との間でアプリケーション200の処理結果を用いて多数決判定を行い、処理結果を確定すると共に、端末2へ結果を出力する役割を担う「リーダー」計算機ノード100と「リーダー」の結果出力状態を監視する役の「モニター」計算機ノード100とを決定して、端末2へアプリケーション200の処理結果を出力する処理である。この状態の時、付加情報702は有効な値となり、「OUTPUT」、「LEADER」、「VOTER」の何れかの値を保持する。
付加情報702が「OUTPUT」の時は、当該計算機ノード100はアプリケーション200の処理結果を他の計算機ノード100との間で共有する処理を行う段階であることを表し、共有処理が実行中の間は処理状態704に「BEGIN」が保持され、共有処理が完了すると処理状態704に「END」が保持される。またPenalty703は、例えば初期値として「0」、初期値以外の値として「1」をとる有効な列となり、「1」である場合には当該計算機ノード100が出力同期処理に一時不参加であったことを表す。
付加情報702が「LEADER」の時は、当該計算機ノード100は「リーダー」役と「モニター」役の計算機ノード100の決定処理及び他の計算機ノード100との間で決定結果を共有する処理を実行する状態であることを表し、処理を実行中の間は処理状態704に「BEGIN」が保持され、役割決定処理が完了すると処理状態704に「END」が保持される。
付加情報702が「VOTER」の時は、当該計算機ノード100は「リーダー」または「モニター」役としてアプリケーション200の処理結果を出力する処理を行う状態であることを表し、「リーダー」役で出力処理を行う場合は処理状態704に「LEADER」が保持され、「モニター」役で出力処理を行う場合は処理状態704に「MONITOR」が保持される(行711)。
<計算機ノード処理状態遷移図(図5)>
図5は計算機ノード100の処理状態遷移の一例を示す図である。図5中のREJOIN-WAIT705、REJOIN-REQ706、REJOIN-ACK707、JOINED708、INPUT709、OUTPUT711は計算機ノード処理状態テーブル700の処理状態識別子701に設定される識別子と一致する。
REJOIN-WAIT706処理状態の計算機ノード100は、REJOIN-ACK707処理状態に遷移した後INPUT709処理状態に遷移する、もしくは直接INPUT709処理状態に遷移する。REJOIN-REQ705処理状態の計算機ノード100はJOINED708処理状態に遷移した後、INPUT709処理状態に遷移する。INPUT709処理状態の計算機ノード100はOUTPUT711処理状態もしくはREJOIN-REQ705処理状態に遷移する。OUTPUT711処理状態の計算機ノード100はREJOIN-WAIT706処理状態もしくはREJOIN-REQ705処理状態に遷移する。
<ノード間通信パケット(図6)>
図6はノード間通信パケット600の構成の一例を示す図である。ノード間通信パケット600は計算機ノード100の間で情報通信を行う際に使用される通信パケットである。ノード間通信パケット600は計算機ノード識別子601、入出力決定処理カウンタ602、計算機ノード処理状態603、計算機ノード処理状態個別詳細情報604から構成される。
計算機ノード識別子601は同期システム1内で計算機ノード100を一意に識別する情報であり、当該ノード間通信パケット600を作成した計算機ノード100の識別子が設定される。入出力決定処理カウンタ602は当該ノード間通信パケット600を作成した計算機ノード100の入出力決定処理カウンタ315の値である。計算機ノード処理状態603は計算機ノード処理状態テーブル700と同様の構成を有しており、当該ノード間通信パケット600を作成した計算機ノード100の処理状態を保持する。計算機ノード処理状態個別詳細情報604は特定の構成を持たず、ノード間通信パケット600を送信する時々の用途に応じた情報が設定される。
<計算機ノード構成管理テーブル(図7)>
図7は計算機ノード構成管理テーブル317の構成の一例を示す図である。計算機ノード構成管理テーブル317は入力同期処理に寄与した計算機ノード100の情報を保持するテーブルである。計算機ノード構成管理テーブル317は入力同期時計算機ノード総数317Aと計算機ノード識別子601、入出力決定処理カウンタ602、計算機ノード処理状態603の列から構成される。
計算機ノード識別子601、入出力決定処理カウンタ602、計算機ノード処理状態603の列には、ノード間通信パケット600内の同名の列と同様の情報が格納される。計算機ノード構成管理テーブル317は、複数計算機ノード分の情報を保持することが可能で、計算機ノード構成管理テーブル317に情報が登録されている計算機ノード100の総数は入力同期時計算機ノード総数317Aに保持される。
<決定入力管理テーブル(図8)>
図8は決定入力管理テーブル800の構成の一例を示す図である。決定入力管理テーブル800は入力同期処理の結果、アプリケーション200の処理対象に決定された外部入力パケット500の情報を保持する。決定入力管理テーブル800は決定入力総数801と、外部入力パケット500と同様の構成である送信元情報501列、シーケンス番号502列、送信タイムスタンプ503列、順列処理要否フラグ504列、順列処理ブロック数505列、順列処理開始番号506列、コンテンツ507内のアプリ識別子508列、パラメタ509列から構成される。外部入力パケット500の情報は複数個保持することが可能で、保持数は決定入力総数801に保持される。
<決定済み入力管理テーブル(図9)>
図9は決定済み入力管理テーブル810の構成の一例を示す図である。入力同期処理では、ある外部入力パケット500を取得した計算機ノード100が同期システム1内で多数派を占める場合に、当該外部入力パケット500を取得していない少数派となった計算機ノード100にも当該外部入力パケット500情報を共有させて当該計算機ノード100のアプリケーション200にも当該外部入力パケットに基づく処理を実行させる。このとき少数派の計算機ノード100は、アプリケーション200実行後に当該外部入力パケット500を外部ネットワーク3を介して自ら取得する可能性がある。従って、外部入力パケット500の二重処理を避けるために、処理対象から外したい外部入力パケット500を決定済み入力管理テーブル810に記録する。
決定済み入力管理テーブル810は決定済み入力総数811と、外部入力パケット500と同様の構成である送信元情報501列、シーケンス番号502列、送信タイムスタンプ503列、順列処理要否フラグ504列、順列処理ブロック数505列、順列処理開始番号506列、コンテンツ507内のアプリ識別子508列、パラメタ509列から構成される。外部入力パケット500の情報は複数個保持することが可能で、保持数は決定済み入力総数811に保持される。
<決定出力管理テーブル(図10)>
図10は決定出力管理テーブル321の構成例を示す図である。決定出力管理テーブル321は出力同期処理に寄与した計算機ノード100の情報を保持するテーブルである。決定出力管理テーブル321は出力同期時計算機ノード総数321Aと順位321B、ノード間通信パケット600内に含まれる列と同一である計算機ノード識別子321C、入出力決定処理カウンタ321D、計算機ノード処理状態321Eと、計算機ノード処理結果321Fから構成される。順位321Bは複数の計算機ノード100から「リーダー」役になる計算機ノード100が選択される際の優先順位を意味し、計算機ノード処理結果321Fはアプリケーション200の実行結果を保持する。
決定出力管理テーブル321は複数の計算機ノード100の情報を保持することが可能であり、保持数は出力同期時計算機ノード総数321Aに保持される。
以下、同期システム1が外部入力パケット500を外部入力パケット管理テーブル550に取り込むための処理、及び取り込んだ外部入力パケット500に対する一連の処理を図11を用いて説明する。取り込んだ外部入力パケット500に対する一連の処理の内、処理対象外部入力パケットの選定を開始する処理を図12を用いて、処理対象外部入力パケットの選定を行う処理を図13、図14、図15、図16を用いて、選定した外部入力パケットに対してアプリケーション200を起動する処理を図17を用いて、アプリケーション200の実行結果を決定する処理を図18、図19、図20、図21、図22、図23、図24を用いて説明する。更に計算機ノード100の再同期検知処理、再同期処理について図25、図26を用いて説明する。なお、各フローチャートの説明ではステップを「S」と略記する。
<基盤ソフトウェア処理のフローチャート(図11)>
図11は基盤ソフトウェア処理の一例を示すフローチャートである。基盤ソフトウェア300は外部入力パケット記憶部301と入出力同期部310に大別され、それぞれ異なるタスクとしてオペレーティングシステム400から起動され、両者は独立して動作する。図11は、外部入力パケット記憶部301と入出力同期部310、それぞれによって実行される処理のフローチャートを示す。
外部入力パケット記憶部301は、初めに外部通信I/F104による外部入力パケット500の受信を検出する(S101)。
次に外部入力パケット記憶部301は受信した外部入力パケット500の情報を外部入力パケット管理テーブル550に格納する(S102)。
外部入力パケット保存処理(S102)が終了すると、外部入力パケット記憶部301は再び外部入力パケット受信(S101)の実行に移り、前述の処理を繰返す。
一方入出力同期部310は、初めに再同期要求を行っている他の計算機ノード100の検出と当該計算機ノード100についての同期処理を行う。詳細は図25、図26と共に後述する(S111)。
次に入出力同期部310は、処理状態記憶部311の計算機ノード処理状態テーブル700の処理状態識別子701に「INPUT」値を設定する。同時に、付加情報702には入力同期ステップ710としての初期値を設定し、Penalty703にも初期値を設定する。入力同期ステップ710の初期値には例えば「2」以上の値、一方Penalty703の初期値として例えば「0」値が与えられる(S112)。
次に入出力同期部310は、処理対象となる外部入力パケット500の選定を開始できるか否かを判別する処理を行う。詳細は図12と共に後述する(S113)。
次に入出力同期部310は、処理対象となる外部入力パケット500を選定する処理を行う。詳細は図13及び図14、図15、図16と共に後述する(S114)。
次に入出力同期部310は、アプリケーション200を実行し、処理対象入力パケット選定処理S114で選定した外部入力パケット500の処理を行う。詳細は図17と共に後述する(S115)。
次に入出力同期部310は、アプリケーション200による外部入力パケット500の処理結果を計算機ノード100間で共有し、端末2へ処理結果を出力する「リーダー」役と出力状態を監視する「モニター」役の計算機ノード100を決定し、「リーダ」役の計算機ノード100は端末2へ処理結果を出力する。詳細は図18及び図19、図20、図21、図22、図23、図24と共に後述する(S116)。
実行結果決定処理S116が終了すると、入出力同期部310は再び再同期検知処理S111を再び実行じ、前述の処理を繰返す。
<処理対象入力パケット選定開始確認処理のフローチャート(図12)>
図12は、入出力同期部310の処理対象入力パケット選定開始確認処理S113の一例を示すフローチャートである。
入出力同期部310は処理対象入力パケット選定開始確認処理S113を開始すると、自計算機ノード100に、他の計算機ノード100から処理対象となる外部入力パケット500を選定するためのノード間通信パケット600が到着しているか否かをを確認する(S201及びS202)。ノード間通信パケット600が到着している場合(S202の結果が「Y」)、S114を実行する。ノード間通信パケット600が到着していない場合(S202の結果が「N」)、S203を実行する。
S203及びS204では、入出力同期部310は自計算機ノード100に到着している外部入力パケット500の確認を、外部入力パケット管理テーブル550を参照することで行う。外部入力パケット500の存在が確認できる場合(S204の結果が「Y」)、S205で計算機ノード処理状態テーブル700の処理状態識別子701に「INPUT」を設定し、また入力同期ステップ710として付加情報702に値(例えば2)を設定した後、S114を実行する。
外部入力パケット500の存在が確認できない場合(S204の結果が「N」)、処理対象となる外部入力パケット500が存在しないため、入出力同期部310は初期実行処理である再同期検知処理S111を実行する。
処理対象入力パケット選定処理S114は、図13、図14、図15、図16に分割して説明する。処理対象入力パケット選定処理S114の開始部分を図13で説明し、S114に続いて実行される入力決定パケット送信処理S400を図14で説明し、S400に続いて実行される入力処理状態一致処理S500を図15で説明し、S500に続いて実行される入力多数決処理S600を図16で説明する。
<処理対象入力パケット選定処理のフローチャート(図13)>
図13は入出力同期部310が実行する処理対象入力パケット選定処理S114の一例を示すフローチャートである。
入出力同期部310は処理対象入力パケット選定処理S114を開始すると、初めに決定入力記憶部314の決定入力管理テーブル800に未処理の外部入力パケット500の情報が登録されているか否かを確認する(S311)。
S311で外部入力パケット500の情報が保持されている場合(S311の結果が「N」)、当該外部入力パケット500の情報を優先的に処理するために、選定入力パケット処理S115を実行する。
外部入力パケットの500の情報が決定入力管理テーブル800に保持されていない場合(S311の結果が「Y」)、決定入力記憶部314の決定入力管理テーブル800へ新たな外部入力パケット500の情報を取り込む処理に移るためにS301を起動する。
S301では、入力同期部310は処理状態記憶部311内の計算機ノード処理状態テーブル700の処理状態識別子701から自計算機ノード100状態値「INPUT」(S709)を取得する。
次に入力同期部310は処理状態記憶部311内の計算機ノード処理状態テーブル700の付加情報702から入力同期ステップ710の値を取得する(S302)。
次に入力同期部310は入出力決定処理カウンタ315の値を取得する(S303)。
次に入力同期部310はノード間通信パケット600に値を設定する。計算機ノード識別子601には自計算機ノード100の識別子を設定し、入出力決定処理カウンタ602にはS303で取得した入出力決定処理カウンタ315を設定し、計算機ノード処理状態603にはS301とS302で取得した計算機ノード処理状態テーブル700の計算機ノード状態情報を設定する(S304)。
次に入力同期部310は外部入力パケット記憶部301の外部入力パケット管理テーブル550から入力同期ステップ710数分の外部入力パケット500の情報を取得する(S305)。
S305で入力同期部310は、取得した外部入力パケット500の情報の中に決定済み入力管理テーブル810内に保持されている外部入力パケット500の情報と一致するものが存在しないことを確認する(S306およびS307)。
S305で入力同期部310は、取得した外部入力パケット500の情報と同じ情報が決定済み入力管理テーブル810内に存在する場合(S307の結果が「N」)、外部入力パケット管理テーブル550から当該外部入力パケット500の情報を削除し(S308)、削除した分と同数の外部入力パケット5000の情報を外部入力パケット管理テーブル550から取り出す(S305)。
S305で入力同期部310が取得した外部入力パケット500の情報と同じ情報が決定済み入力管理テーブル810内に存在しない場合(S307の結果が「Y」)、S309を実行する。
S309で入力同期部310は、取得した外部入力パケット500の情報をノード間通信パケット600の計算機ノード処理状態個別詳細情報604に設定する。以上でノード間通信パケット600の作成が完了すると、入力決定パケット送信処理S400を実行する。
<入力決定パケット送信処理のフローチャート(図14)>
図14は、入出力同期部310の処理対象入力パケット選定処理S114の一部分である、入力決定パケット送信処理S400の一例を示すフローチャートである。
入出力同期部310は入力決定パケット送信処理S400を開始すると、初めに処理状態記憶部311内の計算機ノード処理状態テーブル700の処理状態704の値を「BEGIN」に設定する(同時に自計算機ノード100状態をコピーしたノード間通信パケット600の計算機ノード処理状態603の値も更新する)(S401)。
次に入出力同期部310は、作成したノード間通信パケット600をノード間通信I/F105を介して他の計算機ノード100にマルチキャストで送信する(S402)。
次に入出力同期部310は、他の計算機ノード100からノード間通信パケット600が到着することを期待して、タイムアウト時間までWaitする(S403)。
次に入出力同期部310は、他の計算機ノード100から送信されたノード間通信パケット600を受信する(S404)。
次に入出力同期部310は、自計算機ノード100で作成したノード間通信パケット600情報と、S404で受信した他計算機ノード100のノード間通信パケット600情報を結合し、「受信結果リスト」を作成する。「受信結果リスト」はノード間通信パケット600と同様の列情報を持つ(S405)。各計算機ノードの結果を結合処理することで、一部の内部通信経路の障害により通信不可能な計算機ノードが存在した場合でも通信可能な経路より全計算機ノードの情報が共有可能となる。
次に入出力同期部310は、S405で作成した受信結果リスト中の、計算機ノード識別子601、入出力決定処理カウンタ602、計算機ノード処理状態603の列情報を計算機ノード構成管理テーブル317の同じ列にコピーする。この時、入力同期時計算機ノード総数317Aを更新する。(S406)
以上で入力決定パケット送信処理S400が完了すると、入力処理状態一致処理S500を実行する。
<入力処理状態一致処理のフローチャート(図15)>
図15は、入出力同期部310の処理対象入力パケット選定処理S114の一部分である、入力処理状態一致処理S500の一例を示すフローチャートである。
入力処理状態一致処理S500では、各計算機ノード100間で「入力同期」処理における状態を一致させる処理を行う。同期システム1は各計算機ノード100の演算結果を多数決判定することで端末2への出力情報の信頼性を確保するが、各計算機ノード100は独立した計算機であるため、各自が異なる計算機ノード状態で稼動している。演算結果の多数決判定を実施するためには、複数の各計算機ノード100の演算結果を必要とする。演算結果の多数決判定に参加する計算機ノード100の数を最大化するために、演算処理の入力段階で一度計算機ノード100間の同期を取る。入力処理状態一致処理S500の方針は、処理周期が明らかに異なる計算機ノード100は排除するが、僅かな計算機ノード処理状態の遅れはこれを修正することで演算処理、演算結果の多数決判定に参加する計算機ノード100数を最大化する。
入出力同期部310は入力処理状態一致処理S500を開始すると、初めに入出力決定処理カウンタ315と、S404で他の計算機ノード100から受信したノード間通信パケット600の入出力決定処理カウンタ602を比較し、自他計算機ノード100の入出力決定処理カウンタ315の値が一致しているかを判定する。計算機ノード100は複数の他の計算機ノード100と送受信を行っている場合があるため、受信したノード間通信パケット600も複数個になることがある。S502での「比較」とは、入出力決定処理カウンタ315値と受信した一又は複数の入出力決定処理カウンタ602値に基づいて自他計算機ノード100を分類し、自計算機ノード100が多数派または少数派のいずれに分類されるかを決定する、「多数決判定」のことである(S501およびS502)。
尚「多数決判定」において、分類の結果3つ以上のグループが生成された場合には、最も多くの計算機ノードが属するグループに自計算機ノードが分類された場合に、自計算機ノードが「多数派」に分類されたと判定してもよい。これは、以降の処理において実行される様々な「多数決判定」においても同様である。
自計算機ノード100が少数派に分類される場合(S502の結果が「N」)、多数派の計算機ノード100と処理周期が異なるため、再同期処理S118を実行する。
自計算機ノード100が多数派に分類される場合(S502の結果が「Y」)、処理周期が一致しているとして、継続するS504を実行する。
次に自計算機ノード100が他の計算機ノード100と計算機ノード処理状態が一致しているかを比較する。ここでの「比較」も「多数決判定」のことである。計算機ノード処理状態の比較は、他計算機ノード100から受信したノード間通信パケット600の計算機ノード処理状態603(計算機ノード処理状態603の構成列は計算機ノード処理状態テーブル700と同じ)と自計算機ノード100の計算機ノード処理状態テーブル700の値(処理状態識別子701、処理状態704)を比較することで行う(S504およびS505)。
S505で自計算機ノード100が少数派に分類される場合(S505の結果が「N」)、計算機ノード処理状態が多数派の計算機ノード処理状態と一致していないため、S506を実行する。S506では自計算機ノード100の計算機ノード処理状態を多数派の計算機ノード処理状態と合わせるために、計算機ノード処理状態テーブル700(処理状態識別子701、付加情報702、処理状態704)を多数派の計算機ノード処理状態値(計算機ノード処理状態603)で更新し、また計算機ノード処理状態テーブル700のPenalty703を設定(例えば「1」を設定)する。
次に自計算機ノード処理状態テーブル700の処理状態704に値が、「BEGIN」の場合(S507の結果が「Y」)はS508を実行し、「END」の場合(S507の結果が「N」)は入力処理状態一致処理S500を終了して入力多数決処理S600を実行する(S506およびS507)。
S505で自計算機ノード100が多数派に分類される場合(S505の結果が「Y」)、S508を実行する。
S508では、自計算機ノード処理状態テーブル700の処理状態704を「END」に変更する。各計算機ノード100は、それぞれの計算機ノード100の入出力同期部310が処理候補として取得した外部入力パケット500の情報(受信結果リスト)の共有が完了した状態となる(S508)。
次にノード間通信パケット600に設定した計算機ノード処理状態テーブル700値、及び「受信結果リスト」を、ノード間通信I/F105経由で他計算機ノード100にマルチキャストで送信する(S509)。
次に他計算機ノード100からのノード間通信パケット600の到着を待つために、タイムアウトまでWaitする(S510)。
Wait終了で、入力処理状態一致処理S500を完了し、次の入力多数決処理S600を実行する。
<入力多数決処理のフローチャート(図16)>
図16は入出力同期部310の処理対象入力パケット選定処理S114の一部分である、入力多数決処理S600の一例を示すフローチャートである。入力多数決処理S600ではアプリケーション200の処理対象となる外部入力パケット500を決定する。
入出力同期部310は入力多数決処理S600を開始すると、初めに「受信結果リスト」を参照して、過半数の計算機ノード100に共通して取得されている外部入力パケット500(「多数決同意入力パケット」と称する)の有無を確認する(S601)。ここで過半数とは、現時点で計算機ノード構成管理テーブルに情報が登録されている計算機ノードの数の過半数であっても良いし、同期システム1に存在する計算機ノードの数の過半数であっても良い。
多数決同意入力パケットが存在しない場合(S601の結果が「N」)、S602を実行して処理状態記憶部311の計算機ノード処理状態テーブル700の付加情報702(入力同期ステップ710)の値を「1」増加し、処理対象入力パケット選定処理S114の開始位置(S300)に実行を移す。
多数決同意入力パケットが存在する場合(S601の結果が「Y」)、次処理S604を実行する。
次にS601で選定された外部入力パケット500情報の順序の並び替えを行う。並び替えた外部入力パケット500を「決定入力パケット」と称する。並び替えは外部入力パケット500のシーケンス番号502の値を基に行う(S604)。
次にS604で並び替えた外部入力パケット500の情報を決定入力記憶部314の決定入力管理テーブル800に保存し、決定入力総数801を更新する(S605)。
次にS605で決定入力管理テーブル800に保存された各外部入力パケット500の情報について、過半数の計算機ノード100が図13のS305で取得した外部入力パケット500情報と同一の情報を自計算機ノード100が取得を行ったかどうかの多数決判定を行う(S606)。
自計算機ノード100が同一の情報を取得していない場合(S606の結果が「N」)、S607で当該外部入力パケット500の情報を決定入力記憶部314の決定済み入力管理テーブル810に設定し、決定済み入力総数811を更新して、S609を起動する。当該外部入力パケット500の情報はアプリケーション200の処理対象であるが、自計算機ノード100が自ら外部ネットワーク3から取得した情報では無い為、後の演算周期で遅れて到着した当該外部入力パケット500を外部ネットワーク3から取得する可能性がある。同一外部入力パケット500に対する多重処理を回避するため、当該外部入力パケット500の情報を決定済み入力管理テーブル810に設定しておく。
自計算機ノード100が同一の情報取得している場合(S606の結果が「Y」)、S606を起動して「決定入力パケット」のうち、自計算機ノード100が自ら外部ネットワーク3経由で取得した外部入力パケット500の情報を、外部入力パケット記憶部301の外部入力パケット管理テーブル550から削除し、続いてS609を起動する。
S609は入出力決定処理カウンタ315を「1」増加する。
次に決定入力パケットをノード間通信パケット600の計算機ノード処理状態個別詳細情報604に設定する(S610)。
次にS610で作成したノード間通信パケット600を、ノード間通信I/F105経由で他の計算機ノード100にマルチキャストで送信する(S611)。
次に他計算機ノード100からのノード間通信パケット600の到着を待つために、タイムアウトまでWaitする(S612)。
Wait終了で、入力多数決処理S600を完了し、次の選定入力パケット処理S115を実行する。
<選定入力パケット処理のフローチャート(図17)>
図17は、入出力同期部310の処理対象入力パケット選定処理S114の一部分である、選定入力パケット処理S115の一例を示すフローチャートである。選定入力パケット処理S115ではアプリケーション200を起動し、「決定入力パケット」を処理する。
入出力同期部310は選定入力パケット処理S115を開始すると、初めに決定入力記憶部314の決定入力管理テーブル800から外部入力パケット500情報を取り出す(S701)。
S701で取得した外部入力パケット500の情報うち、コンテンツ507のアプリ識別子508から、処理を実行すべきアプリケーション200を決定し、パラメタ509を付加して該当アプリケーション200の開始処理(S702−A)を起動する。アプリケーション200の起動後、選定入力パケット処理S115は当該アプリケーション200の処理終了待ちとなる。(S702)
S702で起動されたアプリケーション200は付加パラメタ509を取得して処理を開始し(S702−A)、アプリケーション200処理を実行し(S702−B)、終了時には処理結果を選定入力パケット処理S115に出力する(S702−C)。
アプリケーション200処理終了後、選定入力パケット処理S115は処理結果を取得する(S703)。
外部入力パケット500の情報に応じたアプリケーション200の起動と処理結果の取得で選定入力パケット処理S115を完了し、次の実行結果決定処理S116を実行する。
実行結果決定処理S116は、本書では図18、図19、図20、図21、図22、図23、図24に分割して説明する。実行結果決定処理S116の開始部分を図18で説明し、S116に続いて実行される出力処理状態一致処理S900を図19で説明し、S900に続いて実行される出力多数決処理S1000を図20で説明し、S1000に続いて実行されるリーダー選出処理S1100を図21で説明し、S1100に続いて実行されるリーダー処理状態一致化処理S1200を図22で説明し、S1200に続いて実行されるボーター処理S1300を図23で説明し、S1300に続いて実行される出力異常処理S1400を図24で説明する。
<実行結果決定処理のフローチャート(図18)>
図18は入出力同期部310の実行結果決定処理S116の一例を示すフローチャートである。
入出力同期部310は実行結果決定処理S116を開始すると、初めに処理状態記憶部311の計算機ノード処理状態テーブル700の処理状態識別子701を「OUTPUT」に、付加情報702を「OUTPUT」に、処理状態704を「BEGIN」に更新する(S801)。
次に入出力同期部310は、入出力決定処理カウンタ315の値を確認する(S802)。
次に入出力同期部310は、S703で取得したアプリケーション200の処理結果を、ノード間通信パケット600の計算機ノード処理状態個別詳細情報604に設定する。この時、S801で更新した計算機ノード処理状態テーブル700値を計算機ノード処理状態603に設定し、S802で取得した入出力決定処理カウンタ315値を入出力決定処理カウンタ602にも設定する。(S803)
次に入出力同期部310は、S803で作成したノード間通信パケット600をノード間通信I/F105経由で他の計算機ノード100にマルチキャストで送信することで、アプリケーション200の処理結果を他の計算機ノード100との間で共有する(S804)。
次に入出力同期部310は、他の計算機ノード100からのノード間通信パケット600が到着を待つために、タイムアウトまでWaitする(S805)。
S806で入出力同期部310は、他の計算機ノード100から到着したノード間通信パケット600を取得し、S807で自他計算機ノード100のノード間通信パケット600を結合して「受信結果リスト」を作成する。
更に入出力同期部310は、受信結果リスト(構成列はノード間通信パケット600に同じ)に登録されている計算機ノード識別子601、入出力決定処理カウンタ602、計算機ノード処理状態603の列情報を計算機ノード構成管理テーブル317に設定する。ただし入力同期時計算機ノード総数317Aの値は更新しない。(S808)
計算機ノード100間でのアプリケーション200の処理結果の交換を行ったところで、実行結果決定処理S116を完了し、次の出力処理状態一致処理S900を実行する。
<出力処理状態一致処理のフローチャート(図19)>
図19は入出力同期部310の実行結果決定処理S116の一部分である、出力処理状態一致処理S900の一例を示すフローチャートである。
出力処理状態一致処理S900では、各計算機ノード100間で「出力同期」処理における状態を一致させる処理を行う。同期システム1は各計算機ノード100の演算結果を多数決判定することで端末2への出力情報の信頼性を確保するが、各計算機ノード100は独立した計算機であるため、各自が異なる計算機ノード状態で稼動している。出力処理状態一致処理S900の方針は、処理周期が明らかに異なる計算機ノード100は排除するが、僅かな計算機ノード処理状態の遅れはこれを修正することで演算結果の多数決判定に参加する計算機ノード100数を最大化する。
入出力同期部310は出力処理状態一致処理S900を開始すると、初めに入出力決定処理カウンタ315と、S806で他の計算機ノード100から受信したノード間通信パケット600の入出力決定処理カウンタ602を比較し、自他計算機ノード100の入出力決定処理カウンタ315の値が一致しているかを判定する。計算機ノード100は複数の他の計算機ノード100とノード間通信パケット600を送受信する場合があるため、受信したノード間通信パケット600も複数個になることがある。S901での「比較」とは、入出力決定処理カウンタ315値と複数の入出力決定処理カウンタ602値とに基づき、自他計算機ノード100を分類し、自計算機ノード100が多数派または少数派のいずれに分類されるかを決定する、「多数決判定」のことである(S901およびS902)。
自計算機ノード100が少数派に分類される場合(S902の結果が「N」)、多数派の計算機ノード100と処理周期が異なるため、入出力同期部310は再同期処理S118を実行する。
自計算機ノード100が多数派に分類される場合(S902の結果が「Y」)、処理周期が一致しているとして、入出力同期部310は継続するS904を実行する。
次に自計算機ノード100が他の計算機ノード100と計算機ノード処理状態が一致しているかを比較する。ここでの「比較」も「多数決判定」のことである。計算機ノード処理状態の比較は、他計算機ノード100から受信したノード間通信パケット600の計算機ノード処理状態603(構成列は計算機ノード処理状態テーブル700と同じ)と自計算機ノード100の計算機ノード処理状態テーブル700の値(処理状態識別子701、付加情報702、処理状態704)を比較することで行う。(S904およびS905)
S905で自計算機ノード100が少数派に分類される場合(S905の結果が「N」)、計算機ノード処理状態が多数派の計算機ノード処理状態と一致していないため、入出力同期部310はS906を実行する。
S906では、他計算機ノード100から受信したノード間通信パケット600の計算機ノード処理状態603(構成列は計算機ノード処理状態テーブル700と同じ)の付加情報702を参照し、多数派の計算機ノード100の計算機ノード処理状態が「LEADER」にあるかを判別する。多数派の計算機ノード処理状態が「LEADER」にある場合(S906の結果が「Y」)、「出力同期」中の一つ先の処理で行われる、端末2へ処理結果を出力する候補の計算機ノード100が決定済みであるため、自計算機ノード100は監視役として動作するために入出力同期部310はボーター処理S1300を起動する。多数派の計算機ノード処理状態が「LEADER」にない場合(S906の結果が「N」)、入出力同期部310はS907を起動する。また、多数派の計算機ノード100の付加情報702の値の如何に関わらず、入出力同期部310は自計算機ノード100の計算機ノード処理状態テーブル700のPenalty703を設定(例えば「1」を設定)する。
S906の判定において、多数派の計算機ノード100の計算機ノード処理状態が「VOTER」であるケースもあり得る。しかしS906においては「LEADER」のみを検出対照とする。多数派の計算機ノード100の計算機ノード処理状態が「VOTER」である場合、これら多数派の計算機ノード100は自計算機ノード処理状態「OUTPUT」よりも「出力同期」処理において二つ先の、端末2に結果出力を行う処理状態にある。多数派計算機ノード100の処理状態が「VOTER」であることを確認した後に、自計算機ノード100の処理状態を「VOTER」に補正して出力監視役である「モニター」に切替えたとしても、端末2への結果出力を見逃す可能性があることから、S906の判定は「LEADER」のみを検出対象とする。つまり、「出力同期」の処理段階における「OUTPUT」から「VOTER」への二段階の同期ずれの補正は行わない。
S907とS908では多数派の計算機ノード処理状態の比較を行い、付加情報702が「OUTPUT」あり(S907の結果が「Y」)、更に処理状態704が「END」である場合(S908の結果が「Y」)は計算機ノード100間でアプリケーション200の処理結果を一致化させる処理が完了しているため、入出力同期部310は出力多数決処理S1000を起動して出力処理状態一致処理S900を完了する。
一方付加情報702が「OUTPUT」でない場合(S907の結果が「N」)、または付加情報702は「OUTPUT」ある(S907の結果が「Y」)が処理状態704が「END」でない場合(S908の結果が「N」)は、入出力同期部310はタイムアウトまでWaitした後(S909)、S806の他計算機ノード100からのアプリケーション200処理結果受信処理から、出力処理状態一致処理S900を再実行する。
一方、S905で自計算機ノード100が多数派に分類される場合(S905の結果が「Y」)、入出力同期部310は次のS911を起動する。
S911では自計算機ノード処理状態テーブル700の処理状態704を「END」に変更する。各計算機ノード100は、それぞれの計算機ノード100のアプリケーション200の処理結果の共有が完了した状態となる。
次にノード間通信パケット600に設定した計算機ノード処理状態テーブル700値をノード間通信I/F105経由で他計算機ノード100にマルチキャストで送信する(S912)。
次に他計算機ノード100からのノード間通信パケット600の到着を待つために、タイムアウトまでWaitする(S913)。
Wait終了で、出力処理状態一致処理S900を完了し、次の出力多数決処理S1000を実行する。
<出力多数決処理のフローチャート(図20)>
図20は入出力同期部310の実行結果決定処理S116の一部分である、出力多数決処理S1000の一例を示すフローチャートである。出力多数決処理S1000では、各計算機ノード100が算出したアプリケーション200の処理結果の多数決判定を行う。
入出力同期部310は出力多数決処理S1000を開始すると、初めに「受信結果リスト」中の各計算機ノード100が算出したアプリケーション200の処理結果の中に、過半数の計算機ノード100に共通して存在する処理結果(「多数決同意出力」と称する)が存在するか、その有無を判定する(S1001)。ここで過半数とは、計算機ノード構成テーブル317に現時点で登録されている計算機ノードの数の過半数であっても良いし、同期システム1に存在する計算機ノードの数の過半数であっても良い。
多数決同意出力が存在しない場合(S1001の結果が「N」)、アプリケーション200の処理結果の多数決判定が不能ということになり、入出力同期部310はS1002を起動する。
S1002は「受信結果リスト」中の計算機ノード100総数と、計算機ノード構成管理テーブル317の入力同期時計算機ノード総数317Aを比較する。総数が一致する場合(S1002の結果が「Y」)、各計算機ノード100が算出したアプリケーション200の処理結果に二つとして同じものが無かったという事になり、入出力同期部310はS1003を起動して基盤ソフトウェア300の処理を終了させる。総数が一致しない場合(S1002の結果が「N」)、まだアプリケーション200の処理結果を受信していない計算機ノード100が存在するため、入出力同期部310はS806の他計算機ノード100からのアプリケーション200処理結果の受信処理から、出力処理状態一致処理S900を再開する。
一方、多数決同意出力が存在する場合(S1001の結果が「Y」)、入出力同期部310はS1005を起動して自計算機ノード100のアプリケーション200の処理結果が多数派に属するかを判定する。自計算機ノード100が多数派に属する場合(S1005の結果が「Y」)、入出力同期部310は出力多数決処理S1000を完了し、次のリーダー選出処理S1100を実行する。自計算機ノード100が少数派に属する場合(S1005の結果が「N」)、自計算機ノード100は多数派の計算機ノード100とは異なる処理結果を導いたという事になり、端末2への結果出力を行う「リーダー」にも結果出力の監視を行う「モニター」にもなり得ないため入出力同期部310は今周期の処理からは外れ、次周期に向けて再同期処理S118を起動する。
<リーダー選出処理のフローチャート(図21)>
図21は入出力同期部310の実行結果決定処理S116の一部分である、リーダー選出処理S1100の一例を示すフローチャートである。リーダー選出処理S1100は、端末2への結果出力を行う「リーダー」候補となる計算機ノード100の選出を行う。
入出力同期部310はリーダー選出処理S1100を開始すると、初めに処理状態記憶部311の計算機ノード処理状態テーブル700の付加情報702を「LEADER」に、処理状態704を「BEGIN」に変更する(S1101)。
次に入出力同期部310は、受信結果リストより「リーダー」候補となる計算機ノード100を選出し、順位を決定し、「リーダー選出結果」を作成する。選出及び順位の決定方法は、一例として、計算機ノード処理状態テーブル700のPenalty703の値が0でありノード間通信パケット600の計算機ノード識別子601が最も大きな値を持つ順に「リーダー」候補を決定する方法があげられる。(S1102)
次に入出力同期部310は、入出力決定処理カウンタ315を取得しノード間通信パケット600の入出力決定処理カウンタ602に設定する(S1103)。またS1102の「リーダー選出結果」をノード間通信パケット600の計算機ノード処理状態個別詳細情報604に設定する(S1104)。
次に入出力同期部310は、S1104で作成したノード間通信パケット600をノード間通信I/F105経由で他の計算機ノード100にマルチキャストで送信する(S1105)。
次に入出力同期部310は、他計算機ノード100からのノード間通信パケット600の到着を待つために、タイムアウトまでWaitする(S1106)。
S1107で他計算機ノード100からのノード間通信パケット600を取得すると、入出力同期部310はS1108で自他計算機ノード100のノード間通信パケット600を結合し、「受信結果リスト」を作成する。「受信結果リスト」は自他計算機ノード100が決定した「リーダー選出結果」を含む。
S1109で入出力同期部310は、計算機ノード構成管理テーブル317に「受信結果リスト」内容を反映して、リーダー選出処理S1100を完了し、次のリーダー処理状態一致化処理S1200を実行する。
<リーダー処理状態一致化処理のフローチャート(図22)>
図22は入出力同期部310の実行結果決定処理S116の一部分である、リーダー処理状態一致化処理S1200の一例を示すフローチャートである。リーダー処理状態一致化処理S1200は、計算機ノード100間でリーダー選出処理の完了状態を一致させる処理を行う。
入出力同期部310はリーダー処理状態一致化処理S1200を開始すると、初めに入出力決定処理カウンタ315と、S1107で他の計算機ノード100から受信したノード間通信パケット600の入出力決定処理カウンタ602を比較し、自他計算機ノード100の入出力決定処理カウンタ315の値が一致しているかを判定する。受信したノード間通信パケット600は複数個になることがあるため、S1202は「多数決判定」を行う(S1201およびS1202)。
自計算機ノード100が少数派に分類される場合(S1202の結果が「N」)、多数派の計算機ノード100と処理周期が異なるため、入出力同期部310は再同期処理S118を実行する。
自計算機ノード100が多数派に分類される場合(S1202の結果が「Y」)、処理周期が一致しているとして、入出力同期部310は継続するS1204を実行する。
次に入出力同期部310は入出力同期部310は自計算機ノード100が他の計算機ノード100と計算機ノード処理状態が一致しているかを比較する。ここでの「比較」も「多数決判定」のことである。計算機ノード処理状態の比較は、他計算機ノード100から受信したノード間通信パケット600の計算機ノード処理状態603(構成列は計算機ノード処理状態テーブル700と同じ)と自計算機ノード100の計算機ノード処理状態テーブル700の値(処理状態識別子701、付加情報702、処理状態704)を比較することで行う(S1204およびS1205)。
自計算機ノード100が少数派に分類される場合(S1205の結果が「N」)、他の計算機ノード100と共にアプリケーション200の処理結果を端末2に出力し得る状態に遷移出来ないため、入出力同期部310は処理周期を離れて再同期処理S118を実行する。
自計算機ノード100が多数派に分類される場合(S1205の結果が「Y」)、入出力同期部310は次のS1206を実行する。
次に入出力同期部310は自計算機ノード処理状態テーブル700の処理状態704を「END」に変更する。各計算機ノード100は、それぞれの計算機ノード100の入出力同期部310が「リーダー選出結果」の共有が完了した状態となる(S1206)。
次に入出力同期部310は、計算機ノード処理状態テーブル700値及び「受信結果リスト」を設定したノード間通信パケット600を、ノード間通信I/F105経由で他計算機ノード100にマルチキャストで送信する(S1207)。
次に入出力同期部310は他計算機ノード100からのノード間通信パケット600の到着を待つために、タイムアウトまでWaitする(S1208)。
Wait終了で、入出力同期部310はリーダー処理状態一致化処理S1200を完了し、次のボーター処理S1300を実行する。
<ボーター処理のフローチャート(図23)>
図23は入出力同期部310の実行結果決定処理S116の一部分である、ボーター処理S1300の一例を示すフローチャートである。
ボーター処理S1300では、リーダー選出処理S1100で決定した「リーダー選出結果」に従い「リーダー」役と「モニター」役の計算機ノード100を決定する。「リーダー」役の計算機ノード100は出力多数決決定処理S1000で得た「多数決同意出力」を端末2に出力し、出力状態を「モニター」役の計算機ノード100が監視する。出力状態に異常が認められた場合、「モニター」役の計算機ノード100の中から新たな「リーダー」計算機ノード100を決定し、「多数決同意出力」の端末2への出力を再実行する(出力異常処理S1400)。出力異常処理S1400の詳細は図24と共に後述する。
入出力同期部310はボーター処理S1300を開始すると、初めにS1207で送受信した「リーダー選出結果」の「受信結果リスト」内容で、決定出力管理テーブル321の構成列(出力同期時計算機ノード総数321A、順位321B、計算機ノード識別子321C、入出力決定処理カウンタ321D、計算機ノード処理状態321E)及び出力同期時計算機ノード総数321Aの値を更新する(S1301)。
次に入出力同期部310は、決定出力管理テーブル321の順位321B及び計算機ノード識別子321Cの値より、自計算機ノード100が「リーダー」であるかを判定する(S1302)。
自計算機ノード100が「リーダー」であると判定される場合(S1302の結果が「Y」)、「リーダー」として動作するために、入出力同期部310はS1304を実行する。自計算機ノード100が「リーダー」であると判定されない場合(S1302の結果が「N」)、「モニター」として動作するために、入出力同期部310はS1303を実行する。
「リーダー」計算機ノード100は、処理状態記憶部311の計算機ノード処理状態テーブル700の付加情報702を「VOTER」に更新し、また処理状態704を「LEADER」に更新することで、「リーダー」動作を開始する(S1304)。そして入出力決定処理カウンタ315の値を「1」増加させる(S1305)。
次にノード間通信パケット600の入出力決定処理カウンタ602にS1305で更新した入出力決定処理カウンタ315値を設定し、計算機ノード処理状態603にはS1304で更新した計算機ノード処理状態テーブル700値を設定する(S1306)。
次にノード間通信パケット600をノード間通信I/F105経由で他の計算機ノード100にマルチキャストで送信し、自計算機ノード100が「リーダー」であることを通知する(S1307)。そして他の計算機ノード100からのノード間通信パケット600の到着を待つために、タイムアウトまでWaitする(S1308)。
Wait終了後、アプリケーション200の処理結果を外部通信I/F104経由で端末2にマルチキャストで送信する。マルチキャストによる送信であるため、アプリケーション200の処理結果は、「モニター」計算機ノード100の外部通信I/F104にも到達する(S1309)。
「リーダー」計算機ノード100は、端末2に送信することで「リーダー」動作を終了し、以上でボーター処理S1300を完了して次の再同期検知処理S111を実行する。
「モニター」計算機ノード100は、処理状態記憶部311の計算機ノード処理状態テーブル700の付加情報702を「VOTER」に更新して、また処理状態704を「MONITOR」に更新することで、「モニター」動作を開始する(S1311)。そして入出力決定処理カウンタ315の値を「1」増加させる(S1312)。
次にノード間通信パケット600の入出力決定処理カウンタ602にS1312で更新した入出力決定処理カウンタ315値を設定し、計算機ノード処理状態603にはS1311で更新した計算機ノード処理状態テーブル700値を設定する(S1313)。
次にノード間通信パケット600をノード間通信I/F105経由で他の計算機ノード100にマルチキャストで送信し、自計算機ノード100が「モニター」であることを通知する(S1314)。そして他の計算機ノード100からのノード間通信パケット600の到着を待つために、タイムアウトまでWaitする(S1315)。
Wait終了後、「リーダー」計算機ノード100によるアプリケーション200の処理結果送信状態を、「モニター」計算機ノード100の外部通信I/F104経由で監視し、異常が発生していないかを判別する(S1316およびS1317)。
「リーダー」計算機ノード100の処理結果送信に異常が確認できる場合(S1317の結果が「Y」)、出力異常処理S1400を起動し、端末2へのアプリケーション200の処理結果送信をリトライする。
「リーダー」計算機ノード100の処理結果送信に異常が確認できない場合(S1317の結果が「N」)、「モニター」動作を終了し、ボーター処理S1300を完了して次の再同期検知処理S111を実行する。
<出力異常処理のフローチャート(図24)>
図24は入出力同期部310の実行結果決定処理S116の一部分である、出力異常処理S1400の一例を示すフローチャートである。出力異常処理S1400は、ボーター処理S1300のS1316で端末2へのアプリケーション200の処理結果送信に異常が認められた場合に起動される。
出力異常処理S1400はボーター処理S1300のリトライ処理であるため、ほぼボーター処理S1300と同様の処理を実行する。しかしリトライ処理であるため、「リーダー」計算機ノード100、「モニター」計算機ノード100共に入出力決定処理カウンタ315の値は変更しない。
入出力同期部310は出力異常処理S1400を開始すると、初めに決定出力管理テーブル321から「リーダー」計算機ノード100(ボーター処理S1300で「リーダー」と判定された計算機ノード100)の情報を削除する(S1401)。
次に入出力同期部310は、更新された決定出力管理テーブル321の順位321B及び計算機ノード識別子321Cの値より、自計算機ノード100が次の「リーダー」であるかを判定する(S1402およびS1403)。
自計算機ノード100が「リーダー」であると判定される場合(S1403の結果が「Y」)、「リーダー」として動作するために、入出力同期部310はS1405を実行する。自計算機ノード100が「リーダー」であると判定されない場合(S1403の結果が「N」)、「モニター」として動作するために、入出力同期部310はS1404を実行する。
「リーダー」計算機ノード100としての動作(S1405からS1410までの処理、及び再同期検知処理S111の起動)は、ボーター処理S1300の「リーダー」動作(S1304からS1309までの処理、及び再同期検知処理S111の起動)と基本的に同様であるが、S1406とS1305のみ異なる。出力異常処理S1400では入出力決定処理カウンタ315値は変更しない(S1406の点線枠は実行しないことを意味する)。
「モニター」計算機ノード100としての動作(S1404以降の処理)も、ボーター処理S1300の「モニター」動作(S1303からS1317までの処理、及び出力異常処理S1400または再同期検知処理S111の起動)と基本的に同様であるが、S1411とS1312のみ異なる。出力異常処理S1400では入出力決定処理カウンタ315値は変更しない(S1411の点線枠は実行しないことを意味する)。
<再同期検知処理および再同期処理のフローチャート(図25)>
図25は再同期検知処理S111および再同期処理S118の一例を示すフローチャートである。再同期検知処理S111は同期システムとして協調動作している系の中に居る計算機ノード100の入出力同期部310が、協調動作の系への参入を要求する計算機ノード100を検出し、参入を受け入れる処理を行う。再同期処理S118は同期システムとして協調動作している系の外に居る計算機ノード100の入出力同期部310が、協調動作の系への参入を要求し、参入を果たすまでの処理を行う。協調動作の系への参入を要求することを「再同期要求」と称する。
再同期検知処理S111と再同期処理S118はそれぞれがREJOIN-REQのノード間通信パケット(詳細は図26に示す)、REJOIN-ACKのノード間通信パケット(詳細は図26に示す)、JOINEDのノード間通信パケット(詳細は図26に示す)を送受信することで、歩調を合わせて処理を進める。
図26に一例として示す「REJOIN-REQのノード間通信パケット」は、再同期要求を行う計算機ノード100が送信するノード間通信パケット600の例である。計算機ノード処理状態603である計算機ノード処理状態テーブル700の処理状態識別子701と処理状態704には「REJOIN-REQ」が設定される。入出力決定処理カウンタ602は初期値(例えば「0」)のままで、入出力決定処理カウンタ315値は設定されない。
図26に一例として示す「REJOIN-ACKのノード間通信パケット」は再同期要求を受領した計算機ノード100が要求側に返信するノード間通信パケット600の例である。計算機ノード処理状態603である計算機ノード処理状態テーブル700の処理状態識別子701と処理状態704には「REJOIN-ACK」が設定される。また再同期要求を受領した計算機ノード100が保持する入出力決定処理カウンタ315値が入出力決定処理カウンタ602に設定され、決定入力管理テーブル800情報と外部入力パケット記憶部301の外部入力パケット管理テーブル550情報が計算機ノード処理状態個別詳細情報604に設定される。
図26に一例として示す「JOINEDのノード間通信パケット」は「REJOIN-ACKのノード間通信パケット」を受取った計算機ノード100が同期システムとして協調動作している系への参入を果たした事を、他の計算機ノード100に通知するために送信するノード間通信パケット600の例である。計算機ノード処理状態603である計算機ノード処理状態テーブル700の処理状態識別子701と処理状態704には「JOINED」が設定される。
図25に戻って、再同期検知処理S111の詳細を示す。
入出力同期部310は再同期検知処理S111を開始すると、初めに決定出力管理テーブル321の出力同期時計算機ノード総数321Aで、計算機ノード構成管理テーブル317の入力同期時計算機ノード総数317Aを更新する(S1111)。
次に入出力同期部310は、処理状態記憶部311の計算機ノード処理状態テーブル700の処理状態識別子701を「REJOIN-WAIT」に設定し、処理状態704を「REJOIN-WAIT」に設定することで、再同期要求を受付ける処理状態になる(S1112)。
次に入出力同期部310は、他の計算機ノード100からの再同期要求である、再同期処理S118のS1183により送信された「REJOIN-REQのノード間通信パケット」の到着を期待して、タイムアウトまでWaitする(S1113)。
再同期要求が検出されなかった場合(S1114の結果が「N」)、再同期検知処理S111を終了して入力同期処理を開始するために入出力同期部310はS112を起動する。再同期要求を検出した場合(S1114の結果が「Y」)、再同期要求に応答するために入出力同期部310はS1115を起動する。
S1115では、入出力同期部310は、処理状態記憶部311の計算機ノード処理状態テーブル700の処理状態識別子701を「REJOIN-ACK」に設定し、処理状態704を「REJOIN-ACK」に設定する。計算機ノード100は再同期要求に応答する計算機ノード処理状態に遷移する。
次に入出力同期部310は、「REJOIN-ACKのノード間通信パケット」を作成するために、入出力決定処理カウンタ315値をノード間通信パケット600の入出力決定処理カウンタ602に設定し、計算機ノード処理状態テーブル700情報を計算機ノード処理状態603に設定する(S1116)。また決定入力管理テーブル800情報と外部入力パケット記憶部301の外部入力パケット管理テーブル550情報を計算機ノード処理状態個別詳細情報604に設定する(S1117)。
作成した「REJOIN-ACKのノード間通信パケット」はノード間通信I/F105経由でマルチキャストで送信される。当該「REJOIN-ACKのノード間通信パケット」は、再同期要求を行った計算機ノード100で処理中の、再同期処理S118のS1185で受信されることを期待する。(S1118)
次に入出力同期部310は、再同期要求を行った計算機ノード100の再同期処理S118のS11810から「JOINEDのノード間通信パケット」が到着することを期待して、タイムアウトまでWaitする(S1119)。
「JOINEDのノード間通信パケット」が受信されなかった場合(S1120の結果が「N」)、再同期要求を行った計算機ノード100の再同期処理S118は失敗したと判断して、入出力同期部310は再同期検知処理S111を終了して入力同期処理を開始するためにS112を起動する。
「JOINEDのノード間通信パケット」が受信された場合(S1120の結果が「Y」)、入出力同期部310はS1121で計算機ノード構成管理テーブル317の入力同期時計算機ノード総数317Aを更新した後、再同期検知処理S111を終了して入力同期処理を開始するためにS112を起動する。
再同期処理S118の詳細を示す。
再同期要求を行う計算機ノード100の入出力同期部310は、初めに処理状態記憶部311の計算機ノード処理状態テーブル700の処理状態識別子701に「REJOIN-REQ」を設定し、処理状態704に「REJOIN-REQ」を設定設定することで、再同期要求を行う処理状態になる(S1181)。
次に入出力同期部310は、「REJOIN-REQのノード間通信パケット」を作成するために、ノード間通信パケット600の計算機ノード処理状態603に計算機ノード処理状態テーブル700情報を設定する(S1182)。
作成した「REJOIN-REQのノード間通信パケット」はノード間通信I/F105経由でマルチキャストで送信される。当該「REJOIN-REQのノード間通信パケット」は協調動作している系の中に居る計算機ノード100が実行している再同期検知処理S111のS1114で受信されることを期待する。(S1183)
次に再同期要求に対する「REJOIN-ACKのノード間通信パケット」が返信されてくることを期待して、入出力同期部310はタイムアウトまでWaitする(S1184)。
「REJOIN-ACKのノード間通信パケット」が受信されない場合(S1185の結果が「N」)、再同期要求をリトライするため、入出力同期部310はS1181を起動する。「REJOIN-ACKのノード間通信パケット」が受信される場合(S1185の結果が「Y」)、入出力同期部310はS1186を起動する。
S1186では入出力同期部310は、「REJOIN-ACKのノード間通信パケット」の入出力決定処理カウンタ602値を入出力決定処理カウンタ315に設定し、他計算機ノード100と処理周期を一致させる(S1186)。
次に入出力同期部310は、「REJOIN-ACKのノード間通信パケット」の計算機ノード処理状態個別詳細情報604に設定された決定入力管理テーブル800情報を取得して自計算機ノード100の決定入力記憶部314の決定入力管理テーブル800に設定し、同じく外部入力パケット管理テーブル550情報を取得して外部入力パケット記憶部301の外部入力パケット管理テーブル550に設定する(S1187)。
次に入出力同期部310は、処理状態記憶部311の計算機ノード処理状態テーブル700の処理状態識別子701を「JOINED」に更新し、処理状態704を「JOINED」に更新して、自計算機ノード100は再同期が完了した計算機ノード処理状態に遷移する(S1188)。
次に入出力同期部310は、「JOINEDのノード間通信パケット」を作成するために、ノード間通信パケット600の計算機ノード処理状態603に計算機ノード処理状態テーブル700情報を設定する(S1189)。
作成した「JOINEDのノード間通信パケット」はノード間通信I/F105経由でマルチキャストで送信される。当該「JOINEDのノード間通信パケット」は「REJOIN-ACKのノード間通信パケット」を返信した計算機ノード100が実行している再同期検知処理S111のS1120で受信されることを期待する。(S1190)
「JOINEDのノード間通信パケット」を送信した後、入出力同期部310は再同期処理S118を完了して入力同期処理を開始するためにS112を起動する。
<ケースを想定した実施態様>
以降の説明では、処理対象入力パケット選定処理S114(入力多数決処理S600までの一連の処理)と実行結果決定処理S116(および出力異常処理S1400までの一連の処理)について、想定されるケースを当てはめることで、これまでの説明を補足する。具体的には、計算機ノード処理状態の経過に伴う計算機ノード100の内部に保持される各テーブル状態や計算機ノード100間で送受信されるノード間通信パケット600情報内容の変化を示す。
補足説明における同期システム1は、三台の計算機ノード100A、計算機ノード100B、計算機ノード100Cから構成されるものとするがこれは一例に過ぎない。
処理対象入力パケット選定処理S114(入力多数決処理S600までの一連の処理)については、二つのケースを当てはめて補足説明する。実行結果決定処理S116(出力異常処理S1400までの一連の処理)については、一つケースを当てはめて補足説明する。
処理対象入力パケット選定処理S114の一つ目の補足説明では、計算機ノード100Bにだけ端末2からの外部入力パケット500の到達が遅延(「外部遅延」と称する)したケース(以下ケースAと称す)を想定し、この結果一回目の外部入力パケット500の情報の取り出しでは「多数決同意入力パケット」が決定できず、二回目の外部入力パケット500の情報の取り出しで「多数決同意入力パケット」が決定できて、以降の処理が実行される例を説明する。
処理対象入力パケット選定処理S114の二つ目の補足説明では、計算機ノード100Bへの外部遅延の発生に加えて、計算機ノード100Cの処理開始契機が他の計算機ノード100A、100Bより遅れる(「内部遅延」と称する)ケース(以下ケースBと称す)を想定し、この結果一回目の外部入力パケット500の情報の取り出しにおける「多数決同意入力パケット」の決定処理には計算機ノード100Cは参加せず、なおかつ計算機ノード100A、100Bの間でも「多数決同意入力パケット」の決定が出来ず、二回目の外部入力パケット500の情報の取り出しで「多数決同意入力パケット」が決定出来て、以降の処理が実行される例を説明する。
実行結果決定処理S116の補足説では、計算機ノード100Cの処理開始契機が遅れるケース(以下ケースCと称す)を想定し、この結果アプリケーション200の実行結果を計算機ノード100A、100B、100Cの間で共有させる処理(計算機ノード処理状態が「OUTPUT」)に計算機ノード100Cは途中参加することとなり、S116〜S1400の処理が実行される例を説明する。
<外部遅延発生時の処理対象入力パケット選定処理(ケースA)>
ケースAにおける補足説明は図27、図28、図29、図30、図31、図32、図33を用いて行う。
図27は各計算機ノード100A、100B、100Cの処理シーケンスの一例を示す。時間T1は処理対象入力パケット選定処理のS300からS602に対応し、時間T2は次の処理周期におけるS300からS509に対応し、時間T3は時間T2の処理結果を受けて実行されるS601からS611に対応する。また送信901はS402に対応し、TO902はS403に対応し、リスト作成903はS404からS508に対応し、TO904はS509に対応し、送信905はS402に対応し、TO906はS403に対応し、リスト作成907はS404からS508に対応し、TO908はS509に対応し、多数決定909はS601に対応し、状態更新910はS604からS609に対応し、送信911はS611に対応する。
図28は各計算機ノードの外部入力パケット管理テーブル、計算機ノード処理状態テーブル、入出力決定処理カウンタの時間別の内容を示す。列912は計算機ノード100Aの状態であり、構成列のSEQ915は外部入力パケット管理テーブル550のシーケンス番号502を示し、WS916は計算機ノード処理状態テーブル700の入力同期ステップ710を示し、ST917は計算機ノード処理状態テーブル700の処理状態704を示し、CNT918は入出力決定処理カウンタ315を示す。列913は計算機ノード100Bの状態を示し、列914は計算機ノード100Cの状態を示し、構成列は計算機ノードAの情報と同様である。行920は時間T1における状態を示し、行921は時間T2における状態を示し、行922は時間T3における状態を示す。
図29は図27に示す「送信」に対する各計算機ノードのノード間通信パケット600の時間別内容を示す。行940は時間T1の送信901に対するノード間通信パケット600内容を示し、構成行の行943は計算機ノード100Aの送信内容を示し、行944は計算機ノード100Bの送信内容を示し、行945は計算機ノード100Cの送信内容を示す。行941は時間T2の送信905に対するノード間通信パケット600内容を示し、行942は時間T3の送信911に対するノード間通信パケット600内容を示し、構成行は行940と同様である。
図30は図27に示す「リスト作成」に対する各計算機ノードのノード間通信パケット600の時間別内容を示す。行960は時間T1のリスト作成903に対するノード間通信パケット600内容を示し、これは「送信」処理にて送受信したノード間通信パケット600を結合した「受信結果リスト」を表す。構成行の行962は計算機ノード100Aの「送信」内容を示し、行963は計算機ノード100Bの「送信」内容を示し、行964は計算機ノード100Cの「送信」内容を示す。行961は時間T2のリスト作成907に対するノード間通信パケット600内容を示し、構成行は行960と同様である。
図31は任意の計算機ノードの計算機ノード構成管理テーブル317の時間別内容を示す。時間別内容は、計算機ノード100A、100B、100Cにおいて同一である。行980は時間T1における計算機ノード構成管理テーブル317の計算機ノード識別子601列、入出力決定処理カウンタ602列、計算機ノード処理状態603列の状態を示す。行981は時間T2における計算機ノード構成管理テーブル317の保持情報を示し、行982はT3における計算機ノード構成管理テーブル317の保持情報を示す。
図32は各計算機ノードの決定入力管理テーブル800の内容を示す。図33は計算機ノード100Bの決定済み入力管理テーブル810の内容を示す。
次に図27の処理シーケンスを追って、各計算機ノード100A、100B、100Cの処理状態変化を説明する。
時間T1において、各計算機ノード100A、100B、100Cは図28の行920の状態で処理を開始する。計算機ノード100Aは、WS924として「2」、ST925として「BEGIN」、CNT926として「C010」の値を保持する。計算機ノード100B、100Cにおいても同値である。しかし外部入力パケット管理テーブル550のに保存している外部入力パケットの情報が異なる。具体的には計算機ノード100Aはシーケンス番号が「2A−1」と「2B−1」である外部入力パケット500を受信して外部入力パケット管理テーブル550に当該パケットの情報を登録しているのに対し(枠930)、計算機ノード100Bには外部入力パケット500が到達していないので外部入力パケット管理テーブル550には外部入力パケットの情報が登録されておらず(枠931)、計算機ノード100Cはシーケンス番号が「2C−1」である外部入力パケットのみを受信しているので、当該パケットの情報のみを外部入力パケット管理テーブル550に保持している(枠932)。尚、外部入力パケット500の情報が登録されていない状態は「0」で示す。
送信901では、各計算機ノード100A、100B、100Cは各々、自身が外部ネットワーク3から取得(受信)した外部入力パケット500の情報をノード間通信パケット600の計算機ノード処理状態個別詳細情報604に設定して送出する。送出されたノード間通信パケット600の内容は図29の時間T1に示す(行940)。計算機ノード100AはWS924の値に従い二つの外部入力パケット500(シーケンス番号「2A−1」と「2B−1」の外部入力パケット)の情報を取得してノード間通信パケット600に設定する(行943)。計算機ノード100B、100Cも二つの外部入力パケット500の情報を取得しようとする。しかし、計算機ノード100Bは外部入力パケットを受信していないため外部入力パケット500の情報無しを示す「0」を二つノード間通信パケット600に設定し(行944)、計算機ノード100Cは取得できた一つの外部入力パケット500(シーケンス番号「2C−1」の外部入力パケット)の情報ともう一つは「0」をノード間通信パケット600に設定する(行945)。
リスト作成903では送信901で送受信したノード間通信パケット600を結合して「受信結果リスト」を作成し、各計算機ノード100A、100B、100C間で送受信することで計算機ノード間で保持する「受信結果リスト」内容を一致化させる。送受信されるノード間通信パケット600の内容は図30の時間T1に示す(行960)。
時間T1内で実行されるS601では「多数決同意入力パケット」の有無を判定するが、枠965には「多数決同意入力パケット」は存在しないため、各計算機ノード100A、100B、100CはS602で計算機ノード処理状態テーブル700の入力同期ステップ710WSの値を「3」に変更して、次の周期(時間T2)のS300を起動する。この時の計算機ノード構成管理テーブル317の状態を図31の時間T1に示す(行980)。
時間T2開始状態の各計算機ノード100A、100B、100Cの状態を図28の時間T2に示す(行921)。計算機ノード100AのWS924は、時間T1におけるS602の実行により、値が「3」に変化しているが、これは計算機ノード100B、100Cも同様である。時間T1の処理を実行中に新たな外部入力パケット500が到着し、時間T2開始時点で計算機ノード100Aにはシーケンス番号「2C−1」の外部入力パケット500の情報が外部入力パケット管理テーブル550に新たに追加され(枠933)、計算機ノード100Bの外部入力パケット管理テーブル550にはシーケンス番号「2B−1」の外部入力パケット500の情報が追加され(枠934)、計算機ノード100Cの外部入力パケット管理テーブル550にはシーケンス番号「2B−1」の外部入力パケット500の情報が追加される(枠935)。
送信905では各計算機ノード100A、100B、100Cはそれぞれ三つの外部入力パケット500の情報の取得を試みて、取得された外部入力パケット500の情報をノード間通信パケット600に設定して送出する。送出されるノード間通信パケット600の内容を 図29の時間T2に示す(行941)。入力同期ステップ710の値の変化が計算機ノード処理状態603の付加情報702に反映され(枠936)、計算機ノード処理状態個別詳細情報604には三つ分の外部入力パケット500の情報が設定される(枠937)。
またこの時の計算機ノード構成管理テーブル317の状態を図31の時間T2に示す(行981)。付加情報702の値が「3」に変更される(枠983)。
リスト作成907では送信905で送受信されたノード間通信パケット600の内容に基づき各計算機ノードが「受信結果リスト」を作成し、計算機ノード100A、100B、100C間で「受信結果リスト」を送受信することで「受信結果リスト」の内容を一致させる。この時に送受信されるノード間通信パケット600の内容を図30の時間T2に示す(行961)。S601での「多数決同意入力パケット」の有無の判定において、時間T2では、シーケンス番号が「2B−1」と「2C−1」の外部入力パケットが「多数決同意入力パケット」として判定される(枠966)。「多数決同意入力パケット」を確認したことにより、時間T3の処理へと移る。
時間T3での多数決定909では「多数決同意入力パケット」としてシーケンス番号が「2B−1」と「2C−1」の外部入力パケット500が選出される。
状態更新910では各計算機ノードは「多数決同意入力パケット」を基に決定入力管理テーブル800と入出力決定処理カウンタ315の更新を行う。各計算機ノード100A、100B、100Cはシーケンス番号「2B−1」と「2C−1」の外部入力パケット500の情報を決定入力管理テーブル800に設定する。この時の決定入力管理テーブル800内容は図32に示す。また同時にシーケンス番号「2B−1」と「2C−1」の外部入力パケット500の情報を外部入力パケット管理テーブル550から削除する。「多数決同意入力パケット」の内、シーケンス番号が「2B−1」の外部入力パケット500を外部ネットワーク3経由で自ら受信していない計算機ノード100Bは、決定済み入力管理テーブル810にシーケンス番号が「2B−1」の外部入力パケット500の情報をを設定する。この時の決定済み入力管理テーブル810の内容は図33に示す。また各計算機ノード100A、100B、100Cは入出力決定処理カウンタ315の値を「C011」に更新し、これが計算機ノード構成管理テーブル317に反映される(図31の枠984)。状態更新910により、計算機ノード100A、100B、100Cの状態は、図28の時間T3(行922)の様に変化する。
送信911では各計算機ノード100A、100B、100Cがそれぞれ決定したアプリケーション200の処理対象となる外部入力パケット500の情報を送受信して、各計算機ノード100A、100B、100C間で共有する。この時送受信されるノード間通信パケット600の内容は、図29の時間T3(行942)に示す。
<処理対象入力パケット選定処理の内部遅延発生の実行例(ケースB)>
説明は図34、図35、図36、図37、図38、図39、図40、図41を用いて行う。
図34は処理対象入力パケット選定処理の内部遅延発生の実行例における各計算機ノード100A、100B、100Cの処理シーケンスを示す。時間T1は計算機ノード100A、100Bの処理対象入力パケット選定処理のS300からS602の実行時間に対応し、時間T1’計算機ノード100Cの処理対象入力パケット選定処理のS300からS602の実行時間に対応する。時間T2はその次の実行周期におけるS300からS509の実行時間に対応し、時間T3は時間T2の処理結果に基き実行されるS601からS611の実行時間に対応する。また送信1001および送信1012はS402に対応し、TO1002およびTO1013はS403に対応し、リスト作成1003はS404からS508に対応し、TO1004はS509に対応し、送信1005はS402に対応し、TO1006はS403に対応し、リスト作成1007はS404からS508に対応し、TO1008はS509に対応し、多数決定1009はS601に対応し、状態更新1010はS604からS609に対応し、送信1011はS611に対応する。
図35はケースBにおける各計算機ノードの外部入力パケット管理テーブル、計算機ノード処理状態テーブル、入出力決定処理カウンタの時間別内容を示す。列および行の構成は、図28と同様である。
図36はケースBにおいて計算機ノード間で各計算機ノードが受信した外部入力パケット500の内容を交換するために送受信されるノード間通信パケット600の時間別内容を示す。列構成と行1042と行1043の行構成は図29と同様であるが、時間T1および時間T1’ の行構成のみ異なっている。行1040は時間T1の送信1001に対する計算機ノード100A、100Bのノード間通信パケット600内容を示し、行1041は時間T1’ の送信1012に対する計算機ノード100Cのノード間通信パケット600内容を示す。
図37はケースBにおいて計算機ノード間で各計算機ノードが作成したリストを交換するために送受信されるノード間通信パケット600の時間別内容を示す。列構成と行1061の行構成は図30と同様であるが、行1060の行構成が異なる。行1060は時間T1のリスト作成1003に対する計算機ノード100A、100Bのノード間通信パケット600内容を示す。行1064の空行は、計算機ノード100Cがノード間通信を行っていないことを意味する。
図38はケースBにおける計算機ノード100A、100Bの計算機ノード構成管理テーブル317の時間別内容を示す。列構成と行1081と行1082の行構成は図31と同様であるが、行1080の行構成が異なる。行1080は時間T1における計算機ノード構成管理テーブル317の内容を表し、計算機ノード100A、100Bの情報のみ保持することを示す。行1085の空行は、計算機ノード100Cが計算機ノード構成管理テーブル内に情報を保持していないことを意味する。
図39はケースBにおける計算機ノード100Cの計算機ノード構成管理テーブル317の時間別内容を示す。列構成と行1091と行1092の行構成は図31と同様であるが、行1090の行構成が異なる。行1090は時間T1’ における計算機ノード構成管理テーブル317の内容を表し、計算機ノード100Cの情報のみ保持することを示す。行1093および行1094の空白は、計算機ノード100A、100Bが計算機ノード構成管理テーブルに情報を保持していないことを意味する。
図40はケースBにおける各計算機ノードの決定入力管理テーブル800の内容を示す。図41はケースBにおける計算機ノード100Bの決定済み入力管理テーブル810の内容を示す。
次に図34の処理シーケンスを追って、各計算機ノード100A、100B、100Cの処理状態変化を説明する。
時間T1において、各計算機ノード100A、100B、100Cは図28の行1020の状態で処理を開始する。計算機ノード100AはWS1025は「2」、ST1026は「BEGIN」、CNT1027は「C010」の値を保持する。計算機ノード100B、100Cにおいても同値である。しかし外部入力パケット管理テーブル550に保存されている情報の内容が異なり、計算機ノード100Aはシーケンス番号「2A−1」と「2B−1」の外部入力パケットの情報を保持し(枠1031)、計算機ノード100Bはシーケンス番号「2C−1」の外部入力パケットの情報のみを保持する(枠1032)。外部入力パケット500の情報を保存していない場合は「0」で示す。計算機ノード100Cは外部入力パケット500情報を保持していない(枠1033)。
送信1001では、計算機ノード100A、100Bは取得した外部入力パケット500の情報をノード間通信パケット600の計算機ノード処理状態個別詳細情報604に設定して送出する。尚時間T1で計算機ノード100Cには起動契機となる外部入力パケット500が到着していないため、計算機ノード100Cは送信1001は行わない。送出されたノード間通信パケット600の状態は図36の時間T1に示す(行1040)。計算機ノード100AはWS1025の値に従い二つの外部入力パケット500の情報(シーケンス番号が「2A−1」と「2B−1」の外部入力パケットの情報)を取得してノード間通信パケット600に設定する(行1044)。計算機ノード100Bも二つの外部入力パケット500の情報を取得しようとするが、取得できるのは1つの外部入力パケット500だけなので、取得できた一つの外部入力パケット500の情報(シーケンス番号「2C−1」の外部入力パケットの情報)ともう一つは「0」を設定する(行1045)。
時間T1’ になって、外部入力パケット500を受信した計算機ノード100Cは、当該外部入力パケット500のシーケンス番号を用いて送信1012を行う。送出されたノード間通信パケット600の内容を図36の時間T1’ に示す(行1046)。
計算機ノード100Cが送信1012を行っている間に、計算機ノード100A、100Bは「受信結果リスト」を作成し、計算機ノード間で送信する(リスト作成1003)。このリスト作成1003で送受信するノード間通信パケット600の内容を図37の時間T1に示す(行1060)。「受信結果リスト」に計算機ノード100Cが取得した外部入力パケット500の情報は含まれていない(行1064)。
TO1004で計算機ノード100A、100Bは双方が送信1012で送信した「受信結果リスト」を取得し、S601で「多数決同意入力パケット」の有無を判定するが、枠1065に「多数決同意入力パケット」は存在しないため、計算機ノード100A、100BはS602で計算機ノード処理状態テーブル700の入力同期ステップ710の値を「3」に変更して時間T2内のS300を起動する。
一方計算機ノード100Cは、計算機ノード100A、100Bから送信1001で送信されるノード間通信パケット600の受信を期待してTO1013を実行するが、代わりにリスト作成1003で送信された「受信結果リスト」を受信する。そして計算機ノード100Cは、S504およびS505で計算機ノード処理状態の不一致を検出し、S506で計算機ノード処理状態テーブル700のPenalty703の値を「1」に更新する。 計算機ノード100A、100Bから計算機ノード100Cが受信した「受信結果リスト」中に「多数決同意入力パケット」をが存在しないため、計算機ノード100CはS602で計算機ノード処理状態テーブル700の入力同期ステップ710の値を「3」に変更して時間T2内のS300を起動する。
時間T1における計算機ノード100A、100Bの計算機ノード構成管理テーブル317の内容を図38に示す(行1080)。計算機ノード100A、100Bは計算機ノード100Cの情報を計算機ノード構成管理テーブルに保持していない(行1085の空行)。また時間T1’ における計算機ノード100Cの計算機ノード構成管理テーブル317の状態を図39に示す(行1090)。計算機ノード100Cは計算機ノード100A、100Bの情報は計算機ノード構成管理テーブルに保持していない(行1093、行1094の空行)。
時間T2の開始時点における各計算機ノード100A、100B、100Cの状態を図35の時間T2に示す(行1029)。計算機ノード100AのWS1023は、時間T1におけるS602の実行により、値が「3」に変化しているが、これは計算機ノード100B、100Cも同様である。計算機ノード100Cには、時間T1’ の処理中に到着した新たな外部入力パケット500の情報(シーケンス番号「2A−1」の外部入力パケットの情報)が保持される(枠1034)。
送信1005では各計算機ノード100A、100B、100Cはそれぞれ三つの外部入力パケット500情報の取得を試みて、取得された外部入力パケット500情報をノード間通信パケット600に設定して送出する。送出されるノード間通信パケット600の状態を図36の時間T2に示す(行1042)。計算機ノード100Cが送出したノード間通信パケット600には、時間T1’ のS506で更新されたPenalty703の値「1」が保持される(枠1047)。
リスト作成1007では送信1005で送受信されたノード間通信パケット600から「受信結果リスト」を作成し、各計算機ノード100A、100B、100C間で「受信結果リスト」内容を一致化させる。この時に送受信されるノード間通信パケット600の内容を図37の時間T2に示す(行1061)。S601での「多数決同意入力パケット」の有無を判定において、時間T2では、シーケンス番号「2A−1」の外部入力パケットが「多数決同意入力パケット」として判定される(枠1065と枠1066)。「多数決同意入力パケット」を確認したことにより、時間T3の処理へと移る。
時間T2における計算機ノード100A、100Bの計算機ノード構成管理テーブル317の状態を図38に示す(行1081)。計算機ノード100A、100Bは同期した計算機ノード100Cの情報を計算機ノード構成管理テーブルに反映させる(行1086)。また計算機ノード100Cの計算機ノード構成管理テーブル317の状態を図39に示す(行1091)。計算機ノード100Cは計算機ノード100A、100Bの情報を新たに計算機ノード構成管理テーブルに保持する(行1096と行1097)。
時間T3での多数決定909では「多数決同意入力パケット」としてシーケンス番号が「2A−1」の外部入力パケットを選出する。状態更新910では「多数決同意入力パケット」を基に決定入力管理テーブル800と入出力決定処理カウンタ315の更新を行う。各計算機ノード100A、100B、100Cはシーケンス番号が「2A−1」の外部入力パケット500の情報を決定入力管理テーブル800に設定する。この時の決定入力管理テーブル800内容は図40に示す。また同時にシーケンス番号が「2A−1」の外部入力パケット500の情報を外部入力パケット管理テーブル550から削除する。
「多数決同意入力パケット」となったシーケンス番号「2A−1」の外部入力パケット500を自ら受信していない計算機ノード100Bは、決定済み入力管理テーブル810にシーケンス番号「2A−1」の外部入力パケット500の情報をを設定する。この時の決定済み入力管理テーブル810内容は図41に示す。また各計算機ノード100A、100B、100Cは入出力決定処理カウンタ315の値を「C011」に更新し、これが計算機ノード構成管理テーブル317に反映される(図38の枠1087と図39の枠1098)。状態更新910により、計算機ノード100A、100B、100Cの状態は、図35の時間T3(行1030)の様に変化する。
送信911では各計算機ノード100A、100B、100Cがそれぞれ決定したアプリケーション200の処理対象となる外部入力パケット500情報を送受信して、各計算機ノード100A、100B、100C間で共有する。この時送受信されるノード間通信パケット600の内容は、図36の時間T3(行1043)に示す。
<実行結果決定処理(ケースC)>
説明は図42、図43、図44、図45、図46、図47、図48、図49を用いて行う。
図42は各計算機ノードの処理シーケンスを示す。
時間T1は計算機ノード100A、100Bの実行結果決定処理のS801からS913に対応し、時間T1’ は計算機ノード100Cの実行結果決定処理のS801からS913に対応する。時間T2はS1001からS1208に対応する。計算機ノード100Bでは時間T3はS1301からS1308に対応し、時間T4はS1309以降の処理に対応する。計算機ノード100A、100Cでは時間T3はS1301からS1315に対応し、時間T4はS1316およびS1317以降の処理に対応する。また送信1101および送信1105はS804に対応し、TO1102およびTO1106はS805に対応し、リスト作成1103はS806からS912に対応し、TO1104はS913に対応する。多数決定1107はS1001からS1105に対応し、状態更新1108はS1101からS1104に対応し、送信1109はS1105に対応し、TO1110はS1106に対応し、リスト作成1119はS1107からS1208に対応する。状態更新1120はS1301からS1305に対応し、送信1121はS1306とS1307に対応し、TO1122はS1308に対応し、出力1123はS1309に対応する。状態更新1124はS1301からS1312に対応し、送信1125はS1313とS1314に対応し、TO1126はS1315に対応し、監視1127はS1316とS1317以降の処理に対応する。
図43は時間T1およびT1'における送信(1101、1105)で送受信されるノード間通信パケットの内容を示す。計算機ノード処理状態個別詳細情報604には、各計算機ノード100A、100B、100Cで実行したアプリケーション200の演算結果を保持する。行1131は時間T1の送信1101において送受信されたノード間通信パケット600の内容を示し、具体的には構成行の行1133は計算機ノード100Aの送信内容を示し、行1134は計算機ノード100Bの送信内容を示すが、行1135の空行は時間T1に計算機ノード100Cは送信を行わなかったことを意味する。行1132は時間T1’ の送信1105において送受信される通信パケット600の内容を示し、具体的には構成行の行1138は計算機ノード100Cの送信内容を示すが、行1136と行1137の空行は計算機ノード100A、100Bは送信していないことを意味する。
図44は時間T2にて送信1109で各計算機ノード100A、100B、100C間で送受信されるノード間通信パケットの内容を示す。計算機ノード処理状態個別詳細情報604には、各計算機ノード100A、100B、100Cが決定した「リーダー選出結果」を保持する。行1140は時間T2の送信1109において送受信されるノード間通信パケット600の内容を示し、具体的には構成行の行1141は計算機ノード100Aの送信内容を示し、行1142は計算機ノード100Bの送信内容を示し、行1143は計算機ノード100Cの送信内容を示す。
図45は時間T3にて送信1121および1125で各計算機ノードが送受信するノード間通信パケットの内容を示す。
行1150は時間T3の送信1121および送信1125において送受信されるノード間通信パケット600内容を示し、具体的には構成行の行1151は計算機ノード100Aの送信内容を示し、行1152は計算機ノード100Bの送信内容を示し、行1153は計算機ノード100Cの送信内容を示す。
図46は時間T1のリスト作成1103において、計算機ノード100A、100Bが送受信するノード間通信パケットの内容を示す。行1160は時間T1のリスト作成1103において計算機ノード100A、100Bの間で送受信されるノード間通信パケット600内容を示し、これは「送信」処理にて送受信したノード間通信パケット600を結合した「受信結果リスト」を表す。構成行の行1161は計算機ノード100Aの「送信」内容を示し、行1162は計算機ノード100Bの「送信」内容を示す。行1163の空行は、計算機ノード100Cからはノード間通信パケット600を受取っていないため、「受信結果リスト」に計算機ノード100Cから受信したノード間通信パケットが含まれていないことを意味する。
図47は時間T2のリスト作成1119において、各計算機ノード間で送受信されるノード間通信パケットの内容を示す。行1170はリスト作成1119において各計算機ノード100A、100B、100Cの間で送受信されるノード間通信パケット600内容を示し、これは「送信」処理にて送受信したノード間通信パケット600を結合した「受信結果リスト」を表す。構成行の行1171は計算機ノード100Aの「送信」内容を示し、行1172は計算機ノード100Bの「送信」内容を示し、行1173は計算機ノード100Cの「送信」内容を示す。
図48は任意計算機ノードの計算機ノード構成管理テーブルの時間別内容を示す。時間別内容は、計算機ノード100A、100B、100Cにおいて同一である。行1180は時間T1における計算機ノード構成管理テーブル317の計算機ノード識別子601列、入出力決定処理カウンタ602列、計算機ノード処理状態603列の状態を示す。行1181は時間T2における計算機ノード構成管理テーブル317の保持情報を示し、行1182はT3における計算機ノード構成管理テーブル317の保持情報を示す。入力同期時計算機ノード総数317Aは入力同期完了時に設定された値(図48中では「3」)であり、出力同期処理中は変更されない。
図49は実行結果決定処理の実行例における任意計算機ノードの各計算機ノードの決定出力管理テーブルの内容を示す。
次に図42の処理シーケンスを追って、各計算機ノード100A、100B、100Cの処理状態変化を説明する。
送信1101で計算機ノード100A、100Bは選定入力パケット処理S115によるアプリケーション200の演算結果「X」をノード間通信パケット600の計算機ノード処理状態個別詳細情報604に設定して送出する。送出されたノード間通信パケット600の内容は図43の時間T1に示す(行1131)。計算機ノード100Cは実行結果決定処理の開始が遅れているため、時間T1での送信は行っていない(行1135の空行)。
リスト作成1103では計算機ノード100A、100Bは送信1101で送受信したノード間通信パケット600を結合して「受信結果リスト」を作成し、各計算機ノード100A、100B、100Cに対して送信する。送出されたノード間通信パケット600の内容を図46に示す。「受信結果リスト」には、計算機ノード100A、100Bから受信した情報は含まれるが(行1161と行1162)、計算機ノード100Cから受信した情報は含まれない(行1163の空行)。
計算機ノード100A、100BはTO1104で双方の「受信結果リスト」を取得し、多数決定1107の処理を開始する。
一方計算機ノード100Cは時間T1’ で実行結果決定処理を開始し、送信1105でアプリケーション200の演算結果「X」をノード間通信パケット600の計算機ノード処理状態個別詳細情報604に設定して送出する。時間T1’ における送出されたノード間通信パケット600の内容を図43の時間T1’ に示す(行1132)。時間T1’ で送信を行っているは計算機ノード100Cのみで(行1138)、計算機ノード100A、100Bは送信していない(行1137と行1138の空行)。
計算機ノード100CはTO1106で計算機ノード100A、100Bからそれぞれの計算機ノードのアプリケーション200による演算の演算結果を受信することを期待するが、代りにリスト作成1103で送信された「受信結果リスト」を受信する。S904およびS905で計算機ノード100Cは計算機ノード処理状態の不一致を検出し、S906で計算機ノード100Cha計算機ノード処理状態テーブル700のPenalty703の値を「1」に更新する。計算機ノード100Cは受信した「受信結果リスト」に自身のアプリケーション200の演算結果を加えて「受信結果リスト」を作成し、多数決定1107の処理を開始する。
多数決定1107では、計算機ノード100A、100Bはリスト作成1103で共有した「受信結果リスト」を基にアプリケーション200の演算結果の多数決判定を行う。 計算機ノード100CはTO1106で取得、作成した「受信結果リスト」を基に多数決判定を行う。本例では計算機ノード100A、100B、100Cのアプリケーション200の演算結果は全て同一の「X」であるため、「受信結果リスト」に含まれる全ての計算機ノードが「多数派」として判断される。
状態更新1108では「受信結果リスト」に含まれる計算機ノードから、リーダー候補となる計算機ノードを選出し、リーダー選出の順位付けを行う。計算機ノード100A、100Bが保持する「受信結果リスト」には「計算機ノード100A、100B」が含まれているため、何れもS1102で「計算機ノード100A、100B」を選出し、「計算機ノード100B」を一位、「計算機ノード100A」を二位と順位付けする(本例では計算機ノード識別子の値の降順で順位付けを行う)。一方計算機ノード100Cが保持する「受信結果リスト」には「計算機ノード100A、100B、100C」が含まれているため、「計算機ノード100A、100B、100C」を選出し、「計算機ノード100B」を一位、「計算機ノード100A」を二位、「計算機ノード100C」を三位と順位付けする。「計算機ノード100C」は最も大きな計算機ノード識別子の値を持つが、Penalty703に「1」が設定されているため最下位の三位に順位付けされる。
送信1109では各計算機ノード100A、100B、100Cは状態交信1108のリーダー選出結果をノード間通信パケット600の計算機ノード処理状態個別詳細情報604に設定して送出する。送信されるノード間通信パケット600の内容を図44に示す。計算機ノード100A、100Bは「計算機ノード100C」のリーダー選出順位は決定せずに送信する(枠1144と枠1145)。一方計算機ノード100Cは自身のリーダー選出順位を付加して送信する(枠1146)。
リスト作成1119では計算機ノード100A、100B、100C間で交換したリーダ選出順位を照合して結合した「受信結果リスト」の作成と共有を行う。「受信結果リスト」が設定された、リスト作成1119で送受信されるノード間通信パケット600の内容を図47に示す。計算機ノード100A、100Bが作成した「受信結果リスト」には、計算機ノード100Cのリーダー選出順位が補完され、反映される(枠1174と枠1175)。
時間T3以降は、計算機ノード100A、100B、100Cはリーダー選出順位に基き「リーダー」と「モニター」に分かれ、それぞれ異なる処理を行う。計算機ノード100Bは「リーダー」になり、計算機ノード100A、100Cは「モニター」となる。
状態更新1120で計算機ノード100Bは、リーダー選出順位により自身を「リーダー」と判断し、計算機ノード処理状態テーブル700の処理状態704に「LEADER」を設定し、入出力決定処理カウンタ315の値を変更する。計算機ノード100A、100Cについては「モニター」と判断する。
一方状態更新1124で計算機ノード100A、100Cは、リーダー選出順位により自身を「モニター」と判断し、計算機ノード処理状態テーブル700の処理状態704に「MONITOR」を設定し、入出力決定処理カウンタ315の値を変更する。計算機ノード100Bについては「リーダー」と判断する。
状態更新1120および状態更新1124は、自他計算機ノードの情報および「リーダー/モニター」判断結果を計算機ノード構成管理テーブル317と決定出力管理テーブル321に反映する。時間T3における計算機ノード構成管理テーブル317の内容を図48の時間T3(行1182)に、決定出力管理テーブル321の内容を図49に示す。
送信1121および送信1125で、各計算機ノード100A、100B、100Cは自身の計算機ノード処理状態を送信する。送信1121および送信1125で送信されるノード間通信パケット600の内容を図45に示す。各計算機ノード100A、100B、100Cの更新された入出力決定処理カウンタ602値(枠1154)と、「リーダー/モニター」を示す処理状態704(枠1155)が通知される。
出力1123で「リーダー」である計算機ノード100BはS1309を実行し、アプリケーション200の演算結果である信号を外部に送信する。
監視1127において「モニター」である計算機ノード100A、100Cは、S1316およびS1317を実行して出力1123の信号送出を監視することで「リーダー」である計算機ノード100Bの外部出力の正常/異常を判断し、再同期検知処理S111または出力異常処理S1400を実行する。