(57)【要約】【課題】ＣＯＲＢＡ等を使用した複数ノードに跨る分散型プログラムにおいて、他のノードを経由して同一処理上で同一ロックを捕捉しようとした場合に発生するデッドロックを検出する。【解決手段】トレース実行中に各ノード上でロックを捕捉する処理の起動元ノード名と、起動元スレッド番号とを含むロックに関する実行状態を書き込むためのロック情報格納領域と、各ノード上でロックに関する実行状態を周期的に監視し、デッドロックが発生したことを検出する手段とを備える分散型プログラムのトレース装置。ロック情報を保存する際に起動元ノード名と起動元スレッド番号とを設定することにより、複数ノードに跨る分散型のプログラムであっても、同一処理上で同一ロックを捕捉しようとしていることが検出することができるため、デッドロックを検出することができる。【選択図】図３
2007156946.tif 000002
【特許請求の範囲】
【請求項１】
複数の実行単位が複数ノードに跨って動作する分散型プログラムにおいて、トレース実行中に各ノード上でロックを捕捉する処理の起動元ノード名と、起動元スレッド番号とを含む該ロックに関する実行状態を書き込むためのロック情報格納領域と、
前記各ノード上でロックに関する実行状態を周期的に監視し、デッドロックが発生したことを検出する手段とを備えることを特徴とする分散型プログラムのトレース装置。
【請求項２】
複数の実行単位が複数ノードに跨って動作する分散型プログラムにおいて、トレース実行中に各ノード上で該処理の起動元ノード名と、起動元スレッド番号とを含むトレース情報を書き込むためのトレース情報格納領域を備えることを特徴とする分散型プログラムのトレース装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散型プログラムのトレース装置に関し、特に、ＣＯＲＢＡ等を使用した複数ノードに跨る分散型プログラムのデッドロックや、実行時情報の収集等のデバッグを行う際に用いられる分散型プログラムのトレース装置に関する。
【背景技術】
【０００２】
従来、マルチスレッドプログラムの動作特性や、デッドロックを解析するため、例えば、特許文献１には、各スレッドがロックの捕捉や解放等の処理を時系列的に収集することで、デッドロックの発生を検出したり、デッドロックが発生する可能性のある箇所を検出することのできる並列プラグラムのトレース装置が記載されている。この装置は、トレース実行中に、ロック情報採取部が各スレッドのロック情報（ロック変数獲得待ち／ロック変数獲得／ロック変数解除）を共有メモリ上のロック情報テーブルに書き込み、ロック情報表示部が、これらのデータを表示する。また、デッドロック検出部が、トレース中にロック情報テーブルを走査してデッドロックの検出を行う。
【特許文献１】特開平８−１６４３０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかし、上記従来の並列プラグラムトレース装置においては、例えば、図１に示すような分散型プログラムにおいて、ロックＡを捕捉（１０１）しているNode aのTheread01が、ＣＯＲＢＡ等によりNode bにメッセージを送信し（１０２）、その応答を待っている際に、メッセージを受信したNode bがNode aに対してメッセージを送信し（１０３）、その処理内でロックＡの解放待ち（１０４）を行うと、デッドロックが発生するが、この際、トレースデータが図２に示すようになるため、従来技術では、ＣＯＲＢＡ等を使用した複数ノードに跨る分散型プログラムにおいて、デッドロックの検出を行うことができないという問題があった。
【０００４】
すなわち、従来の技術では、ロックの捕捉や解放等の処理をスレッド単位で収集しているため、ＣＯＲＢＡ等を使用した複数ノードに跨る分散型プログラムにおいて、既にロックを保有しているスレッドが他のノードを経由して、保有済みのロックを再捕捉することによってデッドロックを検出することが困難であった。
【０００５】
そこで、本発明は、上記従来の分散型プログラムのトレース装置における問題点に鑑みてなされたものであって、複数ノードに跨る分散型プログラムにおいても、デッドロックの発生を検出することのできる分散型プログラムのトレース装置を提供することを目的とする。また、これに加え、本発明は、複数ノードに跨っている処理の実行時情報を容易に収集することが可能な分散型プログラムのトレース装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記目的を達成するため、本発明は、複数の実行単位が複数ノードに跨って動作する分散型プログラムのトレース装置であって、トレース実行中に各ノード上でロックを捕捉する処理の起動元ノード名と、起動元スレッド番号とを含む該ロックに関する実行状態を書き込むためのロック情報格納領域と、前記各ノード上でロックに関する実行状態を周期的に監視し、デッドロックが発生したことを検出する手段とを備えることを特徴とする。
【０００７】
そして、本発明によれば、ロック情報を保存する際に起動元ノード名と起動元スレッド番号とを設定することにより、複数ノードに跨る分散型のプログラムであっても、同一処理上で同一ロックを捕捉しようとしていることを検出できるため、デッドロックを検出することができる。また、本動作は、本発明の機能ブロック内で収集・設定を行うため、デバッグを行うプログラムを変更する必要がない。これにより、分散型プログラムにおいて、デバッグを行うプログラムに一切変更を加えることなく、ノード間に跨った処理について、デッドロックの検出及びデッドロックが発生する可能性を検出することができる。
【０００８】
また、本発明は、複数の実行単位が複数ノードに跨って動作する分散型プログラムのトレース装置であって、トレース実行中に各ノード上で該処理の起動元ノード名と、起動元スレッド番号とを含むトレース情報を書き込むためのトレース情報格納領域を備えることを特徴とする。
【０００９】
本発明によれば、トレース情報を保存する際に起動元ノード名と起動元スレッド番号を設定することにより、複数ノードに跨る分散型のプログラムであっても、同一処理上の動作をトレースすることができる。そのため、各ノードのトレース情報を確認することにより、各箇所での処理時間を測定することができる。また、本動作は、本発明の機能ブロック内で収集・設定を行うため、デバッグを行うプログラムを変更する必要がない。これにより、トレース情報収集機能について、デバッグを行うプログラムに一切変更を加えることなく、各ノードに跨った処理がどのように実行され、各箇所での処理時間を測定することができる。
【発明の効果】
【００１０】
以上のように、本発明によれば、複数ノードに跨る分散型プログラムにおいて、デッドロックの発生を検出することができ、複数ノードに跨っている処理の実行時情報を容易に収集することも可能となる。
【発明を実施するための最良の形態】
【００１１】
本発明は、ＣＯＲＢＡ等を使用した複数ノードに跨る分散型プログラムにおいて、ノード間のメッセージにデバッグ情報として、当該処理の起動元であるノード名(以下、「起動元ノード名」という）と、そのスレッド番号(以下、「起動元スレッド番号」という)を付加することにより、複数ノードに跨った処理を行う場合でも同一処理上であることを識別することが可能となる。これにより、起動元ノード名と起動元スレッド番号とでロックの状態を確認し、同一処理上で同一ロックを捕捉しようしたことを識別し、デッドロックが発生したことを検出する。
【００１２】
本発明では、図３に示すように、実行時のトレース情報を保存するエリアであるトレース情報格納領域３０１と、ロック取得中／取得待ちなどの情報を保存するエリアであるロック情報格納領域３０２とに、各々起動元ノード名と起動元スレッド番号とを保存するエリアを設ける。
【００１３】
また、各スレッド３１０〜３１Ｎの固有エリアに、起動元情報を保存するエリアである起動元情報保存部３０４を設け、ノード間で通信を行う際に、ノード間通信時デバッグ情報付加機能３０３が起動元情報保存部３０４から、起動元ノード名と起動元スレッド番号とを読み出し、ノード間のメッセージにデバッグ情報として付加する。また、ノード間通信時デバッグ情報付加機能３０３は、ノード間のメッセージを受信した時に、該当メッセージの処理を行うスレッドの起動元情報保存部３０４へ、起動元ノード名と起動元スレッド番号とを書き込む。
【００１４】
各スレッド３１０〜３１Ｎのトレース情報収集時、及びロック状態保存時に、トレースデータ収集部３０５が実行され、トレースデータ収集部３０５は、各スレッド３１０〜３１Ｎの起動元情報保存部３０４から、起動元ノード名と起動元スレッド番号とを読み出し、自ノード内スレッド番号に加え、起動元ノード名と起動元スレッド番号とを同時に保存する。
【００１５】
デッドロック検出部３０６は、ロック情報格納領域３０２について周期的に各ロックの状態を確認し、同一処理上で既に捕捉済みのロックを再度捕捉していることを検出することにより、デッドロックが発生したことを検出する。
【００１６】
尚、ノード間通信時デバッグ情報付加機能３０３と、トレースデータ収集部３０５とは、起動元情報保存部３０４に起動元ノード名と起動元スレッド番号とが設定されてなかった場合には、自ノード名と自ノード内のスレッド番号とを、起動元ノード名と起動元スレッド番号として扱う。
【００１７】
次に、複数ノードに跨る分散型プログラムにおける実行時情報、特にロックについての動作シーケンスを、図４を参照しながら、また、その際に収集されるロックの実行時情報を図５を参照しながら説明する。
【００１８】
自ノード内の処理でロックを捕捉する場合（４０１）には、Node aのロック情報格納領域（５００）の起動元ノード名／起動元スレッド番号には、自ノード名及び自ノード内のスレッド番号を設定する（５０１、５０２）。
【００１９】
他のノードへメッセージを送信する場合（４０２）には、ノード間通信時デバッグ情報付加機能（４０３）を経由してメッセージを送信することにより、ノード間のメッセージに起動元のノード名（図４中のNode a）と、スレッド番号（図４中のTheread01）を付加し、起動先にメッセージを送信する(４０４)。
【００２０】
起動先ノード（図４中のNode b）のノード間通信時デバッグ情報付加機能（４０５）では、通知された起動元ノード名と起動元スレッド番号とを、実際に処理を行うスレッドの起動元情報情報保存部（３０４）に保存し、実処理部分へはメッセージ部分だけを渡す（４０６）。
【００２１】
Node bのロックＢを捕捉する際（４０７）には、Node bのロック情報格納領域（５１０）の起動元ノード名／起動元スレッド番号には、起動元であるNode aと起動元のスレッド番号であるTheread01を設定する（５１１、５１２）。
【００２２】
また、Node bから他のノード（図４ではNode a）へメッセージを送信する場合（４０８）には、ノード間通信時デバッグ情報付加機能（４０５）を経由してメッセージを送信するが、本処理は、他のノード（図４中では、Node aのTheread01）から起動されているため、起動先へ送信するメッセージには、本来の起動元の情報（Node a＋Theread01）を付加する（４０９）。
【００２３】
上記の動作を繰り返し、他のノードを経由して同一処理上で同一ロックを捕捉しようとした場合（４１１）には、Node aのロック情報格納領域（５００）にロック解放待ちの状態が記録される（５０３）。
【００２４】
デッドロック検出部（図３の３０６）がNode aのロック情報格納領域（５００）を起動元ノード名と、起動元スレッド番号とでロックの状態を確認することにより、同一処理上で既に捕捉済みのロックを再度捕捉していることを検出することができ、デッドロックが発生したことを検出することができる。
【００２５】
次に、本発明にかかる分散型プログラムのトレース装置の第２の実施の形態について図面を参照しながら詳細に説明する。
【００２６】
複数ノードに跨る分散型プログラムにおける実行時情報、特にトレース情報についての収集動作シーケンスを、図６を参照しながら、また、その際に収集されるトレース情報を図７を参照しながら説明する。
【００２７】
各処理時間を測定する上でポイントとなる箇所、例えば、図６中の６０２、６０６、６０７、６０９等の各処理の開始/終了部分でトレース情報を収集することにより、各ノードに跨った機能について、どのように処理が実行されているかのトレースを行うことができるとともに、各箇所での処理時間を測定することができるため、処理上でボトルネックとなっている箇所を見つけることが可能となる。具体的な動作は、以下の通りである。
【００２８】
６０２のメッセージの起動時に、Node aのトレース情報格納領域（７００）へ、トレース情報と、情報収集時の時刻、起動元ノード名（図６中のNode a）と、スレッド番号（図６中のTheread01）を保存する（７０１）。
【００２９】
次に、他のノードへメッセージを送信する（６０４）際に、Node aのトレース情報格納領域（７００）へ、トレース情報と、情報収集時の時刻、起動元ノード名（図６中のNode a）とスレッド番号（図６中のTheread01）を保存する（７０２）。本操作を順次繰り返し、一連の処理が終了した際に、各ノードNode a、Node ｂ上のトレース情報格納領域（７００、７１０）に保存されているトレース情報を収集し、起動元ノード名と起動元スレッド番号をキー情報として、複数ノードに跨った処理をトレースすることにより、各ノード間で実行された処理を把握し、各箇所での処理時間を測定することができる。
【図面の簡単な説明】
【００３０】
【図１】従来の複数ノードに跨る処理の動作シーケンス例を示す図である。
【図２】従来の複数ノードに跨る処理を実行した際のロック情報を示す図である。
【図３】本発明にかかる分散型プログラムのトレース装置の一実施の形態を示すブロック図である。
【図４】本発明のロックについて着目した実施例における分散型プログラムの動作シーケンス例を示す図である。
【図５】本発明のロックについて着目した実施例における分散型プログラムを実行した際のロック情報を示す図である。
【図６】本発明のトレース情報について着目した実施例における分散型プログラムの動作シーケンス例を示す図である。
【図７】本発明のトレース情報について着目した実施例における分散型プログラムを実行した際のロック情報を示す図である。
【符号の説明】
【００３１】
３０１  トレース情報格納領域
３０２  ロック情報格納領域
３０３  ノード間通信時デバッグ情報付加機能
３０４  起動元情報保存部
３０５  トレースデータ収集部
３０６  デッドロック検出部
３１０、３１１、３１Ｎ  スレッド
４０３  Node aのノード間通信時デバッグ情報付加機能
４０５  Node bのノード間通信時デバッグ情報付加機能
５００  Node aのロック情報格納領域
５１０  Node bのロック情報格納領域
７００  Node aのトレース情報格納領域
７１０  Node bのトレース情報格納領域
【図１】
2007156946.tif 000003
【図２】
2007156946.tif 000004
【図３】
2007156946.tif 000005
【図４】
2007156946.tif 000006
【図５】
2007156946.tif 000007
【図６】
2007156946.tif 000008
【図７】
2007156946.tif 000009