8.5. 共有テンポラリ領域

同一ジョブ内で第1階層ストレージを共有して使用できます。

共有テンポラリ領域は同一ジョブ内であれば複数の計算ノード間で共有できます。共有テンポラリ領域は、ジョブ開始時に使用可能になり、ジョブ終了時に使用できなくなります。そのため利用者はジョブ実行結果ファイルなど退避しておきたいファイルを、第2階層ストレージのキャッシュ領域(または2ndfs領域)に配置する必要があります。

  1. 共有テンポラリ領域は、ジョブ内の複数の計算ノードから共有することができます。

  2. 共有テンポラリ領域は、ジョブ開始時に使用可能になり、ジョブ終了時に消去されます。ジョブ実行結果ファイルなど退避は第2階層ストレージのキャッシュ領域(または2ndfs領域)に配置する必要があります。

  3. 共有テンポラリ領域を使用するには、ジョブ投入時にpjsubコマンドのオプションで、--llio sharedtmp-sizeで任意の領域サイズを指定する必要があります。

  4. 共有テンポラリ領域のパス名は、ジョブ内で環境変数PJM_SHAREDTMPにより参照できます。

../_images/SharedTemporaryArea_01.png
  1. 共有テンポラリ領域の仕様を説明します。

    共有テンポラリ領域の仕様

    項目

    特性

    参照範囲

    ジョブに割り当てられた計算ノード間で参照できます。同じジョブの中であれば複数の計算ノードから参照できます。

    生存期間

    ジョブ起動前に初期化され、ジョブ終了時に削除されます。

8.5.1. 共有テンポラリ領域に対するストライプ設定

共有テンポラリ領域を複数の第1階層デバイスに分散して格納することにより、ファイルアクセスの帯域幅が向上します。 ユーザはジョブ投入時にアプリケーションのI/O特性(シーケンシャルアクセスが多いなど)に合わせてストライプサイズやストライプカウントを指定します。 これにより、共有テンポラリ領域への効率なアクセスが可能になります。

../_images/StripeSettingForSharedTemporaryArea_01.png

ストライプカウントを3に設定する例を示します。

領域名

Lfsコマンド

pjsub --llioオプション

共有テンポラリ領域

$ pjsub  --llio  stripe-count=3  jobscript.sh

注釈

  • 設定できるストライプカウントの上限は現在24です。

  • LLIOのストライプカウントのデフォルトは24です。

8.5.2. 共有テンポラリ領域の容量

共有テンポラリ領域を使う場合、そのサイズはジョブ投入時に指定できます。
pjsubコマンドの--llioオプションのパラメーターsharedtmp-sizeで"共有テンポラリ領域のサイズ÷割当てノード数"を指定します。サイズを指定しない場合は、システムで設定されているデフォルト値(0MiB)になります。

領域名

オプション

指定値

共有テンポラリ領域

--llio sharedtmp-size

共有テンポラリ領域サイズ÷ジョブ割当ノード数

注意

  • パラメーターsharedtmp-sizeで指定する値は、ジョブが利用できる共有テンポラリ領域全体のサイズではありません。共有テンポラリ領域全体のサイズは、パラメーターsharedtmp-sizeで指定する値にジョブに割り当てるノード数を乗じた値になります。
  • ジョブ投入時に指定した共有テンポラリ領域のサイズまで容量を消費していないにも関わらず、空き容量不足でエラーになることがあります。
    これは、ジョブが複数のストレージI/Oノードを利用し、1つのストレージI/Oノードの利用可能容量を使い切ったことが原因と考えられます。
    上記現象が発生した場合、共有テンポラリ領域の容量を増やしてジョブを実行してください。

第2階層ストレージのキャッシュの容量に128MiB以上を割り当てる必要があります。サイズの指定は次を満たすようにしてください。:

128MiB <= 87GiB - (localtmp-size + sharedtmp-size)

8.5.3. 利用方法

ジョブ投入時にオプションを指定することで、共有テンポラリ領域を利用できます。

  1. ジョブを投入します。

    $ pjsub --llio sharedtmp-size=size   jobscript.sh
    
  2. 共有テンポラリ領域のパス名(ディレクトリ名)は、環境変域PJM_SHAREDTMPに設定されます。

    ジョブ内で設定されている環境変数PJM_SHAREDTMPで確認できます。以下は、共有テンポラリ領域を一時的なデータの格納先として利用する簡単なジョブの例です。

    prog1 -o ${PJM_SHAREDTMP}/out.data
    
  3. ファイルout.dataをプログラムprog2が読み込んで、ディレクトリ${PJM_SHAREDTMP}に最終的な計算結果result.dataを出力します。

    prog2 -i ${PJM_SHAREDTMP}/out.data -o ${PJM_SHAREDTMP}/result.data
    
  4. ジョブの終了前にファイルresult.dataをジョブ実行時のディレクトリ${PJM_JOBDIR}(グローバルファイルシステム上)に、ジョブID${PJM_JOBID}をつけた名前に変えて退避します。

    $ cp ${PJM_SHAREDTMP}/result.data ${PJM_JOBDIR}/result_${PJM_JOBID}.data
    

8.5.4. ジョブ投入時(pjsub --llio)のオプション

共有テンポラリ領域に関連するオプションを説明します。

pjsubオプション

説明

sharedtmp-size=size

共有テンポラリ領域のサイズを指定します。
共用テンポラリ領域のパス名は、ジョブ内で環境変数PJM_SHAREDTMPに設定されます。

stripe-count=count

共有テンポラリ領域にファイルを分散配置する際のファイル当たりのストライプ数を指定します。(デフォルト24)

stripe-size=size

共有テンポラリ領域にファイルを分散配置する際のストライプサイズを指定します。

async-close={on|off}

共有テンポラリ領域のクローズを非同期クローズにするか否かの動作を指定します。
計算ノード内のキャッシュから第1階層ストレージに対する同期/非同期クローズ指定

on: 非同期クローズ
off: 同期クローズ(デフォルト)

perf[,perf-path=path]

LLIO性能情報をファイルに出力します。
出力先はジョブ投入時のカレントディレクトリ配下で、ファイル名はジョブACL機能で定義されている名前です。なお、パラメーター perf-pathで出力先のファイルを指定できます。