DataWarpの利用

バーストバッファは,高速で小容量な一時保存ストレージで,計算ノードとファイルシステムの間に接続されています.プログラムが計算ノードからファイルシステムに書き込むとき,一旦バーストバッファにファイルを書き込むことで,高速な書き込みを実現します.また,ファイルシステムから読み出す時も,バーストバッファにコピーを置くことで,次に同じファイルを読むときに高速な読み込みを実現します.バーストバッファのファイルは自動的にファイルシステムに書き戻され,データの一貫性が保たれます.

バーストバッファは,SSD(ソリッドステートドライブ)により構成されたストレージであるため,SSDが得意なランダムアクセスや、多数のプロセスが共有ファイル(single-shared file)にアクセスするような場合に効果を発揮します.しかし,全てのプログラムに効果があるわけではないので,ご自身のプログラムで性能比較を行い,有効性を確認して頂く必要があります.

バーストバッファをお使いいただくためには,利用申請が必要です. 申請資格のある方は,パーソナルコースおよびグループコースの申請者,またはグループキュー管理者の方です.エントリコースおよび専用クラスタの方はご利用いただけません. 利用申請される場合は,下記の文面を問い合わせフォームまたはオンライン相談室宛てにメールで送信して下さい.

タイトル:
バーストバッファ利用申請

本文:
京都大学学術情報メディアセンター御中

バーストバッファの利用を下記の通り申請いたします。

利用者番号:
氏名:
所属:
システム名:
グループ名(グループコースの場合):

DataWarp は,大容量ディスクならびに/homeのバーストバッファ領域として利用できます. /LARGE0,1,2,3いずれからも利用できます.

バッチジョブを実行する際に,-bb オプションを指定することで,バーストバッファの利用を宣言します. DataWarpはキャッシュ領域として機能します. なお,ファイル書き込みをDataWarpにキャッシュするためには,DataWarp上に確保されたパスに移動してから書き込みを行うか,またはDataWarp上に確保されたパスを明示的に指定して書く必要があります. 後述のように,ディレクトリの絶対PATH がLustreとDataWarpで異なっておりますので,プログラムによってはパスの改修が必要となります.

DataWarpにキャッシュされた書き込みデータは,ジョブ終了時に自動で -bb オプションで指定されたディレクトリへ書き戻されます.

バーストバッファを使うには,ジョブスクリプトに -bb オプションを記述します.

#QSUB -bb capacity=XXXX
または
#QSUB -bb capacity=XXXX:pfs=YYYY
オプション 意味 備考
capacity バーストバッファに確保する一時ファイルの上限値 単位指定はG(ギガ).例)-bb capacity=2000G
pfs バーストバッファを適用するディレクトリ 書き込み権限のある既存のディレクトリのみ指定可能.省略した場合はカレントディレクトリ.環境変数$QSUB_BB_DIRにDataWarp上のディレクトリPATHが設定されます.

capacityの設定可能値にはサービスコースごとに下記の通り上限があります.上限以上の値をジョブスクリプトに設定しても,ジョブ投入時にエラーとなりますので,ご注意ください. DataWarpの利用を申請していない場合もエラーになります.

サービスコース capacityの上限値
パーソナル 800GB
グループ 200GBx申請ノード数

#!/bin/bash
#============ PBS Options ============ 
#QSUB -q gr19999a
#QSUB -ug gr19999
#QSUB –W 2:00:00
#QSUB -A p=8:t=4:c=4:m=1355M
#QSUB –bb capacity=100G:pfs=/LARGE0/gr19999/dir
#============ Shell Script ============
aprun -n $QSUB_PROCS -d $QSUB_THREADS -N $QSUB_PPN --wdir $QSUB_BB_DIR ./a.out

aprun において --wdir オプションを用いることにより,DataWarp上のディレクトリに自動で移動します(詳細は後述).

ジョブで-bbオプションが指定されると,DataWarp上にそのジョブ専用の一時領域が確保されます. この時,当該領域のパスは,Lustre側とは異なったものになります. また,ファイルはDataWarp側のパスに書き込まないとDataWarpにキャッシュされません. そのため,ファイル書き込みをDataWarpにキャッシュさせるためには,DataWarp上に確保されたパスに移動してから書き込みを行うか,またはDataWarp上に確保されたパスを明示的に指定して書く必要があります.

Lustre側とDataWarp側のパスの関係は,下記のようになっています.

  • 例:-bb pfs オプションで,/LARGE0/gr19999/dir をキャッシュ対象領域に指定した場合
    • Lustre: /LARGE0/gr19999/dir
    • DataWarp: /var/opt/cray/dws/mounts/batch/xxxxxx.ja_striped_cache
      • xxxxxx は,ジョブID

例えば,Lustre側で /LARGE0/gr19999/dir/subdir/file.dat に相当するパスは,DataWarpでは /var/opt/cray/dws/mounts/batch/xxxxxx.ja_striped_cache/subdir/file.dat となります. ジョブが /var/opt/cray/dws/mounts/batch/xxxxxx.ja_striped_cache/subdir/file.dat にファイルを書きこむことで,DataWarp にfile.dat がキャッシュされ,ジョブ終了までにLustre側へ /LARGE0/gr19999/dir/subdir/file.dat として書き戻されることになります.

DataWarpにキャッシュされたデータを読み出す場合も,DataWarp上に確保されたパスを指定する必要があります. もしLustre上のパスを指定すると,通常通りLustre側から読んでしまいます.この時,Lustre側ではファイルが更新されていないため,プログラムが不整合を起こすことになります.

上記の問題は,相対パスでファイル操作するプログラムを,DataWarp上のパスに移動してから実行する場合は,通常おきませんが,プログラムが絶対パスを利用している場合はご注意ください.

DataWarpを使うジョブでも,ジョブ開始時は通常のジョブと同様にLustre側のPATHでジョブの実行が始まります. DataWarpにファイルをキャッシュさせるには,DataWarp側のPATH にファイルを書く必要がありますので,相対パスでファイル操作するプログラムの場合はDataWarp側のPATH に移動する必要があります.

DataWarpを使うジョブでは,下記のように --wdir [ディレクトリ] オプションを aprun コマンドの後ろに付けることで,ジョブ開始時にDataWarp側のPATH へ自動的に移動します.

例えば,下記のように pfs=/LARGE0/gr19999/dir として, --wdir $QSUB_BB_DIR/subdir を指定すると,ジョブはLustre側の /LARGE0/gr19999/dir/subdir に対応する, DataWarp側の /var/opt/cray/dws/mounts/batch/xxxxxx.ja_striped_cache/subdir へ移動します.

#QSUB –bb capacity=100G:pfs=/LARGE0/gr19999/dir

aprun -n $QSUB_PROCS -d $QSUB_THREADS -N $QSUB_PPN --wdir $QSUB_BB_DIR/subdir ./a.out

なお,DataWarp上では, /var/opt/cray/dws/mounts/batch/xxxxxx.ja_striped_cache より上へ移動できません. そのため,先ほどの例であれば,もしプログラムが /LARGE0/gr19999/dir をカレントとする前提で 「 ../ 」 といったパス指定を行っている場合,以下のように pfs を一段上に指定する必要があります.

#QSUB –bb capacity=100G:pfs=/LARGE0/gr19999

DataWarpのメタデータはLustreのメタデータと共有しています.そのため,書き込みが新規ファイルの作成を伴う場合,メタデータはLustre側に作成されますが,中身が書き込まれないため,ジョブ終了またはキャッシュあふれが起こるまで容量はゼロのままとなります.

DataWarpは,-bbオプションで指定された容量に達するまで,対象のディレクトリへの書き込みを全てキャッシュし続けます. もしキャッシュが-bbオプションで指定された容量を超過すると,DataWarpはキャッシュの一部をLustreに書き戻すことで,DataWarp領域の空きを確保します.

ジョブ終了時に,DataWarpに残っていたキャッシュが全てLustre側に書き戻されます. DataWarpの領域は,書き戻しの終了後にすべて削除されます.

DataWarpにキャッシュされた書き込みデータは,ジョブ終了時に自動で Lustre へ書き戻されます. 書き戻しの最中にLustre のファイルの容量制限のため,エラーになった場合には,書き戻しは途中で打ち切られます. また,書き戻しが打ち切られた場合でも,DataWarpのキャッシュはジョブ終了と共に削除されます.

DataWarp使用中も,Lustre に既に存在するpfs配下のファイルをDataWarpのPATHで読み出せます(DataWarpにキャッシュが無い場合は,Lustreのデータを読みに行きます). なおデータ読み込みはDataWarpにキャッシュされません.

しかし,DataWarpにキャッシュされているファイルに対応するLustre側のファイルに対して,Lustre側から書き込みを行うとファイルが壊れるため,避けてください.

ジョブ実行中,-bbで指定していないLustreの領域は,LustreのPATHで通常通り読み書きが可能です.


Copyright © Academic Center for Computing and Media Studies, Kyoto University, All Rights Reserved.