3.1.10. 並列実行デバッガ機能¶
並列実行デバッガの機能について説明します。
3.1.10.1. 概要¶
並列実行デバッガでは、各種調査に使用する情報の取得とコマンドファイルによるデバッガ制御にGDBを使用しています。
並列実行デバッガの構成は以下のとおりです。
- 異常終了調査機能
プログラムの異常終了の原因調査を支援します。プログラムの異常終了によりシグナルを受信したタイミングでバックトレースなどの実行情報を取得します。
- デッドロック調査機能
プログラムのデッドロック発生の有無およびデッドロック発生の原因調査を支援します。プログラムが終了しない場合や応答しない場合に、ジョブのすべてのプロセスに対してバックトレースなどの実行情報を取得します。
- 重複除去機能
異常終了調査機能、および、デッドロック調査機能の調査結果ファイルを対象に、可読性向上のためのデータ加工をします。本機能では専用のコマンド(fjdbg_summary)を使用します。
- コマンドファイルによるデバッガ制御機能
プロセスごとに異なるデバッガ制御を実施するためのデバッガ制御機能を提供します。本機能では、コマンドファイルと呼ばれるGDBのコマンドを記述したファイルを利用します。
注意
異常終了調査機能、デッドロック調査機能、および、コマンドファイルによるデバッガ制御機能を使用する場合、mpiexecコマンドのオプションで指定します。異常終了調査機能とデッドロック調査機能は同時に使用できますが、コマンドファイルによるデバッガ制御機能はほかの調査機能と同時に使用できません。
3.1.10.2. 翻訳時オプション¶
並列実行デバッガを使用する場合、MPIプログラムの翻訳時に-g
オプションを指定することを推奨します。翻訳時に-g
オプションを指定しない場合、引数変数、引数変数値、ローカル変数、およびローカル変数値の情報を取得できません。
翻訳時オプションの詳細については、「並列実行デバッガ使用手引書」の「1.2 翻訳時オプション」を参照してください。
3.1.10.3. 異常終了調査機能¶
異常終了調査機能を使用すると、プログラムが異常終了によりシグナルを受信したタイミングでプログラムの実行情報(バックトレース、フレームごとのローカル変数値および引数変数値、シグナル発生時アドレスを含む逆アセンブリ出力、レジスタ内容、メモリマップ)を取得できます。
詳細は「並列実行デバッガ使用手引書」の「第2章 異常終了調査機能」を参照してください。
3.1.10.3.1. 実行時オプション¶
異常終了調査機能で使用するオプションを以下に示します。
本オプションは、mpiexecコマンドの実行時オプションです。
オプション |
説明 |
---|---|
-fjdbg-sig signal |
異常終了調査機能を有効にします。
|
-fjdbg-out-dir output-dir |
調査結果ファイルを格納するディレクトリを指定します。 本オプションは、 |
[mpiexecコマンドへのオプション指定例]
[_LNlogin]$ mpiexec -fjdbg-sig all -fjdbg-out-dir "./log" -n 4 ./a.out
3.1.10.3.2. 調査結果ファイル¶
異常終了調査機能は、プログラムの実行中に調査結果ファイルの格納用ディレクトリを生成します。
格納用ディレクトリの構成は以下のとおりです。
output-dir
直下に、signal
という名前のディレクトリを作成します。プログラムが正常終了した場合はsignal
ディレクトリのみ作成し、以降の出力を行いません。signal
ディレクトリ内に調査結果ファイルを出力します。signal
ディレクトリ直下に、1000ランク単位でディレクトリを作成し、ランクごとに調査結果ファイルを出力します。調査結果ファイル名は「ジョブID.ランク番号」の規則に従います。
[ジョブIDが99999、ランク番号が0~2のプログラムの実行結果]
output-dir/signal/0000000/99999.0
output-dir/signal/0000000/99999.1
output-dir/signal/0000000/99999.2
参考
調査結果ファイルはそのままでも参照できますが、後述の重複除去機能を使用することを前提としています。
3.1.10.4. デッドロック調査機能¶
デッドロック調査機能を使用すると、プログラムが終了しない場合や応答がない場合に、ジョブのすべてのプロセスに対してプログラムの実行情報(バックトレース、フレームごとのローカル変数値および引数変数値、メモリマップ)を取得できます。
詳細は「並列実行デバッガ使用手引書」の「第3章デッドロック調査機能」を参照してください。
3.1.10.4.1. 使用方法¶
デッドロック調査機能の使用方法は以下のとおりです。
プログラム実行用のジョブスクリプトを作成します。必要な処理は以下のとおりです。
trapコマンドを使用して、SIGHUP(ハングアップ)およびSIGXCPU(CPUタイムアウト)シグナル受信時の設定を変更します。
mpiexecコマンドを実行します。デッドロック調査機能を有効にするため、後述の実行時オプションを指定する必要があります。
[_LNlogin]$ trap 'echo SIGHUP/SIGXCPU received.' HUP XCPU mpiexec -fjdbg-dlock -fjdbg-out-dir "./log" -n 4 ./a.out
1.のジョブスクリプトを投入します。
pjstatコマンドを実行して、手順2のジョブIDを確認します。
デッドロックが疑われる状態で、以下のコマンドを投入します。
[_LNlogin]$ pjsig -s SIGHUP 手順2で実行したジョブID
3.1.10.4.2. 実行時オプション¶
デッドロック調査機能で使用するオプションを以下に示します。
以下のオプションは、mpiexecコマンドの実行時オプションです。オプション使用方法の詳細は「MPI使用手引書」を参照してください。
オプション |
説明 |
---|---|
-fjdbg-dlock |
デッドロック調査機能を有効にします。本オプションは、 |
-fjdbg-out-dir output-dir |
調査結果ファイルを格納するディレクトリを指定します。 |
[mpiexec
コマンドへのオプション指定例]
[_LNlogin]$ mpiexec -fjdbg-dlock -fjdbg-out-dir "./log" -n 4 ./a.out
3.1.10.4.3. 調査結果ファイル¶
デッドロック調査機能が出力する調査結果ファイルについて説明します。
デッドロック調査機能は、プログラムの実行中に調査結果ファイルの格納用ディレクトリを生成します。その後、pjsigコマンドを投入した タイミングで格納用ディレクトリ内に調査結果ファイルを出力します。格納用ディレクトリの構成は以下のとおりです。
output-dir
直下にdeadlock
という名前のディレクトリを作成します。deadlock
ディレクトリ内に調査結果ファイルを格納します。deadlock
ディレクトリ直下に1000ランク単位でディレクトリを作成し、ランクごとに調査結果ファイルを出力します。調査結果ファイル名は「ジョブID.ランク番号」の規則に従います。
[ジョブIDが99999、ランク番号0~2のプログラムの実行結果]
output-dir/deadlock/0000000/99999.0
output-dir/deadlock/0000000/99999.1
output-dir/deadlock/0000000/99999.2
参考
調査結果ファイルはそのままでも参照できますが、後述の重複除去機能を使用することを前提としています。
3.1.10.5. 重複除去機能¶
重複除去機能は、異常終了調査機能、および、デッドロック調査機能の調査結果ファイルに対して以下の処理をします。
重複するバックトレースの除去
プログラムの実行情報を整形した以下を表示
バックトレース
フレームごとのローカル変数値および引数変数値
シグナルを検出した箇所の前後の逆アセンブリ出力
レジスタ内容
メモリマップ
3.1.10.5.1. 使用方法¶
重複除去機能は、fjdbg_summaryコマンドを使用します。fjdbg_summaryコマンドの使用方法について以下に示します。
[fjdbg_summaryコマンドの形式]
fjdbg_summary [ -h | -v ] [ -n ] [ -a ] [ -b ] [ -r rankspec ] [ -p outrank ] input-dir
[実行時オプション]
オプション
説明
-h
コマンドの使用方法を表示して終了します。
-v
バージョン情報を表示して終了します。
-n
バックトレースの重複除去を実施せず、各種情報の整形処理だけ実施します
-a
関数名に加えてバックトレースのアドレス部をキーとしたバックトレースの重複除去を実施します。
-b
オブジェクトファイル内のシンボル有無にかかわらず最後までバックトレースを出力します。
-r rankspec
重複除去結果として出力するランク番号を指定します。
rankspec
を省略することはできません。-p outrank
フレームごとのローカル変数値および引数変数値を出力するランク数を指定します。 調査結果ファイルの最小ランクを先頭に
outrank
数分のフレームごとの引数、変数、および、ローカル変数を出力します。input-dir
重複除去処理対象のディレクトリを相対パスまたは絶対パスで指定します。異常終了調査機能またはデッドロック調査機能で作成した調査結果ディレクトリ内の、
signal
ディレクトリまたは、deadlock
ディレクトリを指定します。
[コマンド実行例]
[_LNlogin]$ fjdbg_summary -a -r 1-10 ./dbg_result/signal
3.1.10.5.2. 出力内容¶
重複除去機能を使用した場合、入力情報を以下の順番で出力します。
バックトレース、フレームごとのローカル変数値および引数変数値
シグナルを検出した箇所の前後の逆アセンブリ出力
レジスタ内容
メモリマップ
スレッドごとに1.~3.の情報を出力し、最後に4.を出力します。2.~4.の情報は重複除去機能の対象とならず、常に1ランクごとに情報を出力します。なお、使用する調査機能や問題の発生状況などによっては一部項目を出力しません。
出力内容の詳細は「並列実行デバッガ使用手引書」-「2.3.2 出力内容」を参照してください。
3.1.10.6. コマンドファイルによるデバッガ制御機能¶
コマンドファイルによるデバッガ制御機能を使用すると、ジョブ投入時にコマンドファイルを利用したデバッガ制御を行います。これにより、 プロセスごとに異なるデバッグを実行したり特定のプロセスだけをデバッグの対象にすることが出来ます。
コマンドファイルによるデバッガ制御機能では、GDBのバッチモードを利用します。GDBのバッチモードではコマンドファイルと呼ばれるGDBのコマンドを記述したファイルを使用します。
詳細は「並列実行デバッガ使用手引書」の「第4章 コマンドファイルによるデバッガ制御機能」を参照してください。
3.1.10.6.1. 実行時オプション¶
コマンドファイルによるデバッガ制御機能で使用するオプションを以下に示します。
本オプションは、mpiexecコマンドの実行時オプションです。
コマンドオプションの使用方法の詳細は、「MPI使用手引書」を参照してください。
オプション名 |
説明 |
---|---|
-gdbx "[ rank-no: ] command-file [ ;... ]" |
コマンドファイルによるデバッガ制御機能を有効にします。
|
-fjdbg-out-dir output-dir |
バッグ結果ファイルの格納先ディレクトリを相対パスまたは絶対パスで、:file:
|
[mpiexecコマンドへのオプション指定例]
[_LNlogin]$ mpiexec -gdbx "0,1:./work/command.txt" -n 2 ./a.out arg1 arg2 arg3
[_LNlogin]$ mpiexec -gdbx "0,1:./work/command1.txt;2:./work/command2.txt" -fjdbg-out-dir "./log" -n 2 ./a.out arg1 arg2 arg3
3.1.10.6.2. デバッグ結果ファイル¶
コマンドファイルによるデバッガ制御機能実行時、標準出力にデバッグ結果を出力します。-fjdbg-out-dir
オプションを指定した場合、指定ディレクトリ直下にgdbx
という名前のディレクトリを作成し、デバッグ結果ファイルを出力します。デバッグ結果ファイル名は「ジョブID.ランク番号」の規則に従います
[ジョブIDが99999、ランク番号が0~2のプログラムの実行結果]
output-dir/gdbx/99999.0
output-dir/gdbx/99999.1
output-dir/gdbx/99999.2
参考
標準出力に出力する場合、mpiexecに--ofprefix data,rank,nid
オプションを付加することで、どのランクとノードIDから出力されたのか判断することが可能です。詳細は「MPI 使用手引書」を参照してください。