ストレージ
ABCIで利用可能なストレージは、下記の4種類です。
Tips
ホーム領域やグループ領域等、ローカルストレージ以外の領域は利用者全員で共有している資源です。過度のI/O負荷や不必要なアクセスは他の利用者への迷惑になるだけでなく、ご自身のジョブの実行速度の低下を招くことになります。各ストレージは次の点に留意してご利用ください。
- 中間データなど、永続性を必要としないデータはファイル作成を控え、メモリ利用を推奨します。
- 高速にアクセスできるスクラッチ領域を積極的に活用してください。ジョブ実行中に何度もアクセスするファイルはローカルスクラッチにステージング(一時的にコピー)することを推奨します。
- 共有ファイルシステム上に小さなサイズのファイルを大量に作成し、アクセスすることは推奨しません。スクラッチ領域の利用、または複数のファイルをより大きなサイズのファイルにまとめた上で、アクセスすることを推奨します。例えば、HDF5、WebDataset などの利用を検討してみてください。
- 1つのジョブの中で同じファイルを不必要に繰り返し open/close することは控えてください。
- 短期間に億を超えるファイルを作成する場合は事前にご相談ください。
ホーム領域
ホーム領域は、インタラクティブノードおよび各計算ノードで共有されたLustreファイルシステムのディスク領域です。すべての利用者がデフォルトで利用可能です。ディスククォータは2TiBに設定されています。
[高度な設定] ストライプ機能
ホーム領域は並列ファイルシステムで構成されています。並列ファイルシステムでは、ファイルのデータはストレージを構成する複数のディスクに分散して格納されます。ホーム領域では、この分散方式として、ラウンドロビン分散(デフォルト)とストライプ分散が使用可能です。以下では、ストライプ機能の設定方法を説明します。
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@login1 work]$ lfs setstripe -S 1m -i 4 -c 4 stripe-file
[username@login1 work]$ ls
stripe-file
例) ディレクトリに対して、ストライプパターンを設定
[username@login1 work]$ mkdir stripe-dir
[username@login1 work]$ lfs setstripe -S 1m -i 4 -c 4 stripe-dir
ストライプ機能の表示方法
ファイルやディレクトリのストライプパターンの情報を表示する場合は、lfs getstripeコマンドで行います。
$ lfs getstripe <dirname | filename>
例) ファイルの設定表示例
[username@login1 work]$ lfs getstripe stripe-file
stripe-file
lmm_stripe_count: 4
lmm_stripe_size: 1048576
lmm_pattern: raid0
lmm_layout_gen: 0
lmm_stripe_offset: 4
obdidx objid objid group
4 9161985 0x8bcd01 0x500000406
5 9162113 0x8bcd81 0x540000402
6 9161761 0x8bcc21 0x580000407
7 9162113 0x8bcd81 0x5c0000402
例) ディレクトリの設定表示例
[username@login1 work]$ lfs getstripe stripe-dir
stripe-dir
lmm_stripe_count: 4
lmm_stripe_size: 1048576
lmm_pattern: raid0
lmm_layout_gen: 0
lmm_stripe_offset: 4
obdidx objid objid group
4 9161986 0x8bcd02 0x500000406
5 9162114 0x8bcd82 0x540000402
6 9161762 0x8bcc22 0x580000407
7 9162114 0x8bcd82 0x5c0000402
グループ領域
グループ領域は、インタラクティブノードおよび各計算ノードで共有されたLustreファイルシステムのディスク領域です。ABCI利用者ポータルから利用管理者権限でグループディスク追加申請を行うことで利用可能になります。追加申請方法については、ABCI利用者ポータルガイドのグループディスク追加または削減申請をご参照ください。
グループ領域のパスを確認するには、show_quota コマンドを実行してください。コマンドの説明については ディスククォータの確認 を参照してください。
inode使用率の確認方法
MDTではファイルのinode情報を格納していますが、MDT毎に格納できるinode数の上限があり、各MDTで現在どの程度inodeが使用されているかはlfs df -i コマンドで確認することが可能です。
コマンドの出力結果のうち、/groups[MDT:?]の行に記載されているIUse%の項目が各MDTにおけるinodeの使用率となります。
以下の例の場合、MDT:0 の inode使用率は 12% となります。
[username@login1 ~]$ lfs df -i /groups
UUID Inodes IUsed IFree IUse% Mounted on
groups-MDT0000_UUID 3110850464 353856623 2756993841 12% /groups[MDT:0]
groups-MDT0001_UUID 3110850464 378826453 2732024011 13% /groups[MDT:1]
groups-MDT0002_UUID 3110850464 440177041 2670673423 15% /groups[MDT:2]
groups-MDT0003_UUID 3110850464 359182112 2751668352 12% /groups[MDT:3]
groups-MDT0004_UUID 3110850464 363397094 2747453370 12% /groups[MDT:4]
groups-MDT0005_UUID 3110850464 393711820 2717138644 13% /groups[MDT:5]
(snip)
ローカルストレージ
ABCIシステムでは、計算ノードに7TBのNVMe SSD x 2が搭載され、RAID0で1つの/localとしてマウントされております。これらローカルストレージは次のように利用できます。
- ノードに閉じたスクラッチ領域として利用する(ローカルスクラッチ)。
- 複数の計算ノードのローカルストレージにまたがる分散共有ファイルシステムを構成して利用する(BeeONDストレージ)。
- Lustreのクライアントキャッシュ領域として利用する(Hot Nodes)。
ローカルスクラッチ
計算ノードのローカルストレージは、ジョブ投入時に特別なオプションを指定することなくローカルスクラッチとして利用できます。
なお、ローカルストレージとして利用できる容量は、指定したジョブ実行リソースによって異なります。
ローカルストレージへのパスはジョブ毎に異なり、環境変数PBS_LOCALDIRを利用してアクセスすることができます。
例)ジョブスクリプトの例(use_local_storage.sh)
#!/bin/bash
#PBS -P grpname
#PBS -q rt_HF
#PBS -l select=1
echo test1 > $PBS_LOCALDIR/foo.txt
echo test2 > $PBS_LOCALDIR/bar.txt
cp -rp $PBS_LOCALDIR/foo.txt $HOME/test/foo.txt
例)ジョブの投入
[username@login1 ~]$ qsub use_local_storage.sh
例)use_local_storage.sh 実行後の状態
[username@login1 ~]$ ls $HOME/test/
foo.txt <- スクリプト内で明示的にコピーしたファイルのみが残る。
Warning
$PBS_LOCALDIR以下に作成したファイルはジョブ実行終了時に削除されるため、必要なファイルはcpコマンドなどを用いてジョブスクリプト内でホーム領域またはグループ領域にコピーをしてください。
BeeGFS領域
BeeGFS On Demand (BeeOND) を使用することで、ジョブに割り当てられた計算ノードのローカルストレージを集約し、一時的な分散共有ファイルシステムとして使用可能です。
BeeOND を利用するジョブを投入するときは、-v BEEOND_ON=1オプションを指定してジョブを実行してください。
また、BeeONDを利用する場合はノードを占有する必要があるため、-q rt_HFオプションを指定する必要もあります。
分散共有ファイルシステム領域は、/beeondに作られます。
例)ジョブスクリプトの例 (use_beeond.sh)
#!/bin/bash
#PBS -P grpname
#PBS -q rt_HF
#PBS -l select=2
#PBS -v BEEOND_ON=1
echo test1 > /beeond/foo.txt
echo test2 > /beeond/bar.txt
cp -rp /beeond/foo.txt $HOME/test/foo.txt
例)ジョブの投入
[username@login1 ~]$ qsub use_beeond.sh
例)use_beeond.sh 実行後の状態
[username@login1 ~]$ ls $HOME/test/
foo.txt <- スクリプト内で明示的にコピーしたファイルのみが残る。
Warning
/beeond以下に作成したファイルはジョブ実行終了時に削除されるため、必要なファイルはcpコマンドなどを用いてジョブスクリプト内でホーム領域またはグループ領域にコピーをしてください。
BeeONDではbeeond-cpコマンドを利用して、BeeONDファイルシステム領域に並列にデータをステージイン、ステージアウトする事が可能です。
beeond-cpを利用する場合、USE_SSH=1オプションを指定し計算ノードへのSSHログインを有効にしてください。
以下はbeeond-cpを使用する例です。
#!/bin/bash
#PBS -P grpname
#PBS -q rt_HF
#PBS -l select=2
#PBS -v BEEOND_ON=1,USE_SSH=1
export src_dir=$HOME/data
beeond-cp stagein -n ${PBS_NODEFILE} -g ${src_dir} -l /beeond
#(計算処理)
beeond-cp stageout -l /beeond
[高度な設定] BeeONDサーバ数変更
BeeGFS領域は、ファイルの実体を格納するストレージサービスを提供する計算ノード(ストレージサーバ)、ファイルのメタデータを格納するメタデータサービスを提供する計算ノード(メタデータサーバ)により構成されます。 ABCIのBeeONDではストレージサーバ数、メタデータサーバ数を変更することができます。
メタデータサーバ数・ストレージサーバ数のデフォルトの設定は以下の通りです。
| 設定項目 | デフォルト値 |
|---|---|
| メタデータサーバ数 | 1 |
| ストレージサーバ数 | ジョブの要求ノード数 |
それぞれの数を変更するときには、ジョブスクリプトで次の環境変数を設定します。この環境変数はジョブ投入時に定義されている必要があり、ジョブスクリプト中で変更しても反映されません。サーバ数がジョブの要求ノード数よりも小さい場合、割り当てられた計算ノードから名前順に選択されます。
| 環境変数 | 説明 |
|---|---|
| BEEOND_METADATA_SERVER | メタデータサーバ数を整数で指定 |
| BEEOND_STORAGE_SERVER | ストレージサーバ数を整数で指定 |
以下の例では、メタデータサーバ数2、ストレージサーバ数4でBeeGFS領域を構成する例です。beegfs node listで構成を確認しています。
例)ジョブスクリプトの例(use_beeond.sh)
#PBS -P grpname
#PBS -q rt_HF
#PBS -l select=4
#PBS -v BEEOND_ON=1,USE_SSH=1,BEEOND_METADATA_SERVER=2,BEEOND_STORAGE_SERVER=4
beegfs node list
出力例
ID TYPE ALIAS
c:1 client c1F4461-69E83A4A-hnode004
c:2 client c1E8E89-69E83A4A-hnode007
c:3 client c1ECE95-69E83A4A-hnode005
c:4 client c1EB2BE-69E83A4A-hnode006
m:1 meta node_meta_1
m:2 meta node_meta_2
s:1 storage node_storage_1
s:2 storage node_storage_2
s:3 storage node_storage_3
s:4 storage node_storage_4
mg:1 management management
[高度な設定] ストライプ機能
BeeGFS領域では、ファイルのデータはファイルシステムを構成する複数のストレージサーバに分散して格納されます。ABCIのBeeONDではストライプ分散の設定を変更することができます。
ストライプ分散のデフォルトの設定は次の通りです。
| 設定項目 | デフォルト値 | 説明 |
|---|---|---|
| ストライプサイズ | 512 KB | ファイルの分割サイズ |
| ストライプカウント | 4 | 分割したファイル断片を格納するストレージサーバの数 |
ファイル単位、またはディレクトリ単位でストライプ分散の設定を行えます。ストライプ分散の設定はbeegfs entry setで行えます。
以下の例では/beeond/dataディレクトリ以下のストライプ設定を、ストライプカウント6、ストライプサイズ4MBに設定しています。
例)ジョブスクリプトの例(use_beeond.sh)
#!/bin/bash
#PBS -P grpname
#PBS -q rt_HF
#PBS -l select=4
#PBS -v BEEOND_ON=1
BEEOND_DIR=/beeond/data
mkdir ${BEEOND_DIR}
beegfs entry set --num-targets=6 --chunk-size=4MiB ${BEEOND_DIR}
beegfs entry info --retro --verbose ${BEEOND_DIR}
出力例
Entry type: directory
EntryID: 1-69E83E72-1
ParentID: root
Stripe pattern details:
+ Type: RAID0
+ Chunksize: 4M
+ Number of storage targets: desired: 6
+ Storage Pool: 1 (storage_pool_default)
Inlined inode: no
Dentry info:
+ Path: 38/51/root
+ Metadata node: node_meta_1 [ID: 1]
Inode info:
+ Path: 74/55/1-69E83E72-1
+ Metadata node: node_meta_1 [ID: 1]
Hot Nodes
ABCIシステムではLustreファイルシステムのHot Nodes機能を提供しています。
Hot Nodesを有効にすると、計算ノードのローカルストレージ(/local)をグループ領域(/groups)への透過的なキャッシュとして使用します。
Note
キャッシュは現在、READキャッシュのみ提供しています。
Hot Nodesを有効にするには、ジョブ投入時に-v HOTNODES_ON=1オプションを指定してください。
また、Hot Nodesを利用する場合はノードを占有する必要があるため、-q rt_HFオプションも併せて指定してください。
なお、Hot NodesとBeeONDは併用できません。
ジョブ投入時に設定可能な環境変数は以下の通りです。
| 環境変数 | 説明 | デフォルト値 | 設定可能な値 |
|---|---|---|---|
| HOTNODES_ON | Hot Nodesを有効にする | 0 | 0(無効)、1(有効) |
| HOTNODES_HIGH | ローカルストレージのディスク使用率がこの値を超えた場合にキャッシュの削除を開始します。 | 90 | 2-100(%) |
| HOTNODES_LOW | ローカルストレージのディスク使用率がこの値を下回った場合にキャッシュの削除処理を停止します。 | 75 | 1-99(%) |
| HOTNODES_INTERVAL | ローカルストレージの使用状況をチェックする間隔です。 | 30 | 1-3600(秒) |
Info
HOTNODES_HIGHで設定した値の残りがユーザスクラッチ領域として使用されます。
以下の例ではHot Nodesを有効化して/groups/grpnameへIORでI/Oを行っています。
#!/bin/bash
#PBS -P grpname
#PBS -q rt_HF
#PBS -l select=1:mpiprocs=8
#PBS -v HOTNODES_ON=1
systemctl is-active lpcc
cd /groups/grpname/
module purge
module load hpcx
mpirun ./ior -a MPIIO -k