私のプログラムは共有メモリをデータストレージとして使用しています。このデータは、実行中のすべてのアプリケーションで利用できる必要があり、このデータのフェッチは高速である必要があります。ただし、一部のアプリケーションは異なる NUMA ノードで実行でき、それらのデータ アクセスには非常にコストがかかります。すべての NUMA ノードのデータ複製がこれを行う唯一の方法ですか?
1 に答える
5
NUMA が原因と考えられる速度低下の主な原因は 2 つあります。1 つ目は、プラットフォームによって異なるリモート アクセスの遅延の増加です。私が使用しているプラットフォームでは、レイテンシーに約 30% のヒットがあります。
パフォーマンス低下のもう 1 つの原因は、NUMA ノード間の通信リンクとコントローラーに関する競合です。
Linux のデフォルトの割り当て方式では、データが作成されたノードにデータが割り当てられます。アプリケーション内のデータの大部分が単一のスレッドによって初期化される場合、その 1 つのメモリ ノードに対して多数のクロス NUMA ドメイン トラフィックと競合が生成されます。
データが読み取り専用の場合、レプリケーションは適切なソリューションです。
それ以外の場合は、すべてのノードにデータ割り当てをインターリーブすると、すべてのノードにリクエストが分散され、輻輳が緩和されます。
データをインターリーブするには、Linux を使用している場合はset_mempolicy()
fromを使用できます。numaif.h
于 2012-02-21T03:55:15.007 に答える