5.10. ラージページ領域割当て¶
スーパーコンピュータ「富岳」のHPC拡張機能が提供するラージページライブラリについて説明します。
5.10.1. 概要¶
ラージページ機能は、Linuxの標準機能である HugeTLBfs を拡張し、大規模なデータを扱うアプリケーションプログラムに対して、通常のページ(ノーマルページ)より大きなページサイズのメモリ(ラージページ)を割り当てることで、OSのアドレス変換処理によるコストを低減し、メモリアクセス性能を向上させる機能です。
富岳の計算ノードでは、ページサイズとしてノーマルページで64KiB、ラージページで2MiBを利用可能です。デフォルトでラージページ化が有効となっており、環境変数「XOS_MMM_L_HPAGE_TYPE」によってラージページの有効化/無効化を選択できます。
ページサイズの違いによるメリット/デメリットを以下に示します。
評価項目 |
64KiB |
2MiB |
---|---|---|
TLBミス率 |
高い |
低い |
メモリ初期化コスト |
小さい |
大きい |
メモリ使用効率 |
高い |
低い |
ページング方式には、デマンドページング方式とプリページング方式の2種類があります。
デマンドページング方式とは、アプリケーションプログラム実行中に必要なページが主記憶に存在しない場合に、必要に応じてページを主記憶に割り当てる方式のことです。 最初にメモリ領域にアクセスしたタイミングで物理ページを割り当てます。
プリページング方式とは、あらかじめ主記憶にページを割り当てておく方式のことです。 メモリ領域を割り当てたタイミングで物理ページを割り当てます。
ページング方式 |
NUMA内/外のメモリアクセス |
初回メモリアクセス |
---|---|---|
デマンドページング方式 |
できる限りNUMA内のメモリを使用
(コスト:低い)
|
メモリアクセス時にページを物理メモリにロード
(コスト:高い)
|
プリページング方式 |
NUMA内外のメモリに関係なく使用
(コスト:高い)
|
ページをあらかじめ物理メモリにロード
(コスト:低い)
|
注釈
スレッド並列で複数CMGをまたぐときはデマンドページング方式を推奨します。 「プログラミングガイド(プログラミング共通編) 」の「ラージページのページングポリシー」を参照ください。
メモリ領域とラージページ化対象を以下に示します。
領域 |
ラージページ化対象 |
---|---|
テキスト(.text)領域 |
×(64KiBページ) |
静的データ(.data)領域 |
○(2MiBページ) |
静的データ(.bss)領域 |
○(2MiBページ) |
動的メモリ確保領域(ヒープ領域) |
×(64KiBページ) |
スレッドヒープ領域 |
○(2MiBページ) |
スタック領域 |
○(2MiBページ) |
スレッドスタック領域 |
○(2MiBページ) |
動的メモリ確保領域(mmap領域) |
○(2MiBページ) |
共有メモリ |
×(64KiBページ) |
5.10.2. ラージページライブラリ設定用環境変数¶
ラージページライブラリの動作を調整するために、環境変数を利用できます。
ラージページの基本的な設定をするための環境変数を以下に示します。
変数名 |
指定値 |
デフォルト値 |
---|---|---|
XOS_MMM_L_HPAGE_TYPE |
hugetlbfs|none |
hugetlbfs |
XOS_MMM_L_LPG_MODE |
base+stack|base |
base+stack |
XOS_MMM_L_PRINT_ENV |
on|off|1|0 |
0 |
環境変数「XOS_MMM_L_PAGING_POLICY」によって、静的データ(.bss領域)、スタック/スレッドスタック領域、および、動的メモリ確保領域にページング方式を設定できます。
ページング方式を設定するための環境変数を以下に示します。
変数名 |
指定値 |
デフォルト値 |
---|---|---|
XOS_MMM_L_PAGING_POLICY |
[demand|prepage]:[demand|prepage]:[demand|prepage] |
demand:demand:prepage |
注釈
XOS_MMM_L_PAGING_POLICYのデフォルト値をカスタマイズしています。 マニュアル「ジョブ運用ソフトウェア エンドユーザ向けガイド HPC拡張機能編」に表記されているデフォルト値 "prepage:demand:prepage" と異なります。
ラージページ割り当てに関するチューニングするための環境変数を以下に示します。
変数名 |
指定値 |
デフォルト値 |
---|---|---|
XOS_MMM_L_ARENA_FREE |
1|2 |
1 |
XOS_MMM_L_ARENA_LOCK_TYPE |
0|1 |
1 |
XOS_MMM_L_MAX_ARENA_NUM |
1 以上 INT_MAX以下の整数値[10進数] |
1 |
XOS_MMM_L_HEAP_SIZE_MB |
MALLOC_MMAP_THRESHOLD_の2倍以上 ULONG_MAX以下の整数値<MiB単位>[10進数] |
MALLOC_MMAP_THRESHOLD_の2倍 |
XOS_MMM_L_COLORING |
0|1 |
1 |
XOS_MMM_L_FORCE_MMAP_THRESHOLD |
0|1 |
0 |
MALLOC_CHECK_ |
0|1|2|3|5|7 [10進数] |
3 |
MALLOC_TOP_PAD_ |
0 以上 ULONG_MAX以下の整数値<byte単位> [10進数] |
131072(=128KiB) |
MALLOC_PERTURB_ |
INT_MIN 以上 INT_MAX以下の整数値 [10進数] |
0 |
MALLOC_MMAP_MAX_ |
INT_MIN 以上 INT_MAX以下の整数値 [10進数] |
2097152(=2*1024*1024) |
MALLOC_MMAP_THRESHOLD_ |
0 以上 ULONG_MAX以下の整数値<byte単位> [10進数または16進数] |
134217728(=128MiB) |
MALLOC_TRIM_THRESHOLD_ |
0 以上 ULONG_MAX以下の整数値<byte単位> [10進数または16進数] |
134217728(=128MiB) |
5.10.3. ラージページライブラリのリンク¶
利用者プログラムからラージページを利用するには、実行可能ファイルにラージページライブラリをリンクする必要があります。
富士通コンパイラを利用する場合は、デフォルトでラージページライブラリをリンクします(-Klargepage
オプションがデフォルト時有効)。
富士通コンパイラ以外を利用する場合は、ラージページライブラリ「libmpg.so」をリンクすることでラージページ化した実行可能ファイルを作成できます。
ラージページライブラリのパスは次の通りです。
ノード種別 |
パス名 |
---|---|
ログインノード |
/opt/FJSVxos/devkit/aarch64/rfs/opt/FJSVxos/mmm/lib64 |
計算ノード |
/opt/FJSVxos/mmm/lib64 |
ラージページ化するにあたり、本ラージページライブラリは、以下のパスでラージページ用のリンカスクリプトも提供しています。これは、静的データ(.data)、および、静的データ(.bss)をラージページ化するためのものです。このリンカスクリプトもコンパイラに適切に指定してください。
ノード種別 |
パス名 |
---|---|
ログインノード |
/opt/FJSVxos/devkit/aarch64/rfs/opt/FJSVxos/mmm/util/bss-2mb.lds |
計算ノード |
/opt/FJSVxos/mmm/util/bss-2mb.lds |
計算ノードの gcc でコンパイルする場合の例を示します。
gcc -Wl,-T/opt/FJSVxos/mmm/util/bss-2mb.lds -L/opt/FJSVxos/mmm/lib64 -lmpg sample.c
参考
アプリケーションプログラムが、PIE(Position Independent Executable、位置独立実行形式)でコンパイルされている場合、.data/.bss 領域はラージページ化されません。この場合、ラージページライブラリは警告ログを出力するだけで、.data/.bss 領域にはノーマルページが使用され、アプリケーションプログラムは実行を継続します。
例えば、gcc で明示的にPIE形式とならないようにコンパイルするには、-no-pie
オプションを使用してください。
5.10.4. メモリ断片化の影響緩和¶
- XOS_MMM_L_HPAGE_TYPE=noneラージページを使用せず、ノーマルページを使用します。メモリ断片化は「連続した空きメモリ領域」が分断され小さな空き領域が飛び飛びに発生します。このため、大きな連続領域(2MiB以上のページサイズ)を必要とするラージページは影響を受けやすくなります。ノーマルページを使用することで、より小さな連続領域(64KiBのページサイズ)も使用可能になるため、メモリ断片化の影響を緩和できます。デメリットとしては、TLBミス率が高くなることで、メモリアクセス性能が低下する可能性があります。
- XOS_MMM_L_HUGETLB_FALLBACK=1ラージページが不足した場合に、不足分のメモリについてノーマルページによる割り当てを試みます。ノーマルページでも必要なメモリを確保できない場合は、メモリ枯渇によりプロセスが終了します。これは、ラージページ使用時のメモリ不足に対する救済措置となります。この環境変数は、以下の条件を全て満たす場合にのみ有効となり、条件を満たさない場合はデフォルト値の0(無効)が指定されたものとして動作します。
XOS_MMM_L_HPAGE_TYPE=hugetlbfs
XOS_MMM_L_PAGING_POLICY=*:*:prepage
XOS_MMM_L_ARENA_LOCK_TYPE=1
XOS_MMM_L_MAX_ARENA_NUM=1
デメリットとしては、ノーマルページ割り当ての要否を判断するオーバーヘッドが生じるため、メモリ獲得性能が低下します。