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

異常終了調査機能を有効にします。signalには捕捉したいシグナルを指定します。

  • ill :SIGILLシグナルを捕捉

  • abrt:SIGABRTシグナルを捕捉

  • fpe :SIGFPEシグナルを捕捉

  • segv:SIGSEGVシグナルを捕捉

  • bus :SIGBUSシグナルを捕捉

  • all :SIGILL、SIGABRT 、SIGFPE、SIGSEGV、および、SIGBUSシグナルを捕捉

-fjdbg-out-dir output-dir

調査結果ファイルを格納するディレクトリを指定します。output-dirには、格納ディレクトリ名を相対パスまたは絶対パスで指定します。

本オプションは、-fjdbg-sigオプションと同時に指定してください。

[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. 使用方法

デッドロック調査機能の使用方法は以下のとおりです。

  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
    
  2. 1.のジョブスクリプトを投入します。

  3. pjstatコマンドを実行して、手順2のジョブIDを確認します。

  4. デッドロックが疑われる状態で、以下のコマンドを投入します。

    [_LNlogin]$ pjsig -s SIGHUP 手順2で実行したジョブID
    

3.1.10.4.2. 実行時オプション

デッドロック調査機能で使用するオプションを以下に示します。

以下のオプションは、mpiexecコマンドの実行時オプションです。オプション使用方法の詳細は「MPI使用手引書」を参照してください。

オプション

説明

-fjdbg-dlock

デッドロック調査機能を有効にします。本オプションは、-fjdbg-out-dirオプションと同時に指定してください。本オプションのみを指定した場合、エラーメッセージを出力しプログラムの実行を終了します。

-fjdbg-out-dir output-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. バックトレース、フレームごとのローカル変数値および引数変数値

  2. シグナルを検出した箇所の前後の逆アセンブリ出力

  3. レジスタ内容

  4. メモリマップ

スレッドごとに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 [ ;... ]"

コマンドファイルによるデバッガ制御機能を有効にします。rank-noには、コマンドファイルによるデバッガ制御機能を実行するランク番号を指定します。

command-fileには、コマンドファイルのパスを相対パスまたは絶対パスで指定します。rank-noの指定がある場合、rank-nocommandfileをコロン(:)で区切ってください。

  • rank-noに1つだけを指定する場合
    ランク番号を指定します。(例: -gdbx"1:command.txt")
  • rank-noに範囲指定する場合
    開始番号と終了番号をハイフン(-)で繋ぎます。(例: -gdbx"1-10: command.txt")
  • rank-noに複数指定する場合
    ランク番号または範囲指定をコンマ(,)で区切ってください。(例: -gdbx "1,4-6,8:command.txt")
  • rank-noを省略した場合
    全ランクを対象にコマンドファイルによるデバッガ制御機能を実行します。(例: -gdbx "command.txt")

-fjdbg-out-dir output-dir

バッグ結果ファイルの格納先ディレクトリを相対パスまたは絶対パスで、:file:output-dir に指定します。本オプションを省略した場合、格納先ディレクトリは、 mpiexec コマンドの指定に従います。

  • 格納先ディレクトリが存在しない場合、output-dirを新規に作成します

  • 格納先ディレクトリが存在する場合、その直下にgdbxという名前のファイルが存在してはいけません

  • 格納先ディレクトリにgdbxという名前のディレクトリが存在する場合、そのディレクトリは空ディレクトリでなければいけません

[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 使用手引書」を参照してください。