8.7. I/Oのプロファイリング

I/Oプロファイリングデータの取得例を示します。

本項と合わせて、取得したプロファイリングデータの活用例 I/Oの最適化をご参照ください。

8.7.1. LLIO性能情報

ジョブ投入時に--llio perfオプションを指定すると、LLIO性能情報をジョブの出力結果として得ることができます。これを参照することで、ジョブに関する第1階層ストレージへのアクセス状況を後から分析できます。

LLIO性能情報に関する詳細は、LLIOユーザーズガイドの「2.7.2 LLIO性能情報」を参照ください。

また、次の方法で容易にLLIO領域別のI/O状況を確認することができます。

  1. ジョブ投入時に--llio perfオプションを指定してジョブ実行します。

  2. ジョブ終了後、LLIO性能情報が出力されていることを確認します。

    例) <jobname>.<jobid>.llio_perf

  3. LLIO性能情報から各領域の状況を確認します。

    以下のような集計スクリプトを用意します。

    [_LNIlogin]$ cat sample.awk
    /^SIO Infomation/,/END/ {
       sumflg=1
    }
    /^I\/O     2ndLayerCache   NodeTotal/,/^I\/O     2ndLayerCache   ComputeNode/ {
       if($3 == "Sum" && sumflg == 1){sum1 += $6}
    }
    /^I\/O     SharedTmp       NodeTotal/,/^I\/O     SharedTmp       ComputeNode/ {
       if($3 == "Sum" && sumflg == 1){sum2 += $6}
    }
    /^I\/O     LocalTmp        NodeTotal/,/^I\/O     LocalTmp        ComputeNode/ {
       if($3 == "Sum" && sumflg == 1){sum3 += $6}
    }
    /^Meta    2ndLayerCache   NodeTotal/,/^Meta    SharedTmp       NodeTotal/ {
       if(NF == 3 && sumflg == 1){sum4 += $3}
    }
    /^Meta    SharedTmp       NodeTotal/,/^Meta    LocalTmp        NodeTotal/ {
       if(NF == 3 && sumflg == 1){sum5 += $3}
    }
    /^Meta    LocalTmp        NodeTotal/,/^Resource        2ndLayerCache   CacheOperation/ {
       if(NF == 3 && sumflg == 1){sum6 += $3}
    }
    END {
       total = sum1+sum2+sum3+sum4+sum5+sum6;
       printf("%-20s %20s %15s\n", "     Area","Time(us)", "% of Time");
       printf("%-20s %20d %15.1f\n", "Meta 2ndLayerCache", sum4, (sum4/total)*100);
       printf("%-20s %20d %15.1f\n", "     SharedTmp", sum5, (sum5/total)*100);
       printf("%-20s %20d %15.1f\n", "     LocalTmp", sum6,(sum6/total)*100);
       printf("%-20s %20d %15.1f\n", "I/O  2ndLayerCache", sum1,(sum1/total)*100);
       printf("%-20s %20d %15.1f\n", "     SharedTmp", sum2,(sum2/total)*100);
       printf("%-20s %20d %15.1f\n", "     LocalTmp", sum3,(sum3/total)*100);
    }
    

    引数にLLIO性能情報を指定して実行します。

    [_LNIlogin]$ awk -f sample.awk <jobname>.<jobid>.llio_perf
    
  4. 出力された内訳を確認します。

          Area                        Time(us)       % of Time
    Meta  2ndLayerCache           670517500351             4.0
          SharedTmp             15490822246315            92.7
          LocalTmp                 32396742469             0.2
    I/O   2ndLayerCache           357836957071             2.1
          SharedTmp               108339293976             0.6
          LocalTmp                 50591120306             0.3
    

    この例では、共有テンポラリ領域へのメタアクセスが全体の90%以上を占めていると判断できます。

8.7.2. Darshan

Darshanは、スケーラブルなHPC向けのI/O評価ツールです。 Spackによりツールが提供されており、ジョブのI/O解析として利用できます。 Darshanの詳細については、以下の URL を参照してください。

https://www.mcs.anl.gov/research/projects/darshan/

  1. プロファイルデータの取得

    取得例を示します。SpackからDarshanを読み込み、mpiexecで実行されるプログラムのI/Oプロファイリングデータを取得します。読み込むdarshan-runtimeは、ジョブID情報が残るscheduler=fjを推奨します。

    [_LNIlogin]$ spack find -lv  darshan-runtime
    -- linux-rhel8-a64fx / fj@4.10.0 --------------------------------
    kkioahn darshan-runtime@3.4.0~apmpi~apmpi_sync~apxc~hdf5+mpi build_system=autotools scheduler=NONE
    czlow63 darshan-runtime@3.4.0~apmpi~apmpi_sync~apxc~hdf5+mpi build_system=autotools scheduler=fj
    ==> 2 installed packages
    

    ジョブスクリプトの記載例

    . /vol0004/apps/oss/spack/share/spack/setup-env.sh
    spack load /czlow63
    
    export DARSHAN_LOG_DIR_PATH=/2ndfs/group/your_dir/       # a
    # export DARSHAN_ENABLE_NONMPI=1                         # b
    
    export LD_LIBRARY_PATH=`/home/system/tool/sort_libp`     # c
    /home/system/tool/sort_libp -s -a                        #
    
    mpiexec -stdout-proc ./%n.output.%j/%/1000r/stdout \
            -stderr-proc ./%n.output.%j/%/1000r/stderr \
            -x LD_PRELOAD=libdarshan.so   ./a.out
    

注釈

  1. プロファイリングデータの出力先は、2ndfs領域を推奨します。プロファイリングデータはデフォルトで代表1プロセスが書き込みますが、全ての計算ノードからアクセスされます。数千ノード以上で利用しデータ領域に出力した場合、LLIOの制限を超過しノードがスローダウンする可能性があります。
  2. non-MPI の場合、export DARSHAN_ENABLE_NONMPI=1を追加してからLD_PRELOADを有効にしてください。
  3. 動的ライブラリの検索負荷を削減する目的で、/lib64の追加やパスの重複排除、2ndfsや第2階層ストレージのキャッシュ領域のパスを後ろへ並び変えを行っています。また、コマンドの内部でllio_transferを実行しDarshanのライブラリを共通ファイルとして転送しています。詳細はsort_libpを参照ください。
  1. データの確認

    ジョブ実行後に、環境変数DARSHAN_LOG_DIR_PATHに指定したディレクトリにプロファイリングデータが出力されていることを確認します。

    [_LNIlogin]$ ls -l /2ndfs/group/your_dir/
    -r-------- 1 usr   group   13701394 Nov 18 08:08 usr_a.out_JOBID.darshan
    

    ログインノードからプロファイリングデータを展開できることを確認します。

    [_LNIlogin]$ spack find -lv darshan-util
    -- linux-rhel8-cascadelake / gcc@13.2.0 -------------------------
    dnpyrbu darshan-util@3.4.0~apmpi~apxc~bzip2 build_system=autotools
    euiezk6 darshan-util@3.4.4~apmpi~apxc~bzip2 build_system=autotools
    ==> 2 installed packages
    [_LNIlogin]$ spack load /euiezk6
    [_LNIlogin]$ darshan-parser  usr_a.out_JOBID.darshan | less
    

    出力例

    ...
    # description of columns:
    #   <module>: module responsible for this I/O record.
    #   <rank>: MPI rank.  -1 indicates that the file is shared
    #      across all processes and statistics are aggregated.
    #   <record id>: hash of the record's file path
    #   <counter name> and <counter value>: statistical counters.
    #      A value of -1 indicates that Darshan could not monitor
    #      that counter, and its value should be ignored.
    #   <file name>: full file path for the record.
    ...
    #<module> <rank>  <record id>    <counter>                  <value>     <file name> ...
    POSIX     -1      0123456789123  POSIX_OPENS                    18432    /vol0n0m/data/group/config
    POSIX     -1      0123456789123  POSIX_F_FASTEST_RANK_TIME   0.019958    /vol0n0m/data/group/config
    POSIX     -1      0123456789123  POSIX_F_SLOWEST_RANK_TIME  52.856744    /vol0n0m/data/group/config
    ...
    POSIX      0      1234567891234  POSIX_OPENS                        1    /vol0n0m/data/group/tmp.00000
    ...
    POSIX      1      1234567891234  POSIX_OPENS                        1    /vol0n0m/data/group/dat.00001
    POSIX      1      1234567891234  POSIX_F_READ_TIME          32.124292    /vol0n0m/data/group/dat.00001
    

注意

  • LLIOの非同期クローズオプションが有効な場合、ファイルが第2階層ストレージに未書き出しの場合でもcloseが即時に復帰する可能性があるため、正確なI/O時間を確認できない場合があります。