ストレージ
システムHで利用可能なストレージは、下記の3種類です。
Tips
ホーム領域やグループ領域等、ローカルストレージ以外の領域は利用者全員で共有している資源です。過度のI/O負荷や不必要なアクセスは他の利用者への迷惑になるだけでなく、ご自身のジョブの実行速度の低下を招くことになります。各ストレージは次の点に留意してご利用ください。
- 中間データなど、永続性を必要としないデータはファイル作成を控え、メモリ利用を推奨します。
- 高速にアクセスできるスクラッチ領域を積極的に活用してください。ジョブ実行中に何度もアクセスするファイルはローカルスクラッチにステージング(一時的にコピー)することを推奨します。
- 共有ファイルシステム上に小さなサイズのファイルを大量に作成し、アクセスすることは推奨しません。スクラッチ領域の利用、または複数のファイルをより大きなサイズのファイルにまとめた上で、アクセスすることを推奨します。例えば、HDF5、WebDataset などの利用を検討してみてください。
- 1つのジョブの中で同じファイルを不必要に繰り返し open/close することは控えてください。
- 短期間に億を超えるファイルを作成する場合は事前にご相談ください。
ホーム領域
ホーム領域は、インタラクティブノードおよび各計算ノードで共有されたLustreファイルシステムのディスク領域です。すべての利用者がデフォルトで利用可能です。ディスククォータは500GiBに設定されています。
Warning
ホーム領域では、1ディレクトリ配下に作成できるファイル数に上限があります。上限値はディレクトリ配下のファイル名の長さに依存し、約4百万〜12百万個です。 上限値を超えてファイルを作成しようとした場合、"No space left on device" のエラーメッセージが出力されファイル作成に失敗します。
[高度な設定] ストライプ機能
ホーム領域は並列ファイルシステムで構成されています。並列ファイルシステムでは、ファイルのデータはストレージを構成する複数のディスクに分散して格納されます。ホーム領域では、この分散方式として、ラウンドロビン分散(デフォルト)とストライプ分散が使用可能です。以下では、ストライプ機能の設定方法を説明します。
Tips
ストライプ機能の概要についてはConfiguring Lustre File Stripingを参照願います。
ストライプ機能の設定方法
ストライプ機能の設定は、lfs setstripe
コマンドで行います。 lfs setstripe
コマンドでは、データを分散させるストライプパターン(ストライプサイズや範囲)を指定することができます。
$ lfs setstripe [options] <dirname | filename>
オプション | 説明 |
---|---|
-S | ストライプサイズを設定。-S #k, -S #m, -S #gとすることで、サイズをKiB,MiB,GiBで設定可能。 |
-i | ファイル書き込みを開始するOSTインデックスを指定。 -1とした場合、ファイル書き込みを開始するOSTはランダム。本システムでは、OSTインデックスは 0 から 7 を指定可能です。 |
-c | ストライプカウントを設定。 -1とした場合、すべてのOSTに書き込みを実行。 |
Tips
OSTインデックスは、lfs df
コマンドの OST:#の値 やlfs osts
コマンドの左端の値で確認可能です。
例)ストライプパターンを持った新規ファイルの作成
[username@qes01 work]$ lfs setstripe -S 1m -i 4 -c 4 stripe-file
[username@qes01 work]$ ls
stripe-file
例) ディレクトリに対して、ストライプパターンを設定
[username@qes01 work]$ mkdir stripe-dir
[username@qes01 work]$ lfs setstripe -S 1m -i 4 -c 4 stripe-dir
ストライプ機能の表示方法
ファイルやディレクトリのストライプパターンの情報を表示する場合は、lfs getstripe
コマンドで行います。
$ lfs getstripe <dirname | filename>
例) ファイルの設定表示例
[username@qes01 work]$ lfs getstripe stripe-file
stripe-file
lmm_stripe_count: 4
lmm_stripe_size: 1048576
lmm_pattern: 1
lmm_layout_gen: 0
lmm_stripe_offset: 4
obdidx objid objid group
4 3024641 0x2e2701 0
5 3026034 0x2e2c72 0
6 3021952 0x2e1c80 0
7 3019616 0x2e1360 0
例) ディレクトリの設定表示例
[username@qes01 work]$ lfs getstripe stripe-dir
stripe-dir
stripe_count: 4 stripe_size: 1048576 stripe_offset: 4
グループ領域
グループ領域は、インタラクティブノードおよび各計算ノードで共有されたLustreファイルシステムのディスク領域です。ABCI-Q利用者ポータルから利用管理者権限でグループディスク追加申請を行うことで利用可能になります。追加申請方法については、ABCI-Q利用者ポータルガイドのディスク追加申請をご参照ください。
グループ領域のパスを確認するには、show_quota
コマンドを実行してください。コマンドの説明については ディスククォータの確認 を参照してください。
inode使用率の確認方法
MDTではファイルのinode情報を格納していますが、MDT毎に格納できるinode数の上限があり、各MDTで現在どの程度inodeが使用されているかはlfs df -i
コマンドで確認
することが可能です。
コマンドの出力結果のうち、/groups[MDT:?]
の行に記載されているIUse%
の項目が各MDTにおけるinodeの使用率となります。
以下の例の場合、MDT:0 の inode使用率は 30% となります。
[username@qes01 ~]$ lfs df -i /groups
UUID Inodes IUsed IFree IUse% Mounted on
groups-MDT0000_UUID 3110850464 904313344 2206537120 30% /groups[MDT:0]
groups-MDT0001_UUID 3110850464 2778144306 332706158 90% /groups[MDT:1]
groups-MDT0002_UUID 3110850464 935143862 2175706602 31% /groups[MDT:2]
groups-MDT0003_UUID 3110850464 1356224703 1754625761 44% /groups[MDT:3]
groups-MDT0004_UUID 3110850464 402932004 2707918460 13% /groups[MDT:4]
groups-MDT0005_UUID 3110850464 433 3110850031 1% /groups[MDT:5]
(snip)
なお、システムHグループが使用しているMDTは以下のコマンドで確認することができます。
[username@qes01 ~]$ ls -d /groups/?/(システムHグループ名)
/groups/(MDT番号)/(システムHグループ名)
以下の例の場合、MDT:0を使用しています。
[username@qes01 ~]$ ls -d /groups/?/gaa00000
/groups/0/gaa00000
ローカルストレージ
システムHでは、計算ノードに3.8 TBのNVMe SSD x 2が搭載されています。これらローカルストレージは次のように利用できます。
- ノードに閉じたスクラッチ領域として利用する(ローカルスクラッチ、永続ローカルスクラッチ (Reserved専用))。
- 複数の計算ノードのローカルストレージにまたがる分散共有ファイルシステムを構成して利用する(BeeONDストレージ)。
ローカルスクラッチ
計算ノードのローカルストレージは、ジョブ投入時に特別なオプションを指定することなくローカルスクラッチとして利用できます。
なお、ローカルストレージとして利用できる容量は、指定したジョブ実行リソースによって異なります。
ローカルストレージへのパスはジョブ毎に異なり、環境変数PBS_LOCALDIR
を利用してアクセスすることができます。
例)ジョブスクリプトの例(use_local_storage.sh)
#!/bin/bash
#PBS -l rt_QF=1
#PBS -W group_list=grpname
cd ${PBS_O_WORKDIR}
echo test1 > $PBS_LOCALDIR/foo.txt
echo test2 > $PBS_LOCALDIR/bar.txt
cp -rp $PBS_LOCALDIR/foo.txt $HOME/test/foo.txt
例)ジョブの投入
[username@qes01 ~]$ qsub use_local_storage.sh
例)use_local_storage.sh 実行後の状態
[username@qes01 ~]$ ls $HOME/test/
foo.txt <- スクリプト内で明示的にコピーしたファイルのみが残る。
Warning
$PBS_LOCALDIR
以下に作成したファイルはジョブ実行終了時に削除されるため、必要なファイルはcp
コマンドなどを用いてジョブスクリプト内でホーム領域またはグループ領域にコピーをしてください。
Note
rt_QF では$PBS_LOCALDIR
だけではなく、/local2
以下も利用できます。ジョブ実行終了時に削除されるのは同様です。
永続ローカルスクラッチ (Reserved専用)
本機能は、Reservedサービス専用です。Reservedサービスでは、計算ノードのローカルストレージに、ジョブ毎に削除されない永続領域を使用可能です。この領域はReservedサービス開始時に作成され、Reservedサービス終了時に削除されます。
永続ローカルスクラッチは、環境変数PBS_RESVDIR
を利用してアクセスすることができます。
例)ジョブスクリプトの例 (use_reserved_storage_write.sh)
#!/bin/bash
#PBS -l rt_QF=1
#PBS -W group_list=grpname
cd ${PBS_O_WORKDIR}
echo test1 > $PBS_RESVDIR/foo.txt
echo test2 > $PBS_RESVDIR/bar.txt
例)ジョブの投入
[username@qes01 ~]$ qsub -q R12345 use_reserved_storage_write.sh
例)ジョブスクリプトの例 (use_reserved_storage_read.sh)
#!/bin/bash
#PBS -l rt_QF=1
#PBS -W group_list=grpname
cd ${PBS_O_WORKDIR}
cat $PBS_RESVDIR/foo.txt
cat $PBS_RESVDIR/bar.txt
例)ジョブの投入
[username@qes01 ~]$ qsub -q R12345 use_reserved_storage_read.sh
Warning
$PBS_RESVDIR
以下に作成したファイルはReservedサービス終了時に削除されるため、必要なファイルはcp
コマンドなどを用いてジョブにてホーム領域またはグループ領域にコピーをしてください。
Warning
計算ノードには、NVMe SSD が2つ搭載されており、永続ローカルスクラッチは/local2
を使用します。ローカルスクラッチと永続ローカルスクラッチが同一のストレージに割り当てられる場合があり、その場合は容量を共有します。
BeeGFS領域
BeeGFS On Demand (BeeOND) を使用することで、ジョブに割り当てられた計算ノードのローカルストレージを集約し、一時的な分散共有ファイルシステムとして使用可能です。
BeeOND を利用するジョブを投入するときは、-l USE_BEEOND=1
オプションを指定してジョブを実行してください。
また、BeeONDを利用する場合はノードを占有する必要があるため、-l rt_QF
オプションを指定する必要もあります。
作成された分散共有ファイルシステム領域には、環境変数 PBS_BEEONDDIR
を利用してアクセスすることができます。
例)ジョブスクリプトの例 (use_beeond.sh)
#!/bin/bash
#PBS -l rt_QF=2
#PBS -W group_list=grpname
#PBS -l USE_BEEOND=1
cd ${PBS_O_WORKDIR}
echo test1 > $PBS_BEEONDDIR/foo.txt
echo test2 > $PBS_BEEONDDIR/bar.txt
cp -rp $PBS_BEEONDDIR/foo.txt $HOME/test/foo.txt
例)ジョブの投入
[username@qes01 ~]$ qsub use_beeond.sh
例)use_beeond.sh 実行後の状態
[username@qes01 ~]$ ls $HOME/test/
foo.txt <- スクリプト内で明示的にコピーしたファイルのみが残る。
Warning
$PBS_BEEONDDIR
以下に作成したファイルはジョブ実行終了時に削除されるため、必要なファイルはcp
コマンドなどを用いてジョブスクリプト内でホーム領域またはグループ領域にコピーをしてください。
Warning
計算ノードには、NVMe SSD が2つ搭載されており、BeeGFS領域は/local2
を使用します。
BeeONDではbeeond-cpコマンドを利用して、BeeONDファイルシステム領域に並列にデータをステージイン、ステージアウトする事が可能です。
beeond-cpを利用する場合、USE_SSH=1
オプションを指定し計算ノードへのSSHログインを有効にしたあと、PARALLEL_SSH
環境変数にsshコマンドとポート番号を指定してください。
以下はbeeond-cpを使用する例です。
#!/bin/bash
#PBS -l rt_QF=4
#PBS -W group_list=grpname
#PBS -l USE_BEEOND=1
#PBS -l USE_SSH=1
#PBS -v SSH_PORT=2222
#PBS -j oe
cd ${PBS_O_WORKDIR}
export PARALLEL_SSH="ssh -p 2222"
export src_dir=/path/to/data
beeond-cp stagein -n ${PBS_NODEFILE} -g ${src_dir} -l ${PBS_BEEONDDIR}
(計算処理)
beeond-cp stageout -n ${PBS_NODEFILE} -g ${src_dir} -l ${PBS_BEEONDDIR}
[高度な設定] BeeONDサーバ数変更
BeeGFS領域は、ファイルの実体を格納するストレージサービスを提供する計算ノード(ストレージサーバ)、ファイルのメタデータを格納するメタデータサービスを提供する計算ノード(メタデータサーバ)により構成されます。 システムHのBeeONDではストレージサーバ数、メタデータサーバ数を変更することができます。
メタデータサーバ数・ストレージサーバ数のデフォルトの設定は以下の通りです。
設定項目 | デフォルト値 |
---|---|
メタデータサーバ数 | 1 |
ストレージサーバ数 | ジョブの要求ノード数 |
それぞれの数を変更するときには、ジョブスクリプトで次の環境変数を設定します。この環境変数はジョブ投入時に定義されている必要があり、ジョブスクリプト中で変更しても反映されません。サーバ数がジョブの要求ノード数よりも小さい場合、割り当てられた計算ノードから名前順に選択されます。
環境変数 | 説明 |
---|---|
BEEOND_METADATA_SERVER | メタデータサーバ数を整数で指定 |
BEEOND_STORAGE_SERVER | ストレージサーバ数を整数で指定 |
以下の例では、メタデータサーバ数2、ストレージサーバ数4でBeeGFS領域を構成する例です。beegfs-df
で構成を確認しています。
例)ジョブスクリプトの例(use_beeond.sh)
#!/bin/bash
#PBS -l rt_QF=8
#PBS -W group_list=grpname
#PBS -l USE_BEEOND=1
#PBS -v BEEOND_METADATA_SERVER=2
#PBS -v BEEOND_STORAGE_SERVER=4
cd ${PBS_O_WORKDIR}
beegfs-df -p /beeond
出力例
METADATA SERVERS:
TargetID Cap. Pool Total Free % ITotal IFree %
======== ========= ===== ==== = ====== ===== =
1 normal 1489.7GiB 1322.7GiB 89% 149.0M 149.0M 100%
2 normal 1489.7GiB 1322.7GiB 89% 149.0M 149.0M 100%
STORAGE TARGETS:
TargetID Cap. Pool Total Free % ITotal IFree %
======== ========= ===== ==== = ====== ===== =
1 normal 1489.7GiB 1322.7GiB 89% 149.0M 149.0M 100%
2 normal 1489.7GiB 1322.7GiB 89% 149.0M 149.0M 100%
3 normal 1489.7GiB 1322.7GiB 89% 149.0M 149.0M 100%
4 normal 1489.7GiB 1322.7GiB 89% 149.0M 149.0M 100%
[高度な設定] ストライプ機能
BeeGFS領域では、ファイルのデータはファイルシステムを構成する複数のストレージサーバに分散して格納されます。システムHのBeeONDではストライプ分散の設定を変更することができます。
ストライプ分散のデフォルトの設定は次の通りです。
設定項目 | デフォルト値 | 説明 |
---|---|---|
ストライプサイズ | 512 KB | ファイルの分割サイズ |
ストライプカウント | 4 | 分割したファイル断片を格納するストレージサーバの数 |
ファイル単位、またはディレクトリ単位でストライプ分散の設定を行えます。ストライプ分散の設定はbeegfs-ctl
で行えます。
以下の例では/beeond/data
ディレクトリ以下のストライプ設定を、ストライプカウント8、ストライプサイズ4MBに設定しています。
例)ジョブスクリプトの例(use_beeond.sh)
#!/bin/bash
#PBS -l rt_QF=8
#PBS -W group_list=grpname
#PBS -l USE_BEEOND=1
cd ${PBS_O_WORKDIR}
BEEOND_DIR=/beeond/data
mkdir ${BEEOND_DIR}
beegfs-ctl --setpattern --numtargets=8 --chunksize=4M --mount=/beeond ${BEEOND_DIR}
beegfs-ctl --mount=/beeond --getentryinfo ${BEEOND_DIR}
出力例
New chunksize: 4194304
New number of storage targets: 8
EntryID: 0-5D36F5EC-1
Metadata node: qhXXX.q.abci.local [ID: 1]
Stripe pattern details:
+ Type: RAID0
+ Chunksize: 4M
+ Number of storage targets: desired: 8
+ Storage Pool: 1 (Default)