IMEの利用

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

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

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

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

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

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

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

IME は,大容量ディスク/LARGE0 のバーストバッファ領域として利用できます./LARGE1,2,3は利用できません. 大容量ディスクとして/LARGE2,3が割り当てられている方で,バーストバッファを使ってみたいという方は,ご相談ください.割り当て領域の/LARGE0,1への移行を検討させて頂きます.

バッチジョブを実行する際に,-bb オプションを指定することで,バーストバッファの利用を宣言します. IMEはPosixインターフェイスに対応しているため,通常のファイルシステムと同じようにアクセスすることができます. Lustre ファイルシステムとメタデータ(ファイルの情報)を共有しているため,/LARGE0 のファイルに透過的にアクセス可能です. 次のように,ディレクトリの絶対PATH は異なりますが,IMEのPATHの先頭に/IMEが付与される以外は,同じファイルツリーを参照できます. プログラムが参照するファイルが相対PATHで指定されている場合は,プログラムや入力ファイルを変更することなく利用することができます.

  • Lustre: /LARGE0/gr19999/file
  • IME: /IME/LARGE0/gr19999/file

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

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

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

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

#!/bin/bash
#============ PBS Options ============ 
#QSUB -q gr19999b
#QSUB -ug gr19999
#QSUB –W 2:00:00
#QSUB -A p=8:t=4:c=4:m=3413M
#QSUB –bb capacity=100G:pfs=./
#============ Shell Script ============
mpiexec.hydra ./a.out

IMEは,事前にファイルをキャッシングしない限り,Lustreにあるファイルを直接読み込みます. 予めキャッシュする場合は,専用のコマンドを実行する必要がありますが, 同じファイルを何度も読み込む必要が無い限り,読み込みをキャッシュする利点はありません. そのため,ファイル読み込みのためのキャッシュについては,本マニュアルでは解説していません.

有用な利用方法がある場合はお問い合わせください.

IME 上で書込み処理を行うと,IME上にキャッシュされます. ジョブの終了時には,ジョブ投入時に指定した領域(-bb のpfs)については自動で書き出しを行います.領域の指定を省略した場合は,ジョブ投入時のカレントディレクトリが対象になります. 専用のコマンドを実行することで,自身で明示的に書き出しを行うことも可能です. また,ジョブスクリプトで指定していない領域にファイルを書いてしまった場合は自分で書き出しが必要です.

IMEのディレクトリパスは,/LARGE0の先頭に /IMEを加えたものとなります. 例えば,ジョブスクリプトでpfsを#QSUB –bb pfs=/LARGE0/gr19999/b59999/dataと指定したのであれば,IME上でのディレクトリのパスは/IME/LARGE0/gr19999/b59999/dataとなります.

なお,ログインノードにはIMEをマウントしていないため,ログインノードからIME領域を参照することはできません.

通常のジョブの場合,qsubコマンドを実行したディレクトリに自動で移動したうえで,ジョブスクリプトを起動します. -bb によりバーストバッファの利用を宣言した場合,pfsで指定したディレクトリのIME領域(/IMEで始まるディレクトリ)に移動したうえでジョブスクリプトを起動します. pfsを省略した場合は,qsubを実行したカレントディレクトリに対応するIME領域でジョブスクリプトを起動します. これにより,相対PATHでアクセスするファイル全てばIMEを経由したアクセスになります.

なお,ジョブ投入時のディレクトリは,環境変数 $QSUB_WORK_DIR に保存されています.-bb オプションのpfsで指定したディレクトリは,$QSUB_BB_DIR に保存されています.

IMEは/LARGE0と同じメタデータサーバを参照するので,IMEを経由しても同一のファイルの読み書きが可能です.しかし,メタデータアクセスの性能はリモートの/LARGE0を参照することになるため, IMEが劣ります.大量のデータをopen/closeするようなアクセスパターンには向かない点をご理解の上使用してください.

1つのディレクトリに置くファイル数は最小限にすることは性能に良い影響を与えます. なお,これはLARGEにおいても同じことが言えますが,IMEの方が強く影響があります.

IMEにファイルを書き込むと,/LARGE0のメタデータサバにもファイル情報が書かれるため,ファイルの存在をすぐに確認できます. しかし,IMEにファイルをキャッシュしている状態では/LARGE0にはまだファイルが無い状態の為,ls -l コマンドで確認しても容量が0の状態です.

ジョブの終了時に/IMEから/LARGE0にファイルのシンク処理を行うまで,中身を参照することはできません.

例:

IMEのディレクトリにデータを作成
$ dd if=/dev/urandom of=/IME/LARGE0/gr19999/b59999/data/512mfile-2 bs=1M count=512

ls –l を実行
$ ls -l /IME/LARGE0/gr19999/b59999/data
-rw-r--r-- 1 b59999 gr19999 536870912 10 Oct 13:53 /IME/LARGE0/gr19999/b59999/data/512mfile-2

大容量ディスクの同名ディレクトリに対してls –l を実行
$ ls -l /LARGE0/gr19999/b59999/data
-rw-r--r-- 1 b59999 gr19999 0 10 Oct 13:53 /LARGE0/gr19999/b59999/data/512mfile-2
                              ↑容量がゼロ

ジョブの終了時に自動的にファイルのシンクとリリース処理を行います. IME全体の容量が圧迫された場合にも,自動でシンクおよびリリースを行います.

ジョブスクリプトにコマンドによる指示をすることも可能です. もし,シンク処理の最中に/LARGE0 のファイルの容量制限のため,エラーになった場合には,ログインノード上で自分でシンクする必要があります.

Usage: ime-sync [-b] [-V] <LARGE0のファイルパス>
-b: シンクが完了するまでコマンドが終了しないオプションです.
    指定しない場合,シンクを依頼だけしてコマンドは終了します.
-V: シンクの経過を表示するコマンドです.
注意点: /LARGE0で始まるLARGE領域の絶対PATHを指定してください.
       /IMEで始まるIMEのPATHを指定してもエラーになります.

シンクすることで /IMEから/LARGE0にファイルの書き出し処理が行われますが,/IME上にはファイルが残ったままの状態です. /IME上のファイルを解放し,容量を空けるためにはリリースコマンドを使用する必要があります.

Usage: ime-release [-k] <LARGE0のファイルパス>
-k: シンクが完了していないファイルはリリースしないオプションです.
    指定しない場合,シンクされていないものもリリースし,消失するのでご注意ください.
注意点: /LARGE0で始まるLARGE領域の絶対PATHを指定してください.
        /IMEで始まるIMEのPATHを指定してもエラーになります.

今のところ,利用を想定していないので省略します. 良いユースケースがあるのでぜひ試したいという場合はご連絡ください.

IME使用中も,/LARGE0 に既に存在するファイルを/LARGE0のPATHで読み込みは可能です. しかし,IMEで書込みを行うファイルに対して,/LARGE0側でも書き込みを行うとファイルが壊れるため,避けてください.

IMEはLARGEに比べて小さい容量しか持っていないため,-bb で宣言して頂いた容量以内に収まっているか監視しています. 容量を超過しているジョブは自動的にkillされますのでご注意ください. なお,IMEを利用するディレクトリ配下の容量を合計した監視を行うため,複数のジョブで同じディレクトリを使う場合, ジョブ単独では,宣言した容量以下だとしても全体として超過している場合はkillされますのでご注意ください.

前述のメタデータ性能が高くない点も踏まえて,ジョブごとにディレクトリを分けることをお勧めします.

/IME で始まる領域は,普通にユーザおよびグループのパーミッションでアクセスできるため,-bbで指定していない領域もファイルの読み書きが可能です. しかし,ジョブ実行の最後に自動でシンクを行う対象は -bb の pfs で指定した領域,あるいは省略したジョブ投入時のディレクトリのみが対象になるため, 指定した領域外への書込みは避けてください.読み込みは特に問題ありません.

IME領域に残っているファイルは全て削除します. 保守に入る前に実行中のジョブは,一旦Hold状態にするため,自動的に書き出しが行われますが,それ以外で残存しているファイルは削除するので 保守前にご自身でシンクを行ってください.

IMEを制御するためのコマンドを紹介します.

IMEにキャッシュされたファイルの情報を出力します.

Usage: ime-stat [OPTION] ABSOLUTE_FILE_PATH
  -r, --enable-recursive     Enable Recursive

IMEにキャッシュされたデータをLustreにシンクします.

Usage: ime-sync [OPTION] ABSOLUTE_FILE_PATH
  -b, --block                Wait for command completion
  -r, --enable-recursive     Enable Recursive
  -V, --verbose              Verbose output

IMEにキャッシュされているデータを削除します.

Usage: ime-release [OPTION] ABSOLUTE_FILE_PATH
  -k, --keep-unsync          Remove only synchronized data
  -r, --enable-recursive     Enable Recursive
  -V, --verbose              Verbose output

IMEにキャッシュされているすべてのファイルをリストします.

Usage: ime-lsfile ABSOLUTE_DIRECTORY_PATH

IMEにキャッシュされたファイルを連結し、標準出力に出力します.

Usage: ime-cat ABSOLUTE_FILE_PATH

未提供

ベンダー提供の ime-* コマンドは,絶対PATH の指定が必要であるなど不便なため,ラッパーコマンドを用意しています.

コマンド共通の動作:
・相対PATHを絶対PATHに変換したうえでオリジナルのコマンドを実行します.
・/IMEを含むIME 上のPATHを/LARGE0のPATHに変換してオリジナルのコマンドを実行します.
・-c -l -L オプションは無視します.
コマンド名 動作
imeutil-stat ime-statを実行します.
imeutil-sync ime-syncを実行します.
imeutil-release, imeutil-force-release imeutil-releaseはime-release -k を実行します.imeutil-force-releaseは ime-release を実行します.
imeutil-cat ime-cat を実行します.
imeutil-lsfiles ime-lsfiles を実行します.
imeutil-sync-and-release ime-sync -V -b を実行したあとに,ime-release -V -k を実行します.

チュートリアル資料を公開しています.

IME Tutorial


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