13

NUMA マシン (SGI UV 1000) を使用して、多数の数値シミュレーションを同時に実行しています。それぞれのシミュレーションは、4 つのコアを使用する OpenMP ジョブです。ただし、これらのジョブを約 100 以上実行すると、パフォーマンスが大幅に低下します。これが発生する理由に関する私たちの理論は、ソフトウェアに必要な共有ライブラリがマシンのグローバル メモリに 1 回だけ読み込まれ、その後、すべてのプロセスが単一ノードのメモリにアクセスするため、システムで通信のボトルネックが発生するというものです。

これは古いソフトウェアであり、変更の範囲が制限されており、静的 make オプションは必要なすべてのライブラリを静的にリンクしていません。私が見ることができる最も便利な解決策は、システムに必要な共有ライブラリの新しいコピーを各プロセスまたはノード (それぞれで 3 つのプロセスを実行している) にロードさせることですが、まだ実行していませんこれを行う方法を見つけることができました。誰かがこれを行う方法を教えてもらえますか、またはこの問題を解決する方法について他の提案がありますか?

4

1 に答える 1

11

ソフトウェアが必要とする共有ライブラリは、マシンのグローバル メモリに 1 回だけロードされます。

私が知っているように、これは Linux の現在の動作です。共有ライブラリは、1 セットの物理メモリにのみロードされ、単一のノードにのみロードされます。

そして、すべてのプロセスが単一ノードのメモリにアクセスするため、システムは通信のボトルネックに直面しています。

コメントで述べたように、ライブラリからの命令はすべてのプロセッサにキャッシュする必要があるため、ライブラリからのアクティブなコードがキャッシュから消去された場合にのみボトルネックが発生する可能性があります (たとえば、さまざまなコードが多数動作している場合)。

ハードウェア パフォーマンス カウンター (キャッシュからのミス、ノード間の NUMA メモリ アクセス カウント) を使用して、理論を検証する必要があります。

Linux では「レプリケーション」と呼ばれる NUMA 上の複数のコピーを使用してデータを保存するメカニズム。また、カーネル、実行可能ファイル、またはその共有ライブラリのコードはテキストと呼ばれます。だから、あなたが望むのは「共有ライブラリのテキスト複製」です。カーネル コードの場合は、テキストの複製の方が簡単だと思います。

このようなテキストの複製を行うための 2003 年からの実験的なパッチをいくつか見つけることが できまし。このパッチは拒否されたようです。

この手法の最新 (2007 年) の変種は、ページキャッシュの複製です: http://lwn.net/Articles/223056/ ( mm: 複製されたページキャッシュ) by Nick Piggin, SUSE. 彼の方法に関するプレゼンテーションもあります: http://ondioline.org/~paul/pagecachereplication.pdf。実行可能ファイルと共有ライブラリの両方のすべてのファイルがページキャッシュに保存されるため、これは機能します。しかし、このパッチでも、現在のカーネルでは見つかりません。

SGI では、レプリケーションの必要性がより多くあります (通常のカーネル開発者よりも多くの NUMA マシンを持っています)。そのため、いくつかの追加パッチが存在する可能性があります。NUMA 用の SGI のアプリケーション チューニング マニュアルがありますdplace。セクション「dplace コマンドの使用」。テキスト複製のオプションがあります。

-r : アプリケーションが実行されているノードでテキストを複製する必要があることを指定します。場合によっては、コードのオフノード メモリ参照を作成する必要性を減らすことで、レプリケーションによってパフォーマンスが向上します。複製オプションは、dplace コマンドによって配置されたすべてのプログラムに適用されます。テキスト複製の詳細については、dplace(5) のマニュアル ページを参照してください。レプリケーション オプションは、次の文字の 1 つ以上の文字列です。

lライブラリ テキストの複製

b バイナリ (a.out) テキストを複製する

スレッド ラウンドロビンオプション

Man dplace(1): http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi?coll=linux&db=man&fname=/usr/share/catman/man1/dplace.1.html

Man dplace(5): http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi?coll=linux&db=man&fname=/usr/share/catman/man5/dplace.5.html

于 2012-10-11T12:50:17.097 に答える