(57)【要約】【課題】並列処理を実行するシステムにおいて発生したタイムアウトの原因の特定を支援することを目的とする。【解決手段】監視プログラムは、第１ノードからの所定メッセージを待つ状態であるときにタイムアウトが発生した場合、自ノードの識別子を含む監視メッセージを第１ノードに送信し、第２ノードからの所定メッセージを待つ状態であるときに監視メッセージを受信した場合、受信した監視メッセージに自ノードの識別子を付加し、自ノードの識別子が付加された監視メッセージを第２ノードに送信し、受信した監視メッセージに自ノードの識別子が含まれている場合、受信した監視メッセージに含まれる各識別子を表示する処理をノードに実行させる。【選択図】図１４
2019219755.tif 000002
【特許請求の範囲】
【請求項１】
複数のノードによる並列処理を行うシステムにおいて前記ノードに実行させる監視プログラムであって、
第１ノードからの所定メッセージを待つ状態であるときにタイムアウトが発生した場合、自ノードの識別子を含む監視メッセージを前記第１ノードに送信し、
第２ノードからの所定メッセージを待つ状態であるときに前記監視メッセージを受信した場合、受信した前記監視メッセージに自ノードの識別子を付加し、前記自ノードの識別子が付加された前記監視メッセージを前記第２ノードに送信し、
受信した前記監視メッセージに自ノードの識別子が含まれている場合、受信した前記監視メッセージに含まれる各識別子を表示する
処理を前記ノードに実行させるための監視プログラム。
【請求項２】
前記監視メッセージを受信したときに自ノードが休止状態である場合、自ノードの識別子と休止状態となった原因に関する情報とを前記監視メッセージに付加し、前記監視メッセージの送信元ノードに前記監視メッセージを送信する、
処理を前記ノードに実行させることを特徴とする請求項１記載の監視プログラム。
【請求項３】
受信した前記監視メッセージに自ノードの識別子と前記休止状態となった原因に関する情報とが含まれている場合、前記情報を表示し、
受信した前記監視メッセージに自ノードの識別子が含まれ、前記休止状態となった原因に関する情報が含まれていない場合、デッドロックが発生したことを示すメッセージを表示する、
処理を前記ノードに実行させることを特徴とする請求項２記載の監視プログラム。
【請求項４】
前記第１ノードからの所定メッセージを待つ状態が発生した場合、前記所定メッセージの種類を記録し、
前記第１ノードからの所定メッセージを待つ状態であるときにタイムアウトが発生した場合、記録した前記所定メッセージの種類と自ノードの識別子とを含む監視メッセージを前記第１ノードに送信し、
受信した前記監視メッセージに自ノードの識別子が含まれている場合、受信した前記監視メッセージに含まれる前記所定メッセージの種類と各識別子とを表示する
処理を前記ノードに実行させることを特徴とする請求項１乃至３のうちのいずれか１項に記載の監視プログラム。
【請求項５】
複数のノードによる並列処理を行うシステムにおける前記ノードが、
第１ノードからの所定メッセージを待つ状態であるときにタイムアウトが発生した場合、自ノードの識別子を含む監視メッセージを前記第１ノードに送信し、
第２ノードからの所定メッセージを待つ状態であるときに前記監視メッセージを受信した場合、受信した前記監視メッセージに自ノードの識別子を付加し、前記自ノードの識別子が付加された前記監視メッセージを前記第２ノードに送信し、
受信した前記監視メッセージに自ノードの識別子が含まれている場合、受信した前記監視メッセージに含まれる各識別子を表示する
処理を実行することを特徴とする監視方法。
【請求項６】
複数の並列処理装置による並列処理を行うシステムにおける前記並列処理装置であって、
第１ノードからの所定メッセージを待つ状態であるときにタイムアウトが発生した場合、自ノードの識別子を含む監視メッセージを前記第１ノードに送信する第１送信部と、
第２ノードからの所定メッセージを待つ状態であるときに前記監視メッセージを受信した場合、受信した前記監視メッセージに自ノードの識別子を付加する記録部と、
前記自ノードの識別子が付加された前記監視メッセージを前記第２ノードに送信する第２送信部と、
受信した前記監視メッセージに自ノードの識別子が含まれている場合、受信した前記監視メッセージに含まれる各識別子を表示する出力部と
を備えることを特徴とする並列処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、監視プログラム、監視方法、および並列処理装置に関する。
【背景技術】
【０００２】
近年、大規模な科学技術計算等を実行する場合、分散メモリ型のシステム上で、複数のノードによる並列処理が行われる。複数のノードによる並列処理が行われる場合、並列処理システムの規模が大きくなるほど、ノード間のメッセージ通信でタイムアウトが発生した時の原因の特定が困難となる。
【０００３】
関連する技術として、システム内の複数の構成要素（例えば、トランザクション）間の依存性の循環的連鎖を含む潜在的デッドロックを検出する技術が提案されている（例えば、特許文献１を参照）。
【０００４】
また、関連する技術として、システム運用中にロック待ちが発生したときに、初めて、手続と資源の要求と取得の関係を生成し、この要求と取得の関係に循環が発生していないかチェックする技術が提案されている（例えば、特許文献２を参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平８−２６３３５２号公報
【特許文献２】特開平１１−３１０８０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
分散メモリ型の並列システム上で並列処理が行われる際、例えばメッセージの転送ルートの設定が誤っている場合、デッドロックが発生する可能性がある。
【０００７】
デッドロックの有無を確認するために、事象待ちの連鎖を調査するには、他のノード上のメッセージ受信待ち状況の情報全てを取得することが考えられる。また、例えば、グラフ理論に基づくデッドロック検出アルゴリズム等を生成し、並列処理システムに導入する場合、大規模なプログラムを並列処理システムに導入することが考えられる。しかし、これらの方法では、調査のための準備に時間がかかる。
【０００８】
１つの側面として、本発明は、並列処理を実行するシステムにおいて発生したタイムアウトの原因の特定を支援することを目的とする。
【課題を解決するための手段】
【０００９】
１つの態様では、監視プログラムは、複数のノードによる並列処理を行うシステムにおいて前記ノードに実行させる監視プログラムであって、第１ノードからの所定メッセージを待つ状態であるときにタイムアウトが発生した場合、自ノードの識別子を含む監視メッセージを前記第１ノードに送信し、第２ノードからの所定メッセージを待つ状態であるときに前記監視メッセージを受信した場合、受信した前記監視メッセージに自ノードの識別子を付加し、前記自ノードの識別子が付加された前記監視メッセージを前記第２ノードに送信し、受信した前記監視メッセージに自ノードの識別子が含まれている場合、受信した前記監視メッセージに含まれる各識別子を表示する処理を前記ノードに実行させる。
【発明の効果】
【００１０】
１つの側面によれば、並列処理を実行するシステムにおいて発生したタイムアウトの原因の特定を支援することができる。
【図面の簡単な説明】
【００１１】
【図１】実施形態におけるノードおよび表示装置の一例を示す図である。
【図２】第１のシステム構成例を示す図である。
【図３】第１のシステムにおける監視メッセージの例を示す図である。
【図４】第１のシステムにおけるエラーメッセージの例を示す図である。
【図５】第２のシステム構成例を示す図である。
【図６】第２のシステムにおける監視メッセージの例を示す図である。
【図７】第２のシステムにおけるエラーメッセージの例を示す図である。
【図８】第３のシステム構成例を示す図である。
【図９】第３のシステムにおける監視メッセージの例を示す図である。
【図１０】並列処理システムの監視方法の一例を示す図である。
【図１１】待ち状態発生時におけるノードの動作例を示す図である。
【図１２】タイムアウト発生時におけるノードの動作例を示す図である。
【図１３】監視メッセージ受信時におけるノードの動作例を示す図である。
【図１４】実施形態の処理の一例を示すフローチャートである。
【図１５】図１４のステップＳ１０２の処理の一例を示すフローチャートである。
【図１６】図１４のステップＳ１０４の処理の一例を示すフローチャートである。
【図１７】図１４のステップＳ１０６の処理の一例を示すフローチャートである。
【図１８】ノードのハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【００１２】
近年、大規模な科学技術計算等を実行する場合、分散メモリ型のシステム上で、複数のノードによる並列処理が行われる。その際、プログラム言語の実行時処理系(runtime system)が、複数の計算ノード間のメッセージ通信や同期処理を管理し、利用者プログラムに対して体系化されたインタフェースを提供している。プログラム言語の実行時処理系として、例えば、Message Passing Interface（ＭＰＩ）などのライブラリ関数、Fortran2008以降でサポートされるCoArray機能やUnified Parallel C （ＵＰＣ）等が用いられる。
【００１３】
並列処理が行われる際、デッドロックが発生する可能性がある。デッドロックとは、複数の異なる動作単位の間で、他の動作単位の事象待ちを解消させるための動作を行う際の順番を調査すると、循環が存在することを指す。例えば、動作単位Ａ１が、動作単位Ａ２が発生させる事象を待ち、動作単位Ａ２が、動作単位Ａ３が発生させるべき事象を待つとする。そして、動作単位Ａｋが、動作単位Ａ１が発生させるべき事象を待っている場合、デッドロックが発生している事が想定される。
【００１４】
通信ライブラリ関数ないしプログラム言語の実行時処理系の内部にデッドロック検出の仕組みを含めるために、検出のために利用者プログラムにリンクされるプログラムの命令列自体の長さを調査することが考えられる。しかし、この調査のための負担が増加するという課題がある。また、全ノードでのメッセージ待ち合わせ関係を定義したデータ等を記憶しておくことが考えられるが、プログラムの実行開始以前に記憶する静的なデータが増加するため、好ましくない。さらに、利用者にとっての実用的価値を十分高くするためには、デッドロック以外の原因によるタイムアウト発生時の場合にも、調査に十分な情報を表示あるいは記録する事が好ましい。
【００１５】
＜実施形態＞
以下、図面を参照して、実施形態について説明する。図１は、実施形態におけるノード１および表示装置２の一例を示す図である。ノード１は、並列処理装置の一例であり、複数のノード１による並列処理を行うシステムに含まれる。ノード１は、並検出部１１と記録部１２と生成部１３と送信部１４と判定部１５と出力部１６と記憶部１７とを含む。送信部１４は、第１送信部および第２送信部の一例である。
【００１６】
検出部１１は、所定の並列処理において、他ノードからの所定メッセージを待つ状態（待ち状態）が発生したか判定する。また、検出部１１は、監視対象プログラムが実行する並列処理において待ち状態である期間中に、タイムアウトが発生したか判定する
記録部１２は、検出部１１が待ち状態が発生したことを検出した場合、監視メッセージ関連情報を記録する。記録部１２は、例えば、待ち状態となった処理で他のノードに送信されるメッセージの種類、および自ノードを示す識別情報を、監視メッセージ関連情報として記録する。
【００１７】
記録部１２は、監視メッセージを受信したときに自ノードが休止状態である場合、受信した監視メッセージに休止状態となった原因に関する情報を付加する。休止状態は、プロセスの実行が中断されている状態であり、例えば、Ｕｎｉｘ系のOperating System（ＯＳ）で用いられるシステムコール「ｓｌｅｅｐ」により発生する。
【００１８】
記録部１２は、他のノード（第２ノード）からの所定メッセージを待つ状態であるときにいずれかのノードから監視メッセージを受信した場合、その監視メッセージに自ノードを示す識別子を付加する。
【００１９】
生成部１３は、監視メッセージ関連情報を用いて、タイムアウトが発生した処理で待つメッセージの種類と自ノードの識別子を含む監視メッセージを生成する。
【００２０】
送信部１４は、他のノード（第１ノード）からの所定メッセージを待つ状態であるときにタイムアウトが発生した場合、生成部１３が生成した監視メッセージを第１ノードに送信する。
【００２１】
送信部１４は、監視メッセージを受信したときに自ノードが休止状態である場合、記録部１２により休止状態となった原因に関する情報が付加された監視メッセージを、その監視メッセージの送信元ノードに送信する。
【００２２】
送信部１４は、監視メッセージが自ノードの識別子を含まず、末端のノードを経由していた場合、その監視メッセージを、その監視メッセージの前回の送信元に送信する。
【００２３】
送信部１４は、他のノード（第２ノード）からの所定メッセージを待つ状態であるときに第２ノードから監視メッセージを受信した場合、自ノードを示す識別子が付加された監視メッセージを、監視対象プログラムの待ち合わせ対象ノードに送信する。
【００２４】
判定部１５は、監視メッセージの受信時に各種判定処理を行う。判定部１５の判定処理により、監視メッセージの受信時に記録部１２や送信部１４等が実行する処理が選択される。
【００２５】
出力部１６は、監視メッセージ内のメッセージ種類や識別子を含むエラーメッセージを表示する。出力部１６は、例えば、エラーメッセージを表示装置２に表示するとともに、ログデータとして出力してもよい。
【００２６】
出力部１６は、受信した監視メッセージに自ノードの識別子と休止状態となった原因に関する情報とが含まれている場合、情報を表示する。出力部１６は、受信した監視メッセージに自ノードの識別子が含まれ、休止状態となった原因に関する情報が含まれていない場合、デッドロックが発生したことを示すメッセージを表示する。
【００２７】
記憶部１７は、監視メッセージ関連情報等を記録する。表示装置２は、ノード１に接続されており、出力部１６からの指示に応じて、エラーメッセージを表示する。なお、表示装置２は、ノード１に含まれていてもよい。
【００２８】
図２は、第１のシステム構成例を示す図である。図２は、並列処理を実行する際に、複数のノードによる事象待ちが循環することにより、デッドロックが発生しているシステムの例を示す。図２に示すシステムは、並列処理を行うノード１−１、１−２、１−３、および１−４を含む。なお、以下の説明において、複数のノードを区別しない場合、ノード１と称する。
【００２９】
図２による矢印は、所定の処理を行うノード１から、その所定処理を行う前に実行する必要がある処理を行う他ノードに対して向けられている。そして、所定の処理を行うノード１は、他ノードが実行する処理により生成される所定メッセージを待っているとする。この場合、他ノードを、待ち合わせ対象ノードと称する。
【００３０】
例えば、所定処理を行うノードがノード１−１である場合、待ち合わせ対象ノードは、ノード１−２である。そして、ノード１−１は、ノード１−２が処理を実行し所定メッセージをノード１−１に送信することを待っている。同様に、ノード１−２は、ノード１−３からのメッセージを待ち、ノード１−３は、ノード１−４からのメッセージを待ち、ノード１−４はノード１−１からのメッセージを待っている。図２に示す例では、並列処理が完了せずにデッドロックとなり、各ノード１でタイムアウトが発生する。
【００３１】
図２に示す例において、ノード１−１に対するノード１−２は、第１ノードの一例である。ノード１−２に対するノード１−３、ノード１−３に対するノード１−４、ノード１−４に対するノード１−１は、第２ノードの一例である。
【００３２】
図３は、第１のシステムにおける監視メッセージの例を示す図である。図２に示す例において、ノード１−１でタイムアウトが発生し、ノード１−１が監視メッセージを生成したとする。なお、以下の説明において、タイムアウトの発生により監視メッセージを生成したノード１を起点ノードと称することがある。図３（ａ）は、ノード１−１がノード１−２に送信する監視メッセージを示す。図３（ｂ）は、ノード１−２がノード１−３に送信する監視メッセージを示す。図３（ｃ）は、ノード１−３がノード１−４に送信する監視メッセージを示す。図３（ｄ）は、ノード１−４がノード１−１に送信する監視メッセージを示す。
【００３３】
図３において、監視メッセージの先頭に記述される記号は、並列処理において各ノード１が他のノード１に送信するメッセージの種類を示す。"Ｇ"は、”ｇａｔｈｅｒ”というMessage Passing Interface（ＭＰＩ）で発生するメッセージを示す。ノード１−１は、メッセージの種類"Ｇ"と自ノードの識別子”１”とを含む監視メッセージを生成し、ノード１−２に送信する。他のノード１は、自ノードの識別子を監視メッセージに付加し、待ち合わせ対象ノードに送信する。ノード１−１は、ノード１−４から受信した監視メッセージに自ノードの識別子が監視メッセージに含まれているため、デッドロックが発生していると判定する。
【００３４】
監視メッセージの内容は、図３に示す内容に限られない。例えば、メッセージの種類を数字で表現してもよい。下記のカッコ内はメッセージの種類を示す記号である。
１：ブロッキング型の１対通信
ｓｅｎｄ（１，２）
ｒｅｃｖ（１，２）
２：他の動作単位からの待ち合わせを行う集団通信
ｂａｒｒｉｅｒ（２，１）
ｇａｔｈｅｒ（２，２）
ｒｅｄｕｃｅ（２，３）
【００３５】
例えば、ノードの識別子が４であるノードが集団通信”ｇａｔｈｅｒ”を実行している場合に、監視メッセージは（２，２，４）となる。
【００３６】
図４は、第１のシステムにおけるエラーメッセージの例を示す図である。図４に示すエラーメッセージは、ノード１−１が、図３（ｄ）に示す監視メッセージを受信した際に表示される。ノード１−１は、図４に示すエラーメッセージを表示装置２に表示させるとともに、ログデータとして出力してもよい。エラーメッセージは、監視メッセージが経由したノードを示す識別子（ノード番号１，２，３，４）と、タイムアウトが発生した処理で待つメッセージの種類（ｇａｔｈｅｒ）を含む。
【００３７】
ユーザは、図４に示すエラーメッセージを参照することにより、デッドロックが発生したことと、デッドロックされているノード、原因となったメッセージ種類を知ることができる。すなわち、ノード１は、図４に示すエラーメッセージを出力することにより、タイムアウトの原因の特定を支援することができる。
【００３８】
図５は、第２のシステム構成例を示す図である。図５は、あるノードが休止状態となることにより他のノードにタイムアウトが発生するシステムの例を示す。図２に示すシステムは、並列処理を行うノード１−１、１−２、１−３、および１−４を含む。図２と同様に、矢印は、所定の処理を行うノードから、待ち合わせ対象ノードに向けられている。
【００３９】
すなわち、ノード１−２は、ノード１−１からのメッセージを待ち、ノード１−３は、ノード１−１からのメッセージを待ち、ノード１−４は、ノード１−１のメッセージを待っている。図２に示す例では、ノード１−１からメッセージが送信されないことにより並列処理が完了せずに、ノード１−２、１−３、および１−４でタイムアウトが発生する。なお、以下の説明において、休止状態となり他のノードのタイムアウト発生原因となっているノード１を末端ノードと称することがある。図５に示す例では、ノード１−１が末端ノードである。
【００４０】
図５に示す例において、ノード１−２、１−３、１−４に対するノード１−１は、第１ノードの一例である。
【００４１】
図６は、第２のシステムにおける監視メッセージの例を示す図である。図６に示す例において、ノード１−１でタイムアウトが発生したとする。図６（ａ）は、ノード１−２がノード１−１に送信する監視メッセージを示す。図６（ｂ）は、ノード１−３がノード１−１に送信するメッセージを示す。図６（ｃ）は、ノード１−４がノード１−１に送信する監視メッセージを示す。図３に示す例と同様に、図６に示す監視メッセージは、並列処理において各ノード１が他のノード１に送信するメッセージの種類と自ノードの識別子を含む。
【００４２】
図６（ｄ）は、ノード１−１がノード１−２に送信する監視メッセージを示す。図６（ｅ）は、ノード１−１がノード１−３に送信するメッセージを示す。図６（ｆ）は、ノード１−１がノード１−４に送信するメッセージを示す。図６（ｄ）におけるメッセージのうち、”１”はノード１−１の識別子であり、”Ｒ”はノード１−１を休止状態にさせたシステムコール「Ｒｅａｄ」を示す記号であり、”ａｒｇ１”、”ａｒｇ２”は、「Ｒｅａｄ」の引数を示す。図６（ｅ）、（ｆ）の監視メッセージも同様の構成である。すなわち、休止状態となっているノード１−１は、自ノードの識別子、休止状態にさせたシステムコール、および引数を、受信した監視メッセージに付加して、監視メッセージの送信元に返す。
【００４３】
図７は、第２のシステムにおけるエラーメッセージの例を示す図である。図７に示すエラーメッセージは、ノード１−２が、図６（ｄ）に示す監視メッセージを受信した際に表示される。ノード１−２は、図７に示すエラーメッセージを表示装置２に表示させるとともに、ログデータとして出力してもよい。エラーメッセージは、監視メッセージが経由したノードを示す識別子（ノード番号１，２）と、ノード１−１が休止状態となった原因に関する情報（ｒｅａｄ（ａｒｇ１，ａｒｇ２））を含む。
【００４４】
ユーザは、図７に示すエラーメッセージを参照することにより、ノード１−１が休止状態となったことと、休止状態となった原因を知ることができる。すなわち、ノード１は、図７に示すエラーメッセージを出力することにより、タイムアウトの原因の特定を支援することができる。
【００４５】
図８は、第３のシステム構成例を示す図である。図８は、あるノードが休止状態となることにより他のノードにタイムアウトが発生するシステムであって、メッセージ待ちの関係がＮ対１（Ｎは２以上の整数）となる例を示す。図８に示すシステムは、並列処理を行うノード１−１、１−２、１−３、１−４、１−５、１−６および１−７を含む。図２と同様に、矢印は、所定の処理を行うノードから、待ち合わせ対象ノードに向けられている。
【００４６】
すなわち、ノード１−２は、ノード１−１からのメッセージを待ち、ノード１−３、１−５は、ノード１−２からのメッセージを待ち、ノード１−４は、ノード１−３のメッセージを待っている。また、ノード１−６は、ノード１−５からのメッセージを待ち、ノード１−７は、ノード１−４からのメッセージを待っている。図８に示す例では、ノード１−１が休止状態となり、ノード１−１からメッセージが送信されないことにより並列処理が完了せず、他のノード１でタイムアウトが発生する。図８に示す例では、ノード１−１が末端ノードである。
【００４７】
図９は、第３のシステムにおける監視メッセージの例を示す図である。図９に示す例において、ノード１−４でタイムアウトが発生したとする。図９（ａ）は、ノード１−４がノード１−３に送信する監視メッセージを示す。図９（ｂ）は、ノード１−３がノード１−２に送信する監視メッセージを示す。図９（ｃ）は、ノード１−２がノード１−１に送信する監視メッセージを示す。図９（ａ）〜（ｃ）に示す例では、図３、図６に示す例と同様に、監視メッセージは、並列処理において各ノード１が他のノード１に送信するメッセージの種類と自ノードの識別子を含む。
【００４８】
図９（ｄ）は、ノード１−１がノード１−２に送信する監視メッセージを示す。図９（ｅ）は、ノード１−２がノード１−３に送信するメッセージを示す。図９（ｆ）は、ノード１−３がノード１−４に送信するメッセージを示す。図６（ｄ）〜（ｆ）に示す例と同様に、図９（ｄ）〜（ｆ）におけるメッセージのうち、”Ｒ”はノード１−１を休止状態にさせたシステムコール「Ｒｅａｄ」を示す記号であり、”ａｒｇ１”、”ａｒｇ２”は、「Ｒｅａｄ」の引数を示す。ノード１−２、１−３は、送信された監視メッセージをそのまま、前回の監視メッセージの送信元に返す。
【００４９】
図１０は、並列処理システムの監視方法の一例を示す図である。各ノード１は、監視プログラムおよび監視対象プログラムが記憶されている。監視プログラムは、監視対象プログラムにリンクするライブラリおよびインタフェースを含む。
【００５０】
監視プログラムは、監視対象プログラムが実行される際に実行される。ただし、監視プログラムは、監視対象プログラムとは独立して動作し、他のノードの監視プログラムと監視メッセージの送受信を常時実行可能であるとする。この監視プログラムの機能は、複数の事象を同時に待ち合わせ可能なシステムコール(例えば、Ｕｎｉｘ系のＯＳで用いられるｓｅｌｅｃｔ、ｐｏｌｌ等）を使用することにより実現される。また、監視プログラムの機能は、ＯＳの機能を用いて、監視対象プログラムと独立にスケジュールされるスレッドやプロセス内で監視プログラムを動作させる事により実現できる。
【００５１】
監視対象プログラムは、他のノード１の監視対象プログラムと所定メッセージの送受信を実行する。なお、並列処理システムは、図８に示すように１対Ｎの接続関係を含んでいてもよい。
【００５２】
図１１は、待ち状態発生時のノードの動作例を示す図である。監視対象プログラムは、メインプログラムと、ライブラリとを含む。監視対象プログラムが実行中に他ノードからの所定メッセージを待つ所定の並列処理を実行する場合、メインプログラムは、ライブラリを呼び出す。並列処理は、例えば、ｇａｔｈｅｒ等の集団通信を含む。呼び出されたライブラリは、並列処理が実行され、待ち状態が発生することを監視プログラムに通知する。また、ライブラリは、他ノードと通信を開始し、他ノードとの所定メッセージの送受信を実行する。
【００５３】
監視プログラムにより実現される記録部１２は、待ち状態が発生することを示す通知を監視対象プログラムから受け取った場合、待ち状態となった処理に関する監視メッセージ関連情報を記録する。監視メッセージ関連情報は、監視メッセージに用いられる情報であり、メッセージ種類および自ノードの識別子を含む。
【００５４】
図１２は、タイムアウト発生時におけるノードの動作例を示す図である。例えば、待ち状態が発生してから所定時間経過した場合、ライブラリがタイムアウトを発生させる。ライブラリは、監視プログラムにタイムアウトが発生したことを通知する。その後、ライブラリは、メインプログラム、および他ノードの監視対象プログラムにタイムアウトが発生したことを通知する。監視対象プログラムは、タイムアウトが発生した場合、通常のタイムアウト処理を実行する。
【００５５】
監視プログラムは、ライブラリからタイムアウトが発生したことが通知されると、記録された監視メッセージ関連情報に基づいて、待ち合わせ対象ノード（図１２のノード１−２）に送信する。送信された監視メッセージは、待ち合わせ対象ノードの監視プログラムによりノード内に記憶される。
【００５６】
図１３は、監視メッセージ受信時におけるノードの動作例を示す図である。監視プログラムは、受信した監視メッセージが自ノードの識別子を含む場合、監視メッセージに含まれるメッセージ種類、経由したノードの識別子を含むエラーメッセージを表示装置２に表示する。
【００５７】
または、監視プログラムは、受信した監視メッセージが、自ノードの識別子を含まず、自ノードに記録されたメッセージ関連情報に対応する場合、監視メッセージに自ノードの識別子を付加して待ち合わせ対象ノードに送信する。
【００５８】
図１４は、実施形態の処理の一例を示すフローチャートである。検出部１１は、所定の並列処理において、他ノードからの所定メッセージを待っている状態（待ち状態）が発生したか判定する（ステップＳ１０１）。待ち状態が発生した場合（ステップＳ１０１でＹＥＳ）、記録部１２は、監視メッセージ関連情報記録処理を実行する（ステップＳ１０２）。
【００５９】
ステップＳ１０１でＮＯの場合、検出部１１は、監視対象プログラムが実行する並列処理において待ち状態である期間中に、タイムアウトが発生したか判定する（ステップＳ１０３）。検出部１１がタイムアウトの発生を検出した場合（ステップＳ１０３でＹＥＳ）、ノード１は、監視メッセージ送信処理を実行する（ステップＳ１０４）。
【００６０】
ステップＳ１０３でＮＯであって、ノード１が他ノードから監視メッセージを受信した場合（ステップＳ１０５でＹＥＳ）、ノード１は、監視メッセージ受信時処理を実行する（ステップＳ１０６）。
【００６１】
ステップＳ１０５でＮＯの場合、または、ステップＳ１０６の処理後、ノード１は、監視終了指示を受けたか判定する（ステップＳ１０７）。ステップＳ１０７でＮＯの場合、ノード１は、ステップＳ１０１の処理に戻る。ステップＳ１０７でＹＥＳの場合、ノード１は、監視プログラムによる監視処理を終了する。なお、ステップＳ１０２、Ｓ１０４、およびＳ１０６に関して、詳細な処理を後述する。
【００６２】
図１５は、図１４のステップＳ１０２の処理の一例を示すフローチャートである。記録部１２は、待ち状態となった処理に関して、監視メッセージ関連情報が記録済みであるか判定する（ステップＳ２０１）。記録部１２は、例えば、待ち状態となった処理で他ノードに送信される所定メッセージの種類を示す情報が、監視メッセージ関連情報として記録済みであるか判定する。
【００６３】
ステップＳ２０１でＮＯの場合、記録部１２は、待ち状態となった処理に関する監視メッセージ関連情報を記憶部１７に記録する（ステップＳ２０２）。記録部１２は、例えば、待ち状態となった処理で他のノードに送信されるメッセージの種類、および自ノードを示す識別情報を、監視メッセージ関連情報として記録する。また、記録部１２は、監視メッセージの送信先ノードを示す識別子をライブラリから受け付け、その識別子を監視メッセージ関連情報とともに記録してもよい。監視メッセージの送信先ノードは、待ち合わせ対象ノードである。
【００６４】
ステップＳ２０１でＹＥＳの場合、記録部１２は、待ち状態となった処理に関する監視メッセージ関連情報を、既に記憶部１７に記憶されている監視メッセージ関連情報に上書きして記録する（ステップＳ２０３）。
【００６５】
なお、記録部１２は、監視対象プログラムが待ち合わせ対象のノードから所定メッセージを受信して待ち状態が解消された場合、その所定メッセージに対応する監視メッセージ関連情報を削除してもよい。
【００６６】
図１６は、図１４のステップＳ１０４の処理の一例を示すフローチャートである。生成部１３は、タイムアウトが発生した処理に関する監視メッセージ関連情報が存在するか判定する（ステップＳ３０１）。例えば、タイムアウトが発生した処理が待ち状態となり、図１５のステップＳ２０２で監視メッセージ関連情報が記録された場合、記憶部１７に監視メッセージ関連情報が存在している。ステップＳ３０１でＮＯの場合、ノード１は、ステップＳ１０４の処理を終了する。
【００６７】
ステップＳ３０１でＹＥＳの場合、生成部１３は、監視メッセージ関連情報を用いて、タイムアウトが発生した処理で待つメッセージの種類と自ノードの識別子を含む監視メッセージを生成する（ステップＳ３０２）。送信部１４は、生成された監視メッセージを待ち合わせ対象ノードに送信する（ステップＳ３０３）。
【００６８】
図１７は、図１４のステップＳ１０６の処理の一例を示すフローチャートである。判定部１５は、受信した監視メッセージが自ノードの識別子を含むか判定する（ステップＳ４０１）。受信した監視メッセージが自ノードの識別子を含む場合、自ノードが起点ノードであり、自ノードが生成した監視メッセージが他ノードを経由して戻ってきたことが考えられる。よって、ステップＳ４０１でＹＥＳの場合、出力部１６は、監視メッセージ内のメッセージ種類や識別子を含むエラーメッセージを表示する（ステップＳ４０２）。出力部１６は、例えば、エラーメッセージを表示装置２に表示するとともに、ログデータとして出力してもよい。
【００６９】
ステップＳ４０１でＮＯの場合、判定部１５は、自ノードが休止状態であるか判定する（ステップＳ４０３）。自ノードが休止状態である場合、記録部１２は、自ノードの識別子と受信した監視メッセージに休止状態となった原因に関する情報とを付加し、送信部１４は、その監視メッセージを、その監視メッセージの送信元ノードに送信する（ステップＳ４０４）。送信部１４は、例えば、休止状態の原因がメッセージの受信待ちではない場合に、ステップＳ４０４の応答を行うとする。
【００７０】
ステップＳ４０３でＮＯの場合、判定部１５は、自ノードが待ち状態であるか判定する（ステップＳ４０５）。待ち状態である場合（ステップＳ４０５でＮＯ）、判定部１５は、監視メッセージが末端のノードを経由したか判定する（ステップＳ４０６）。末端のノードは、いずれかのノードの待ち合わせ対象ノードであり、休止状態となっているノードである。判定部１５は、例えば、監視メッセージに休止状態となった原因に関する情報が含まれている場合、監視メッセージが末端ノードを経由したと判定する。
【００７１】
ステップＳ４０６でＹＥＳの場合、送信部１４は、監視メッセージを、その監視メッセージの前回の送信元に送信する（ステップＳ４０７）。監視メッセージが末端のノードを経由しており、自ノードが起点でない場合、起点ノードに監視メッセージを返すこととなる。従って、送信部１４は、その監視メッセージの前回の送信元に送信することにより、起点ノードに監視メッセージを返す。
【００７２】
ステップＳ４０６でＮＯの場合、判定部１５は、監視メッセージが記録した情報に対応するか判定する（ステップＳ４０８）。判定部１５は、例えば、受信した監視メッセージに含まれるメッセージ種類が、記録した監視メッセージ関連情報に含まれるメッセージ種類に対応するか判定する。
【００７３】
ステップＳ４０８でＹＥＳの場合、記録部１２は、監視メッセージに自ノードを示す識別子を付加する（ステップＳ４０９）。そして、送信部１４は、識別子を付加した監視メッセージを、監視対象プログラムの待ち合わせ対象ノードに送信する（ステップＳ４１０）。記録部１２は、監視メッセージが送信された場合、その監視メッセージに対応する監視メッセージを記憶部１７から削除してもよい。
【００７４】
ステップＳ４０２、Ｓ４０４、Ｓ４０７、Ｓ４１０の処理後、ステップＳ４０５、Ｓ４０８でＮＯの場合、ステップＳ１０６の処理は終了する。
【００７５】
以上のように、ノード１は、大規模なプログラムを用いなくても、送信した監視メッセージが戻ってきた場合に、経由したノード１を表示して、タイムアウトとなった原因の特定を支援することができる。また、デッドロックだけではなく、あるノード１が休止状態となったことによりタイムアウトとなった場合に、休止状態となった原因を表示することにより、タイムアウトとなった原因の特定を支援することができる。
【００７６】
次に、ノード１のハードウェア構成の一例を説明する。図１８は、ノード１のハードウェア構成の一例を示す図である。図１８の例に示すように、ノード１において、バス１００に、プロセッサ１１１とメモリ１１２と補助記憶装置１１３と通信インタフェース１１４と媒体接続部１１５と入力装置１１６と出力装置１１７とが接続される。
【００７７】
プロセッサ１１１は、メモリ１１２に展開されたプログラムを実行する。実行されるプログラムには、実施形態における処理を行う監視プログラムが適用されてもよい。
【００７８】
メモリ１１２は、例えば、Random Access Memory(RAM)である。補助記憶装置１１３は、種々の情報を記憶する記憶装置であり、例えばハードディスクドライブや半導体メモリ等が適用されてもよい。補助記憶装置１１３に実施形態の処理を行う監視プログラムが記憶されていてもよい。
【００７９】
通信インタフェース１１４は、Local Area Network（LAN）、Wide Area Network（WAN）等の通信ネットワークに接続され、通信に伴うデータ変換等を行う。送信部１４が他のノード１に情報を送信する場合、通信インタフェース１１４を介して、情報を送信する。
【００８０】
媒体接続部１１５は、可搬型記録媒体１１８が接続可能なインタフェースである。可搬型記録媒体１１８には、光学式ディスク（例えば、Compact Disc(CD)やDigital Versatile Disc(DVD))、半導体メモリ等が適用されてもよい。可搬型記録媒体１１８に実施形態の処理を行う監視プログラムが記録されていてもよい。
【００８１】
入力装置１１６は、例えば、キーボード、ポインティングデバイス等であり、ユーザからの指示及び情報等の入力を受け付ける。
【００８２】
出力装置１１７は、例えば、表示装置、プリンタ、スピーカ等であり、ユーザへの問い合わせ又は指示、及び処理結果等を出力する。図１に示す表示装置２には、図１８に示す出力装置１１７が適用されてもよい。
【００８３】
図１に示す記憶部１７は、メモリ１１２、補助記憶装置１１３または可搬型記録媒体１１８等により実現されてもよい。図１に示す検出部１１、記録部１２、生成部１３、送信部１４、判定部１５、および出力部１６は、メモリ１１２に展開された監視プログラムをプロセッサ１１１が実行することにより実現されてもよい。
【００８４】
メモリ１１２、補助記憶装置１１３および可搬型記録媒体１１８は、コンピュータが読み取り可能であって非一時的な有形の記憶媒体であり、信号搬送波のような一時的な媒体ではない。
【００８５】
＜その他＞
本実施形態は、以上に述べた実施の形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で様々な変更、追加、省略が適用可能である。
【符号の説明】
【００８６】
１    ノード
２    表示装置
１１    検出部
１２    記録部
１３    生成部
１４    送信部
１５    判定部
１６    出力部
１７    記憶部
１００    バス
１１１    プロセッサ
１１２    メモリ
１１３    補助記憶装置
１１４    通信インタフェース
１１５    媒体接続部
１１６    入力装置
１１７    出力装置
１１８    可搬型記録媒体
【図１】
2019219755.tif 000003
【図２】
2019219755.tif 000004
【図３】
2019219755.tif 000005
【図４】
2019219755.tif 000006
【図５】
2019219755.tif 000007
【図６】
2019219755.tif 000008
【図７】
2019219755.tif 000009
【図８】
2019219755.tif 000010
【図９】
2019219755.tif 000011
【図１０】
2019219755.tif 000012
【図１１】
2019219755.tif 000013
【図１２】
2019219755.tif 000014
【図１３】
2019219755.tif 000015
【図１４】
2019219755.tif 000016
【図１５】
2019219755.tif 000017
【図１６】
2019219755.tif 000018
【図１７】
2019219755.tif 000019
【図１８】
2019219755.tif 000020