(57)【特許請求の範囲】
【請求項１】
情報処理システム内のノードを、前記情報処理システムにおいて異常が検出されたノードの記憶部に記憶されたデータの調査を行う調査ノードとして割り当てる割当部と、
前記調査ノードに、前記異常が検出されたノードから前記調査の対象となるデータを取得するよう指示する第１の指示部と、
前記調査ノードに、前記取得したデータの所定値が正常であるか否かを判定する演算を実行するよう指示する第２の指示部と、
前記所定の値が正常値でない場合に前記所定のノードに障害が発生していると特定する特定部と
を備える情報処理装置。
【請求項２】
複数のノードにおいて異常が検出されたときに、前記割当部は、前記異常が検出された各ノードに少なくとも１つの調査ノードを割り当て、
前記第２の指示部は、各調査ノードに、各調査ノード間で前記所定値が正常であるか否かを判定するリダクション演算を実行するよう指示する
請求項１に記載の情報処理装置。
【請求項３】
情報処理システム内のノードを、前記情報処理システムにおいて異常が検出されたノードの記憶部に記憶されたデータの調査を行う調査ノードとして割り当て、
前記調査ノードに、前記異常が検出されたノードから前記調査の対象となるデータを取得するよう指示し、
前記調査ノードに、前記取得したデータの所定値が正常であるか否かを判定する演算を実行するよう指示し、
前記所定の値が正常値でない場合に前記所定のノードに障害が発生していると特定する情報処理方法。
【請求項４】
コンピュータに、
情報処理システム内のノードを、前記情報処理システムにおいて異常が検出されたノードの記憶部に記憶されたデータの調査を行う調査ノードとして割り当て、
前記調査ノードに、前記異常が検出されたノードから前記調査の対象となるデータを取得するよう指示し、
前記調査ノードに、前記取得したデータの所定値が正常であるか否かを判定する演算を実行するよう指示し、
前記所定の値が正常値でない場合に前記所定のノードに障害が発生していると特定する処理を実行させる情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本件開示の発明は、分散並列処理に係る情報処理装置、情報処理方法および情報処理プログラムに関する。
【背景技術】
【０００２】
複数の情報処理装置（以下、「ノード」という）を有する情報処理システムの一例である分散並列処理システムにおける障害調査用のツールは、ダンプファイルの取得や取得したダンプファイルの解析等を実行する。このため、システム内で障害調査対象となった各ノードのメモリをファイルサーバに転送してダンプファイルとして格納し、各ノードのダンプファイルの格納が完了してからダンプファイルの解析および解析結果の出力が実行される。
【０００３】
ダンプファイルのデータ量は、ダンプファイルの取得対象となるノード数の増加に伴って大きくなる。そこで、従来から並列計算機のメモリダンプの容量を削減する技術が提案されている（特許文献１および２参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０００−１３２４３２号公報
【特許文献２】特開平１１−２８２８１９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、分散並列処理システムにおいては、ノード数の多さが原因で、各ノードからダンプファイルをファイルサーバに転送する処理に時間がかかることが懸念される。また、ダンプファイルのデータ量の大きさが原因で、障害解析を行うノードがファイルサーバに格納されたダンプファイルを参照して解析処理を行う際の処理に時間がかかることも懸念される。
【０００６】
本件開示の技術は、上記に鑑みてなされたものであり、情報処理システムにおいて、ノードの障害調査にかかる時間を短縮することが可能な情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本件開示の情報処理装置は、１つの側面では、情報処理システム内のノードを、情報処理システムにおいて異常が検出されたノードの記憶部に記憶されたデータの調査を行う調査ノードとして割り当てる割当部と、調査ノードに、異常が検出されたノードから調査の対象となるデータを取得するよう指示する第１の指示部と、調査ノードに、取得したデータの所定値が正常であるか否かを判定する演算を実行するよう指示する第２の指示部と、所定の値が正常値でない場合に所定のノードに障害が発生していると特定する特定部とを備える。
【発明の効果】
【０００８】
本件開示の技術によれば、情報処理システムにおいて、ノードからダンプファイルを取得および解析する処理を行うことなく、障害が発生したノードを特定することができ、ノードの障害調査にかかる時間を短縮することが可能な情報処理装置を提供することができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、一実施形態における分散並列処理システムの構成を示す概略構成図である。
【図２】図２は、一実施形態における調査エージェントの構成を示す概略構成図である。
【図３】図３は、一実施形態における障害解析用ノードの機能ブロック図である。
【図４】図４は、一実施形態における調査用コマンドの概略の構成を示す図である。
【図５】図５は、一実施形態における障害解析用ノードが実行する処理のフローチャートである。
【図６】図６は、一実施形態における分散並列処理システムにおいて実行される処理のフローチャートである。
【図７】図７は、一実施形態における調査エージェントが実行する処理のフローチャートである。
【図８Ａ】図８Ａは、一実施形態における調査エージェントが実行する処理のフローチャートである。
【図８Ｂ】図８Ｂは、一実施形態における調査エージェントが実行する処理のフローチャートである。
【図９Ａ】図９Ａは、一実施形態におけるリダクション演算を実行する高機能スイッチの一部の構成を示す概略構成図である。
【図９Ｂ】図９Ｂは、一実施形態におけるリダクション演算を実行する高機能スイッチの一部の構成を示す概略構成図である。
【図９Ｃ】図９Ｃは、一実施形態におけるリダクション演算を実行する高機能スイッチの一部の構成を示す概略構成図である。
【図９Ｄ】図９Ｄは、一実施形態におけるリダクション演算を実行する高機能スイッチの一部の構成を示す概略構成図である。
【図１０】図１０は、一実施形態におけるリダクション演算を実行するＮＩＣの一部の構成を示す概略構成図である。
【発明を実施するための形態】
【００１０】
まず、一実施形態における分散並列処理システムについて図面を参照しながら説明する。本実施形態では、一例として図１に示す分散並列処理システム１を用いて説明する。なお、以下の説明は例示にすぎず、特許請求の範囲を限定するものではない。
【００１１】
図１に示すように、本実施形態に係る分散並列処理システム１では、ｍ個（ｍは２以上の自然数）のノード１００−１〜１００−ｍおよびｎ個（ｎは２以上の自然数）の２００−１〜２００−ｎがネットワーク２を経由して相互に接続されている。このため、ノード１００−１〜１００−ｍ、２００−１〜２００−ｎは、相互に自ノード内のデータを他のノードに送信することができる。ノード１００−１〜１００−ｍ、２００−１〜２００−ｎは、障害解析用ノード３００およびファイルサーバ４００に接続されている。障害解析用ノード３００とファイルサーバ４００も互いに接続されている。さらに、ファイルサーバ４００は、ディスク装置５００と接続されている。なお、本実施形態では１つのディスク装置５００を示すが、ディスク装置５００を複数設ける構成としてもよい。
【００１２】
ノード１００−１は、ＣＰＵ１００−１ａ、メモリ１００−１ｂ、ＮＩＣ（Network Interface Card）１００−１ｃを備える。また、本実施形態では、メモリ１００−１ｂには、例えばノード１００−１で実行されるＯＳ（Operating System）のデーモンプロセスである調査エージェント１００−１ｄが格納されている。なお、メモリ１００−１ｂが、ノードの記憶部の一例に相当する。調査エージェント１００−１ｄは、ノード１００−１が障害解析用ノード３００からノード調査用のコマンドおよび引数を受信したときに、当該
コマンドおよび引数に応じた解析処理を行う。なお、調査エージェント１００−１ｄが実行する解析処理の詳細については、後述する。
【００１３】
ＣＰＵ１００−１ａは、メモリ１００−１ｂに格納されている各種アプリケーションを展開して実行する。ＣＰＵ１００−１ａによるアプリケーションの実行は周知であるため、ここでは詳細な説明は省略する。メモリ１００−１ｂには、ノード１００−１で実行されているＯＳのカーネル内部のデータ構造、アプリケーションの各種情報等が記憶される。ＮＩＣ１００−１ｃは、他のノード１００−ｍ、２００−ｎ、障害解析用ノード３００、ファイルサーバ４００との通信を行う拡張カードである。
【００１４】
図１に示すように、ノード１００−ｍ、２００−ｎも、ＣＰＵ１００−ｍａ、２００−ｎａ、メモリ１００−ｍｂ、２００−ｎｂ、ＮＩＣ１００−ｍｃ、２００−ｎｃ、調査エージェント１００−ｍｄ、２００−ｎｄをそれぞれ備える。また、これらのＣＰＵ、メモリ、ＮＩＣ、調査エージェントの構成は、ノード１００−１のＣＰＵ１００−１ａ、メモリ１００−１ｂ、ＮＩＣ１００−１ｃ、調査エージェント１００−１ｄとそれぞれ同じであるため、ここでは詳細な説明は省略する。
【００１５】
障害解析用ノード３００は、ＣＰＵ３００ａ、メモリ３００ｂ、ＮＩＣ３００ｃを備える。ＣＰＵ３００ａは、メモリ３００ｂに格納されているアプリケーションを展開および実行することにより、以下に説明する、ノードを有する情報処理システムの一例である分散並列処理システム１内のノードの調査に関するリダクション演算、データ取得等の処理を実行する。ＮＩＣ３００ｃは、ノード１００−ｍ、２００−ｎ、ファイルサーバ４００との通信を行う拡張カードである。
【００１６】
ファイルサーバ４００は、ＣＰＵ４００ａ、メモリ４００ｂ、ＮＩＣ４００ｃを備える。ＣＰＵ３００ａは、メモリ３００ｂに格納されているアプリケーションを展開および実行することにより、例えばノード１００−１〜１００−ｍ、２００−１〜２００−ｎからメモリ１００−１ｂ〜１００−ｍｂ、２００−１ｂ〜２００−ｎｂのダンプファイルを取得し、ディスク装置５００に格納する処理を実行する。ＮＩＣ４００ｃは、ノード１００−ｍ、２００−ｎ、障害解析用ノード３００との通信を行う拡張カードである。
【００１７】
図２に示すように、調査エージェント１００−１ｄは、ＮＩＣ１００−１ｃの動作を制御するためのコマンド列が格納されるライブラリ領域として、ＮＩＣコマンド列ライブラリ領域１００−１ｅを有する。また、調査エージェント１００−１ｄは、ノード１００−１が障害解析用ノード３００から受信したコマンドを解釈し、コマンドによって指示される処理の実行をＣＰＵ１００−１ａに指示するコマンドインタプリタを備える。さらに、調査エージェント１００−１ｄは、以下に説明するように他のノードのメモリから取得したデータを記憶しておく調査エージェント用データ領域１００−１ｇを備える。なお、ノード１００−ｍ、２００−ｎの調査エージェント１００−ｍｄ、２００−ｎｄも同様である。
【００１８】
また、図３に示すように、障害解析用ノード３００のＣＰＵ３００ａが、メモリ３００ｂに格納された各種プログラムを展開および実行することにより、割当部３０１、第１の指示部３０２、第２の指示部３０３、特定部３０４として機能する。割当部３０１は、分散並列処理システム１において異常が検出されたノードのメモリに記憶されたデータの調査を行う調査ノードを割り当てる。第１の指示部３０２は、調査ノードに、異常が検出されたノードから調査の対象となるデータを取得するよう指示する。第２の指示部３０３は、調査ノードに、取得したデータの所定値が正常であるか否かを判定する演算を実行するよう指示する。特定部３０４は、所定の値が正常値でない場合に当該ノードに障害が発生していると特定する。
【００１９】
さらに、メモリ３００ｂには、調査用コマンド３００ｇが格納されている。図４に示すように、調査用コマンド３００ｇには、データパターン変換用コマンド３００ｈ、ポインタ追跡用コマンド３００ｉ、フィールド値チェック用コマンド３００ｊ、データ整形用コマンド３００ｋが含まれる。
【００２０】
データパターン変換用コマンド３００ｈは、調査対象のノードのメモリに格納されているデータのうち特定のデータパターンに関する調査を行う命令の変換処理を行うためのコマンドである。ポインタ追跡用コマンド３００ｉは、調査対象のノードのメモリに格納されているデータに対して特定のポインタのリンク関係を追跡する命令の変換処理を行うためのコマンドである。フィールド値チェック用コマンド３００ｊは、調査対象のノードのメモリに格納されているデータに対して特定のフィールド値が所定の値であるか否かの判定処理を行うためのコマンドである。データ整形用コマンド３００ｋは、ディスク装置５００に格納されている調査対象のノードのダンプファイル内のデータを、障害解析用ノード３００において表示するために整形処理を行うためのコマンドである。
【００２１】
図５に、本実施形態において障害解析用ノード３００が実行する処理のフローチャートを示す。本実施形態においては、分散並列処理システム１内のノードからダンプが取得される際に、障害解析用ノード３００のＣＰＵ３００ａが、ダンプが取得されるノードに対して本フローチャートの処理を開始する。本実施形態において以下の説明では、一例として障害解析用ノード３００によってノード１００−１、１００−ｍの異常が検出され、ノード１００−１、１００−ｍからダンプが取得される。ＯＰ１０１では、ＣＰＵ３００ａが、ノード１００−１を自ノードの調査ノードとして割り当てるコマンドをノード１００−１に送信する。調査ノードとは、障害解析用ノード３００から受信する上記の各種コマンドに従ってノードの障害調査を実行するノードである。
【００２２】
本実施形態において、本フローチャートでは、ＣＰＵ３００ａは、コマンドが送信済みであることを示すフラグおよびノードが調査ノードに設定されたことを示すフラグを設定および参照して以下の処理を実行する。なお、コマンドが送信済みであるノードか否かおよびノードが既に調査ノードに設定されているか否かが判別できれば、フラグに限らず任意の指標を用いることができる。
【００２３】
ＯＰ１０１において、ＣＰＵ３００ａは、上記フラグを参照して、ノード１００−１にコマンドが送信済みでなくノード１００−１が調査ノードに設定されていないことを確認する。その後、ノード１００−１に対してノード１００−１を調査ノードに指定するコマンドを送信する。また、ノード１００−１に当該コマンドが送信済みであることを示すフラグを設定する。次いで、処理はＯＰ１０２に進められる。ＯＰ１０２では、ＣＰＵ３００ａは、ＯＰ１０１においてノード１００−１に送信したコマンドに対する応答をノード１００−１から受信したか否かに基づいて、ノード１００−１の動作が停止中であるか否かを判定する。具体的には、障害解析用ノード３００の停止ノード監視部３００ｄが、分散並列処理システム１内の各ノードの動作が停止中であるか否かを判定する。
【００２４】
本実施形態における以下の説明では、ノード１００−１、１００−ｍのＣＰＵ１００−１ａ、１００−ｍａが、それぞれノード１００−１、１００−ｍの外部から受信するコマンドに応答しない現象が発生している。また、ノード２００−１〜２００−ｎは、それぞれノード２００−１〜２００−ｎの外部から受信するコマンドに正常に応答する。外部から受信するコマンドに応答しない現象としては、例えば、ＣＰＵ１００−１ａ、１００−ｍａにおいて実行されているＯＳのカーネルレベルで動的ループ（dynamic loop）や割り込み可能待ち（enabled wait）状態が発生している場合等が想定される。したがって、ＯＰ１０２において、ＣＰＵ３００ａは、ノード１００−１から応答を受信しない結果、ノ
ード１００−１は停止中と判定し（ＯＰ１０２：Ｙｅｓ）、処理をＯＰ１０１に戻す。
【００２５】
処理がＯＰ１０２からＯＰ１０１に戻ると、ＣＰＵ３００ａは、上記のフラグによりノード１００−１には既にコマンドが送信済みであることを確認した後、ノード１００−１の論理的に近傍であるノードに対して、上記で説明したＯＰ１０１の処理を行う。ここで、あるノードに論理的に近傍であるノードとは、一例として、分散並列処理システム１内のノード空間における当該ノードのノードアドレス（ノードＩＤ）のオフセットの下位ビットを除いた上位ビットが等しいノード群のことを指す。
【００２６】
本実施形態では、一例としてノード２００−１がノード１００−１に対して論理的に近傍であるとする。したがって、まずＣＰＵ３００ａは、上記のフラグを参照してノード２００−１にコマンドが送信済みでなくノード２００−１が調査ノードに設定されていないことを確認する。その後、ＣＰＵ３００ａは、ノード２００−１をノード１００−１の障害調査を実行する調査ノードとして割り当てるコマンドを、ノード２００−１に送信する。次いで、処理はＯＰ１０２に進められる。
【００２７】
本実施形態では、ノード２００−１はＣＰＵ３００ａから受信するコマンドに応答する。したがって、ＯＰ１０２において、ＣＰＵ３００ａは、ノード２００−１からの応答を受信し、ノード２００−１の動作は停止中でないと判定し（ＯＰ１０２：Ｎｏ）、処理をＯＰ１０３に進める。ＯＰ１０３において、ＣＰＵ３００ａは、ＯＰ１０１において説明したフラグを参照し、ノード２００−１が既に調査ノードに指定されているか否かを判定する。なお、ここでは、ノード２００−１はまだ調査ノードに設定されていないものとする。したがって、ＣＰＵ３００ａは、ノード２００−１が既に調査ノードに設定されているノードではないと判定し（ＯＰ１０３：Ｎｏ）、処理をＯＰ１０４に進める。
【００２８】
ＯＰ１０４では、ＣＰＵ３００ａは、ノード２００−１をノード１００−１の障害調査を実行する調査ノードに設定し、ノード２００−１が調査ノードに設定されたことを示すフラグを設定する。次いで、処理はＯＰ１０５に進められる。ＯＰ１０５において、分散並列処理システム１内でダンプが取得されるノードが他にあるか否かが判定される。上記の通り、本実施形態では、ノード１００−ｍからもダンプが取得される。したがって、ＣＰＵ３００ａは、ノード１００−ｍに対してＯＰ１０１〜ＯＰ１０５の処理を実行する。
【００２９】
本実施形態において、ノード１００−ｍも、ノード１００−１と同様に動作が停止中であるため、ＣＰＵ３００ａは、上記と同様の処理を実行し、一例としてノード１００−ｍの論理的に近傍であるノード２００−ｎを調査ノードに設定する。次いで、ＯＰ１０５において、ＣＰＵ３００ａは、分散並列処理システム１内で他にダンプが取得されるノードがないと判定した後（ＯＰ１０５：Ｎｏ）、本フローチャートを終了する。
【００３０】
なお、ノード１００−１、１００−ｍとは異なり、障害調査の対象となるノードの動作が停止中でなく調査ノードに設定されていない場合は、ＣＰＵ３００ａは、ＯＰ１０１、ＯＰ１０２、ＯＰ１０３、ＯＰ１０４の順に処理を実行する。そして、ＣＰＵ３００ａは、障害調査の対象となるノード自身を調査ノードとして割り当てる。例えば、ノード１００−２が障害調査の対象である場合に、ＯＰ１０２においてノード１００−２が停止中と判定されなければ、ノード１００−２が調査ノードとして割り当てられる。
【００３１】
次に、本実施形態において、上記の処理によって調査ノードに設定されたノードが実行する処理について、図６のフローチャートを参照しながら説明する。ノード１００−１、１００−ｍの調査ノードに設定されたノード２００−１、２００−ｎは、障害解析用ノード３００から受信するコマンドに従って、各種の障害調査処理を実行する。図６は、障害解析用ノード３００のＣＰＵ３００ａによって実行される処理を示すフローチャートであ
る。以下の説明では、ＣＰＵ３００ａがノード２００−１に対して実行する処理について説明する。なお、ＣＰＵ３００ａは、ノード２００−ｎに対しても同様の処理を実行する。
【００３２】
ＯＰ２０１では、ＣＰＵ３００ａは、ファイルサーバ４００に、ノード１００−１のメモリ１００−１ｂから取得されたデータのうち所定の参照範囲のデータをディスク装置５００から取得して障害解析用ノード３００に転送するよう指示するコマンドを送信する。ここで、所定の参照範囲とは、以下に説明する障害調査用の各種コマンドの実行対象となるデータが含まれる範囲である。当該指示を受信したファイルサーバ４００は、指定された参照範囲のデータをディスク装置５００から取得して障害解析用ノード３００に転送する。ただし、ファイルサーバ４００は、指定された参照範囲のデータをディスク装置５００から取得できない場合、ディスク装置５００には指定されたデータが格納されていないことを障害解析用ノード３００に通知する。
【００３３】
次いで、ＯＰ２０２では、ＣＰＵ３００ａは、ファイルサーバ４００に指示した参照範囲のデータをファイルサーバ４００から受信したか否かを判定する。障害解析用ノード３００が当該データを取得できた場合は（ＯＰ２０２：Ｙｅｓ）、ＣＰＵ３００ａは処理をＯＰ２０４に進める。また、障害解析用ノード３００が当該データを取得できなかった場合は（ＯＰ２０２：Ｎｏ）、ＣＰＵ３００ａは処理をＯＰ２０３に進める。
【００３４】
ＯＰ２０３では、ＣＰＵ３００ａは、ノード２００−１に対して、ＯＰ２０１において指示される参照範囲のデータをノード１００−１のメモリ１００−１ｂから取得する指示を送信する。次いで、ＣＰＵ３００ａは、処理をＯＰ２０４に進める。ＯＰ２０４では、ＣＰＵ３００ａは、メモリ３００ｂに障害調査用のコマンドが格納されていることを確認する。本実施形態では、上記の通り、調査用コマンド３００ｇには、障害調査用のコマンドとして、データパターン検索用コマンド３００ｊ、ポインタ追跡用コマンド３００ｋ、フィールド値チェック用コマンド３００ｍが含まれている。したがって、本実施形態では、ＯＰ２０４において、ＣＰＵ３００ａは、メモリ３００ｂに障害調査用のコマンドが格納されていると判定し（ＯＰ２０４：Ｙｅｓ）、処理をＯＰ２０７に進める。一方、メモリ３００ｂに障害調査用のコマンドが格納されていない場合は（ＯＰ２０４：Ｎｏ）、ＣＰＵ３００ａは、処理をＯＰ２０５に進める。ＯＰ２０５では、ＣＰＵ３００ａは、ＯＰ２０３においてデータの取得を指示したノード２００−１に対して、取得したデータを障害解析用ノード３００に転送するよう指示するコマンドを送信する。
【００３５】
ＯＰ２０７では、ＣＰＵ３００ａは、ＯＰ２０５と同様に、ＯＰ２０３においてデータの取得を指示したノード２００−１に対して、取得したデータを障害解析用ノード３００に転送するよう指示するコマンドを送信する。次いで、処理はＯＰ２０８に進められる。ＯＰ２０８では、ＣＰＵ３００ａは、ノード２００−１に対して、調査用コマンド３００ｇに含まれる上記のいずれかの障害調査用のコマンドを送信する。ノード２００−１は、障害解析用ノード３００から障害調査用のコマンドを受信すると、ＯＰ２０３において取得したノード１００−１のメモリ１００−１ｂのデータに対してコマンドの内容に応じた処理を実行し、実行結果を障害解析用ノード３００に送信する。このように、障害解析用ノード３００が調査ノード２００−１に対して、障害調査用のコマンドを送信することにより、障害解析用ノード３００がノード１００−１のメモリ１００−１ｂのダンプファイルを取得する前に、障害調査の処理を開始させることができる。次いで、処理はＯＰ２０９に進められる。
【００３６】
ＯＰ２０９では、ＣＰＵ３００ａは、ノード２００−１から転送されたノード１００−１のメモリ１００−１ｂのダンプファイルに対して、種々の障害調査を実行する。なお、ＯＰ２０８において実行される障害調査は、上記の障害調査用のコマンドにより実行され
る処理に限らず、ダンプファイルに対する周知の障害調査も含まれる。したがって、ＯＰ２０９において、障害解析用ノード３００のユーザは、ＯＰ２０８におけるノード２００−１による障害調査用のコマンドの実行結果に基づいて障害調査の対象となるデータの位置または範囲を決定した上で、ノード１００−１のメモリ１００−１ｂのダンプファイル内の当該位置または範囲に対して適切な障害調査を実行することができる。次いで、処理はＯＰ２０６に進められる。
【００３７】
ＯＰ２０６では、ＣＰＵ３００ａは、ＯＰ２０５もしくはＯＰ２０７において取得したノード１００−１のメモリ１００−１ｂのダンプファイル、ＯＰ２０８における障害調査用のコマンドの実行結果、またはＯＰ２０９における障害調査の実行結果を、障害解析用ノード３００のユーザに整形表示する。
【００３８】
次に、本実施形態においてＯＰ２０８で実行される各コマンドについて、図７を参照しながら説明する。ＯＰ３０１において、ＣＰＵ３００ａは、ノード２００−１に対して、調査用コマンド３００ｇに含まれる上記のいずれかの障害調査用のコマンドを送信する。本実施形態では、障害調査用のコマンドとして、データパターン検索用コマンド３００ｈ、ポインタ追跡用コマンド３００ｉ、フィールド値チェック用コマンド３００ｊがある。なお、各コマンドによって実行される演算が、所定値が正常であるか否かを判定するリダクション演算の一例に相当する。
【００３９】
例えば、ＣＰＵ３００ａが、ノード２００−１にデータパターン検索用コマンド３００ｈを送信すると、ノード２００−１の調査エージェント２００−１ｄは、ノード１００−１から取得したメモリ１００−１ｂのデータに対して、コマンドにより指定されたデータパターンを検索する。そして、調査エージェント２００−１ｄは、当該データパターンの有無をコマンドの実行結果として保持する。また、例えば、ＣＰＵ３００ａが、ノード２００−１にフィールド値チェック用コマンド３００ｊを送信すると、ノード２００−１の調査エージェント２００−１ｄは、ノード１００−１のメモリ１００−１ｂのデータにおいて、コマンドにより指定された位置のフィールド値を取得し、取得したフィールド値をコマンドの実行結果として保持する。
【００４０】
図８および図９に、ＣＰＵ３００ａがノード２００−１にポインタ追跡用コマンド３００ｉを送信した場合の、ノード２００−１の調査エージェント２００−１ｄにより実行される処理のフローチャートを示す。なお、図８の「１」は図９の「１」に、図９の「２」は図８の「２」に接続する。ＯＰ４０１では、調査エージェント２００−１ｄは、コマンドにより指定される起点の構造体のポインタ変数を、調査対象の次の構造体へのポインタ領域の値によって初期化する。これにより起点となる構造体のポインタの参照先が調査対象の次の構造体に設定される。なお、この時点では、当該次の構造体から実体データはまだ取得されていない。次いで、処理はＯＰ４０２に進められる。
【００４１】
ＯＰ４０２では、調査エージェント２００−１ｄは、初期化されたポインタ変数の値がＮＵＬＬであるか否かを判定する。ポインタ変数の値がＮＵＬＬである場合は（ＯＰ４０２：Ｙｅｓ）、構造体のリンク先が存在しないことを意味する。そこで、調査エージェント２００−１ｄは処理をＯＰ４０４に進める。また、ポインタ変数の値がＮＵＬＬでない場合は（ＯＰ４０２：Ｎｏ）、調査エージェント２００−１ｄは処理をＯＰ４０３に進める。ＯＰ４０４において、調査エージェント２００−１ｄは、ポインタ変数の値がＮＵＬＬであることから、構造体のリンク先が存在しない、すなわち誤ったリンク先を参照していないとみなし、構造体のリンク関係には誤りがないと判定する。そして、調査エージェント２００−１ｄは、判定結果をメモリ２００−１ｂに記憶して本フローチャートの処理を終了する。
【００４２】
ＯＰ４０３では、ＣＰＵ４０３は、構造体に設定されたポインタの変数が有効なアドレスであるか否か、すなわちアドレスが示すリンク先が存在するか否かを判定する。ポインタの変数が有効なアドレスである場合は（ＯＰ４０３：Ｙｅｓ）、ＣＰＵ３００ａは処理をＯＰ４０６に進める。また、ポインタの変数が有効なアドレスでない場合は（ＯＰ４０３：Ｎｏ）、ＣＰＵ３００ａは処理をＯＰ４０５に進める。ＯＰ４０５では、調査エージェント２００−１ｄは、構造体に設定されたポインタの変数が有効なアドレスでない、すなわち当該アドレス示すリンク先が存在しないとみなし、構造体のリンク関係に誤りがあると判定する。そして、調査エージェント２００−１ｄは、判定結果をメモリ２００−１ｂに記憶して本フローチャートの処理を終了する。
【００４３】
ＯＰ４０６では、調査エージェント２００−１ｄは、ＯＰ４０３において有効なアドレスと判定されたポインタ変数のリンク先から実体データを取得するため、メモリ２００−１ｂに、当該データを格納できるだけの領域を確保して初期化する。次いで、調査エージェント２００−１ｄは、処理をＯＰ４０７に進める。ＯＰ４０７では、調査エージェント２００−１ｄは、リンク先の構造体から実体データをＲＤＭＡによって取得し、ＯＰ４０６において確保した領域に格納する。次いで、調査エージェント２００−１ｄは、処理をＯＰ４０８に進める。
【００４４】
ＯＰ４０８では、ＯＰ４０７において取得したリンク先の構造体の実体データに対して、データ内の各エントリ領域の設定値が正常であるか否かを判定する。例えば、データのあるエントリには４バイトのデータが格納されるべきところ、アドレスが格納されている場合、調査エージェント２００−１ｄは、当該エントリ領域の設定値は異常であると判定する。調査エージェント２００−１ｄは、判定対象の各エントリ領域の設定値が正常であると判定した場合は（ＯＰ４０８：Ｙｅｓ）、処理をＯＰ４０９に進める。また、調査エージェント２００−１ｄは、判定対象のいずれかのエントリ領域の設定値が異常であると判定した場合は（ＯＰ４０８：Ｎｏ）、処理をＯＰ４１０に進める。
【００４５】
ＯＰ４１０において、調査エージェント２００−１ｄは、リンク先の構造体のデータに誤りがあり、ポインタのリンク関係に誤りがあるとみなす。そして、調査エージェント２００−１ｄは、判定結果をメモリ２００−１ｂに記憶して本フローチャートの処理を終了する。
【００４６】
一方、ＯＰ４０９では、調査エージェント２００−１ｄは、ＯＰ４０１において次の構造体であった構造体のポインタ変数を、さらに次の構造体のポインタ領域の値によって初期化する。そして、調査エージェント２００−１ｄは、処理をＯＰ４０２に戻す。これにより、ＯＰ４０１において起点の構造体のリンク先であった構造体が起点の構造体となる。そして、再度ＯＰ４０２以降の上記の処理が実行されることで、新たな起点となった構造体の次の構造体のポインタのリンク関係が調査される。
【００４７】
本実施形態では、ノード２００−１、２００−ｎは、障害解析用ノード３００から受信したコマンドの実行結果を相互に集計し、集計結果を障害解析用ノード３００に送信する。以下に、本実施形態において、障害調査ノードが障害解析用ノード３００から受信したコマンドの実行結果の集計結果を障害解析用ノードに送信する構成について２例説明する。
【００４８】
〔実施例１〕
図９Ａ〜図９Ｄに、実施例１における、各ノードのコマンド実行結果を集計する高機能スイッチ１０００の概略構成を示す。本実施例において、高機能スイッチ１０００は、分散並列処理システム１内で、ノード１００−１〜１００−ｍ、２００−１〜２００−ｎとは独立した装置である。図９Ａに示すように、高機能スイッチ１０００では、分散並列処
理システム１内のノードと接続されているポート１００１に、ＳｅｒＤｅｓ（Serializer/Deserializer）１００２が接続されている。ＳｅｒＤｅｓ１００２にはＦＰＧＡ（Field
Programmable Gate Array）  Ａ１００３またはＦＰＧＡ  Ｂ１００４が接続されている。
【００４９】
図９ＢにＦＰＧＡ  Ａ１００３の概略構成図を示す。図に示すように、ＦＰＧＡ  Ａ１００３は、ＳｅｒＤｅｓ１００２とのデータの送受信を行う受信部１００３ａおよび送信部１００３ｂ、受信部１００３ａおよび送信部１００３ｂの動作制御を行う通信制御部１００３ｃを備える。さらにＦＰＧＡ  Ａ１００３は、複数の通信バッファ１００３ｄを備える。分散並列処理システム１内の各ノードから受信したデータは、それぞれ異なる通信バッファ１００３ｄに格納される。
【００５０】
図に示すように、ＦＰＧＡ  Ａ１００３では、リダクション演算回路１００３ｅにより、通信バッファ１００３ｄに格納されたデータ間でのリダクション演算が２段階分実行される。なお、当該リダクション演算が実行される段階数は２段階に限らない。次いで、ＦＰＧＡ  Ａ１００３は、当該リダクション演算の結果と、ＦＰＧＡ  Ａ１００３と接続されるＦＰＧＡ  Ｂ１００４から受信したリダクション演算結果とを用いて、リダクション演算回路１００３ｅによりさらにリダクション演算を実行する。そして、ＦＰＧＡ  Ａ１００３は、当該リダクション演算の結果をＦＰＧＡ  Ｃ１００５に送信する。
【００５１】
図９ＣにＦＰＧＡ  Ｂ１００４の概略構成図を示す。図に示すように、ＦＰＧＡ  Ｂ１００４は、ＳｅｒＤｅｓ１００２とのデータの送受信を行う受信部１００４ａおよび送信部１００４ｂ、受信部１００４ａおよび送信部１００４ｂの動作制御を行う通信制御部１００４ｃを備える。さらにＦＰＧＡ  Ｂ１００４は、複数の通信バッファ１００４ｄを備える。分散並列処理システム１内の各ノードから受信したデータは、それぞれ異なる通信バッファ１００４ｄに格納される。図に示すように、ＦＰＧＡ  Ｂ１００４では、リダクション演算回路１００４ｅにより、通信バッファ１００４ｄに格納されたデータ間でのリダクション演算が２段階分実行される。なお、当該リダクション演算が実行される段階数は２段階に限らない。次いで、ＦＰＧＡ  Ｂ１００４は、当該リダクション演算の結果をＦＰＧＡ  Ｃ１００５に送信する。
【００５２】
図９ＤにＦＰＧＡ  Ｃ１００５の概略構成図を示す。図に示すように、ＦＰＧＡ  Ｃ１００５は、リダクション演算回路１００５ｅにより、ＦＰＧＡ  Ｂ１００４から受信したリダクション演算の結果を用いてさらにリダクション演算を行う。そして、ＦＰＧＡ  Ｃ１００５のリダクション演算の結果が、上記の実施形態の調査ノードによる調査の集計結果として障害解析用ノード３００に送信される。
【００５３】
〔実施例２〕
次に、実施例２における、各ノードのコマンド実行結果を集計する装置の構成について説明する。実施例２では、各ノードのＮＩＣによって上記のリダクション演算が実行される。これにより、各ノードのＣＰＵによる処理を介さずに複数のノード間でリダクション演算に係る待ち合わせ処理を行うことが可能となる。
【００５４】
図１０に、実施例２におけるノード１００−１のＮＩＣ１００−１ｃの一部のハードウェア構成図を示す。図１０に示すように、ＮＩＣ１００−１ｃは、ＦＩＦＯ（First-In First-Out）部６０１〜６０６、調停部６０７、スイッチ６０８、ＡＬＵ（Arithmetic Logical Unit）６０９を有する。ＦＩＦＯ部６０１〜６０３は、ＮＩＣ１００−１ｃのポー
トからパケットを受信し、受信したパケットを調停部６０７、スイッチ６０８またはＡＬＵ６０９に送信する。
【００５５】
ＡＬＵ６０９は、ＦＩＦＯ部６０１〜６０３から受信する複数のパケットを用いてリダクション演算を実行し、演算結果をスイッチ６０８に送信する。スイッチ６０８はクロスバースイッチであり、ＦＩＦＯ部６０１〜６０３、ＡＬＵ６０９から入力されるパケットをＦＩＦＯ部６０４〜６０６に出力する。調停部６０７は、ＦＩＦＯ部６０１〜６０３からＦＩＦＯ部６０４〜６０６までの間のパケットの移動を調整する。なお、図１０Ａでは、本実施例のＮＩＣ１００−１ｃで使用される多数のＦＩＦＯ部をＦＩＦＯ部６０１〜６０６に代表させて示しており、ＦＩＦＯ部の数は図１０Ａに示される構成に限られない。
【００５６】
本実施例では、ノード１００−１のＣＰＵ処理の負荷を増加させる懸念がないハードウェア機構であるリモートＮＩＣコマンド実行機構を利用する。リモートＮＩＣコマンド実行機構は、例えば、mellanox社のInfiniband装置に実装されている、CORE-Directと呼ば
れる機構によって実装されている。リモートＮＩＣコマンド実行機構により、できるだけＣＰＵの処理負担を低減し、他の処理、例えば計算処理、アプリ処理、その他ＩＯ処理以外の処理の邪魔をしない情報処理が可能となる。
【００５７】
本実施例で実行されるＮＩＣコマンドは、例えばＮＩＣ１００−１ｃのレジスタ（図示せず）等に登録されている。そして、レジスタに登録されたコマンドは、ＮＩＣ１００−１ｃ内で制御される。具体的には、ＮＩＣ１００−１ｃが障害解析用ノード３００から上記のデータパターン検索用コマンド３００ｈ、ポインタ追跡用コマンド３００ｉ、フィールド値チェック用コマンド３００ｊを受信したときに、レジスタ内の対応するコマンドが起動するように制御される。このような制御は、例えば、従来の割り込み処理回路と同様の構成で実行される。以上より、ＮＩＣ１００−１ｃは、障害解析用ノード３００からのコマンド受信を契機として、受信したコマンドに応じて、ＮＩＣコマンドをＣＰＵ１００−１ａを介さずに実行する。
【００５８】
ＮＩＣコマンドは、ＮＩＣ１００−１ｃのＡＬＣ６０９によって実行される。ＡＬＣ６０９によるコマンドの実行結果のデータは、調整部６０７によるスイッチ６０８の制御によって、ＦＩＦＯ部６０４〜６０６に振り分けられる。ＦＩＦＯ部６０４〜６０６に振り分けられたデータは、ポート（図示せず）を経由して他のノードに送信される。
【００５９】
したがって、本実施例によれば、ＮＩＣがＣＰＵの介在なしに自装置のメモリにアクセスし、実行するＮＩＣコマンドに対応するデータを取得し、取得したデータに対して障害調査用のリダクション演算を実行する。そして、ＮＩＣは、実行したリダクション演算の結果を他のノードのＮＩＣに送信する。本実施例では、例えばいわゆる高信頼マルチキャストのallreduce通信により、分散並列処理システム１内の障害解析用ノード３００を含
むノードが、各ノードで実行されるリダクション演算の最終的な結果を共有することができる。したがって、障害解析用ノード３００は、リダクション演算の最終的な結果に基づいて、リダクション演算の対象となるデータの値が有効でないノードを障害が発生しているノードとみなすことができる。
【００６０】
以上が本実施形態に関する説明であるが、上記の分散並列処理システム１内の各ノード等の構成や処理は、上記の実施形態に限定されるものではなく、本発明の技術的思想と同一性を失わない範囲内において種々の変更が可能である。例えば、上記の説明では、ノード２００−１がノード１００−１の調査ノードとして割り当てられているが、ノード２００−１の他に複数のノードがノード１００−１の調査ノードとして割り当てられてもよい。これにより、障害解析用ノード３００が各調査ノードにそれぞれ異なる障害調査用のコマンドを送信することで、ノード１００−１に対する複数の障害調査の処理を並列に実行することができる。
【００６１】
＜コンピュータが読み取り可能な記録媒体＞
コンピュータその他の機械、装置（以下、コンピュータ等）に上記情報処理装置の設定を行うための管理ツール、ＯＳその他を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。ここで、コンピュータは、例えば、ノード等である。
【００６２】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／Ｗ、ＤＶＤ、ブルーレイディスク、ＤＡＴ、８ｍｍテープ、フラッシュメモリ等のメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスクやＲＯＭ等がある。
【００６３】
以上の実施形態に関し、さらに以下の付記を開示する。
【００６４】
（付記１）
情報処理システム内のノードを、前記情報処理システムにおいて異常が検出されたノードの記憶部に記憶されたデータの調査を行う調査ノードとして割り当てる割当部と、
前記調査ノードに、前記異常が検出されたノードから前記調査の対象となるデータを取得するよう指示する第１の指示部と、
前記調査ノードに、前記取得したデータの所定値が正常であるか否かを判定する演算を実行するよう指示する第２の指示部と、
前記所定の値が正常値でない場合に前記所定のノードに障害が発生していると特定する特定部と
を備える情報処理装置。
【００６５】
（付記２）
複数のノードにおいて異常が検出されたときに、前記割当部は、前記異常が検出された各ノードに少なくとも１つの調査ノードを割り当て、
前記第２の指示部は、各調査ノードに、各調査ノード間で前記所定値が正常であるか否かを判定するリダクション演算を実行するよう指示する
付記１に記載の情報処理装置。
【００６６】
（付記３）
情報処理システム内のノードを、前記情報処理システムにおいて異常が検出されたノードの記憶部に記憶されたデータの調査を行う調査ノードとして割り当て、
前記調査ノードに、前記異常が検出されたノードから前記調査の対象となるデータを取得するよう指示し、
前記調査ノードに、前記取得したデータの所定値が正常であるか否かを判定する演算を実行するよう指示し、
前記所定の値が正常値でない場合に前記所定のノードに障害が発生していると特定する情報処理方法。
【００６７】
（付記４）
複数のノードにおいて異常が検出されたときに、前記異常が検出された各ノードに少なくとも１つの調査ノードを割り当て、
各調査ノードに、各調査ノード間で前記所定値が正常であるか否かを判定するリダクション演算を実行するよう指示する
付記３に記載の情報処理方法。
【００６８】
（付記５）
コンピュータに、
情報処理システム内のノードを、前記情報処理システムにおいて異常が検出されたノードの記憶部に記憶されたデータの調査を行う調査ノードとして割り当て、
前記調査ノードに、前記異常が検出されたノードから前記調査の対象となるデータを取得するよう指示し、
前記調査ノードに、前記取得したデータの所定値が正常であるか否かを判定する演算を実行するよう指示し、
前記所定の値が正常値でない場合に前記所定のノードに障害が発生していると特定する処理を実行させる情報処理プログラム。
【００６９】
（付記６）
コンピュータにさらに
複数のノードにおいて異常が検出されたときに、前記異常が検出された各ノードに少なくとも１つの調査ノードを割り当て、
各調査ノードに、各調査ノード間で前記所定値が正常であるか否かを判定するリダクション演算を実行するよう指示する
処理を実行させる付記６に記載の情報処理プログラム。
【符号の説明】
【００７０】
１    分散並列処理システム
１００−１〜１００−ｍ、２００−１〜２００−ｎ    ノード
１００−１ｄ〜１００−ｍｄ、２００−１ｄ〜２００−ｎｄ    調査エージェント
１００−１ｃ〜１００−ｍｃ、２００−１ｃ〜２００−ｎｃ    ＮＩＣ
３００    障害解析用ノード
３０１    割当部
３０２    第１の指示部
３０３    第２の指示部
３０４    特定部
【図１】
0006287691.tif 000002
【図２】
0006287691.tif 000003
【図３】
0006287691.tif 000004
【図４】
0006287691.tif 000005
【図５】
0006287691.tif 000006
【図６】
0006287691.tif 000007
【図７】
0006287691.tif 000008
【図８Ａ】
0006287691.tif 000009
【図８Ｂ】
0006287691.tif 000010
【図９Ａ】
0006287691.tif 000011
【図９Ｂ】
0006287691.tif 000012
【図９Ｃ】
0006287691.tif 000013
【図９Ｄ】
0006287691.tif 000014
【図１０】
0006287691.tif 000015