このページでは、H4D コンピューティング インスタンスと Cloud RDMA で実行される MPI アプリケーションで使用することをおすすめする PSM3 構成パラメータについて説明します。
使用可能なすべての PSM3 構成パラメータについては、 Intel Ethernet Fabric Suite Host Software User Guide をご覧ください。
バースト性の高いデータフローまたは大量の UD トラフィックを使用するアプリケーションに関する推奨事項
トラフィックが急増するアプリケーションや、信頼性の低いデータグラム(UD)モードに大きく依存するアプリケーションでは、ネットワーク インターフェースに過負荷がかかり、ソースでパケットがドロップする可能性があります。
- 解決策: クレジットベースのバックプレッシャー システムを構成して、 送信バーストを調整し、トランスポート レイヤでのパケット損失を防ぎます。Compute Engine H4D インスタンスでは、合計 256 個のクレジットが提供されます。各 vCPU に少なくとも 1 つの固定クレジットを割り当て、残りの容量を共有プールに配置することをおすすめします。
推奨構成 (ノードあたり 192 ランクの例): ノードあたり 192 ランクのオペレーションの場合、各 vCPU に 1 つの固定クレジットが割り当てられると、共有プールは 256 - 192 = 64 になります。
IRDMA_SHARED_UD_CREDITS=64 IRDMA_TRANSPARENT_UD_QD_OVERRIDE=1
合計クレジット数を推奨上限を超えて増やすと、ソースで送信がドロップする可能性があります。オーバーサブスクライブ(合計クレジット数を利用可能な数よりも多く設定する)すると、安定した低密度のトラフィック パターンを持つワークロードのパフォーマンスは向上しますが、急激なバーストや大量の UD トラフィックを特徴とするワークロードのパフォーマンスは通常低下します。
Cloud RDMA のパフォーマンスのチューニングに使用できる環境変数は次のとおりです。
- IRDMA_SHARED_UD_CREDITS: 単一ノード上のすべてのプロセスで使用できる UD クレジットのグローバル プールのサイズを指定します。値が 64 の場合、任意のプロセスで使用できる共有予約が 64 クレジットあることを意味します。
- IRDMA_TRANSPARENT_UD_QD_OVERRIDE:
irdmaドライバで UD を使用するキューペア(QP)のキューの深さを制限します。1に設定すると、IRDMA_SHARED_UD_CREDITSと連携してトランスポート レイヤのバックプレッシャーを適用し、マルチプロセス負荷が高い場合の送信キューのオーバーランを防ぎます。
信頼性またはメモリ要件の高いアプリケーションに関する推奨事項
受信側で UD パケットの信頼性を確保するには、RDMA アプリケーションで十分な受信バッファを割り当て、完了キュー(CQ)でスロットを使用可能にする必要があります。
高信頼性の標準的な推奨事項: 次の 環境変数を使用して、受信キュー(RX)の UD パケットのドロップを回避するために、キューの深さをできるだけ大きく指定します。
PSM3_NUM_RECV_WQES=32767 PSM3_NUM_RECV_CQES=65536メモリ要件が高い場合の例外: アプリケーションでメモリ不足(OOM)の問題が発生した場合は、キューサイズを小さくしますが、2 つの値の比率は同じに保ちます。
High Performance Conjugate Gradients(HPCG)などのアプリケーションでは、大量のメモリが必要になります。高信頼性の標準的な推奨事項の設定を使用すると、OOM エラーが発生する可能性があります。
PSM3_NUM_RECV_WQESは、ローカル エンドポイントごとに割り当てられる RX ワークキュー エントリ(WQE)とイーガー バウンス バッファの数を決定します。値が大きいほど、メモリのオーバーヘッドが大きくなります。
信頼性またはメモリ使用率の向上に使用できる環境変数は次のとおりです。
PSM3_NUM_RECV_WQES: 割り当てる RX WQE の数を設定します。UD QP のサイズはPSM3_NUM_RECV_WQES + 1032 WQEsです。このパラメータは、各ローカル エンドポイントに割り当てられる UD 受信イーガー バウンス バッファの数(各サイズPSM3_MTU)も設定します。PSM3_NUM_RECV_CQES: 受信オペレーションの完了キュー エントリ(CQE)の数を制御します。このパラメータは、完了キューに常にスロットが使用可能であることを保証することで、受信側での UD パケットの信頼性を確保するのに役立ちます。キューの深さを大きくすると(65536 など)、RX UD パケットのドロップを回避できますが、メモリを使用するため、メモリ集約型アプリケーションで OOM エラーが発生する可能性があります。
バッファを再利用しないアプリケーションに関する推奨事項
High-performance LINPACK(HPL)などの一部のアプリケーションでは、一時的な通信バッファを保持して再利用するのではなく、頻繁に割り当てて解放します。メモリの要求と解放が継続的に繰り返されるため、システムはメモリページの登録と登録解除を常に強制的に実行し、パフォーマンスのボトルネックが大きくなります。
ソリューション: 回避策として、
jemallocなどのカスタム メモリ アロケータを使用します。jemallocは、並行処理のスケーリングを重視し、メモリの断片化を回避するように設計された、汎用の高性能メモリ アロケータ(malloc)です。このソリューションでは、大きな通信バッファ(128 KB より大きい)を効率的に再利用することで、コストのかかるカーネルの再割り当てサイクルを回避し、PSM3 のパフォーマンスを復元します。推奨構成:
jemallocをインストールします。たとえば、Rocky Linux では、Extra Packages for Enterprise Linux(EPEL)リポジトリを使用する次のコマンドを実行できます。sudo dnf install epel-release sudo dnf install jemalloc
アプリケーションを実行する前に
jemallocをプリロードし、最適化されたキャッシュ上限を適用します。LD_PRELOAD="/usr/lib64/libjemalloc.so.2" export MALLOC_CONF="dirty_decay_ms:-1,muzzy_decay_ms:-1,lg_tcache_max:26"
構成コマンドでは次の設定を使用します。
LD_PRELOAD: プロセスの開始前に読み込む共有ライブラリを指定します。MALLOC_CONF:jemallocのメモリ割り当て動作を構成します。dirty_decay_ms:-1とmuzzy_decay_ms:-1: 未使用のメモリを OS に返さないようにjemallocに指示します。これにより、ページはすぐに再利用できるように永続的に登録されます。lg_tcache_max:26: スレッドごとのメモリキャッシュの上限を 64 MB に増やし、大きな通信バッファが積極的にキャッシュされるようにします。
次のステップ
- Cloud RDMA を使用して MPI を最適化してスケーリングする で、他のパフォーマンス チューニングの推奨事項を確認します。