問題タブ [numa]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - Linux 用の NUMA 対応の名前付き共有メモリ
Windows API は、CreateFileMappingNuma 関数 ( http://msdn.microsoft.com/en-us/library/windows/desktop/aa366539(v=vs.85).aspx ) を提供して、特定の NUMA に名前付き共有メモリ スペースを作成します。ノード。
これまでのところ、Linux 用の同等の機能は見つかりませんでした。
私の現在のアプローチは次のようになります。
- 名前付き共有メモリを割り当てます (shm_open(...) を使用)
- 現在の NUMA ノードを特定する (numa_move_pages(...) を使用)
- ページをターゲット ノードに移動します (numa_move_pages(...) を再度使用)
誰もがより良いアプローチを知っていますか?
編集:記録のために:私の提案した実装は期待どおりに動作します!
c - numa: ネクストタッチ ポリシー
NUMA システムで「mprotect」を使用して「next-touch」ポリシーを実装する方法を説明できる人はいますか? 整数の配列 A があるとします。「mprotect」を使用して保護します。次に、スレッドがそれにアクセスしようとするたびに、アクセスしようとしている単一のアドレスに関する情報のみが得られます ( c-sigsegv-handler-mprotect )。次に何をすればいいですか?「ネクストタッチ」ポリシーに従って必要なすべての手順を(最初から)説明できる人がいれば、それは素晴らしいことです。
kernel - numactlは、2つであるはずのノードを1つだけ検出します
serverfaultでこの質問をしましたが、1週間応答がありませんでした。
デュアルXeonE55222.26Ghz CPU(1つのマザーボードに2つのクアッドコアCPU)があります。私が知っていることから、これはNUMAアーキテクチャです。マシンは3.2カーネルでubuntuサーバー12.04を実行しています。
カーネルはnuma対応であると想定されています
問題は、「numactl」が2つのノードを認識せず、1つの大きなSMPマシンと見なすことです。
環境全体がNUMAに対応している必要があるため、NUMAアプリケーションをプログラムできます。¿これを無視しても安全ですか?¿numactlが2つのノードを認識するために何ができるでしょうか?
memory - 最新の Linux に NUMA ネクストタッチ ポリシーはありますか
NUMA システムで作業する場合、メモリは現在の NUMA ノードに対してローカルまたはリモートにすることができます。メモリをよりローカルにするために、「ファーストタッチ」ポリシー (デフォルトのメモリからノードへのバインディング戦略) があります: http://lse.sourceforge.net/numa/status/description.html
デフォルトのメモリバインディング ユーザープログラムのメモリは、それらが実行されている CPU を含むノードに近いノードに割り当てられることが重要です。したがって、デフォルトでは、ページ フォールトは、ページ フォールト CPU を含むノードのメモリによって解決されます。ページに最初にタッチした CPU がページに障害を起こした CPU になるため、このデフォルト ポリシーは「ファースト タッチ」と呼ばれます。
デフォルトのポリシーはファーストタッチと呼ばれます。このポリシーでは、メモリのページに最初にアクセスする (つまり、書き込みまたは読み取りを行う) プロセスによって、プロセスが実行されているノードにそのページが割り当てられます。このポリシーは、順次プログラムだけでなく、多くの並列プログラムにも有効です。
他にもいくつかの非ローカル ポリシーがあります。また、一部の NUMA ノードへのメモリ セグメントの明示的な移動を要求する機能もあります。
ただし、(単一アプリケーションの多くのスレッドのコンテキストでは) 「次のタッチ」ポリシーを使用すると便利な場合があります。関数を呼び出して、メモリ領域 (最大 100 MB) をデータと「バインド解除」し、「最初のタッチ」を再適用します。次のタッチ (読み取りまたは書き込み) でページをスレッドにアクセスする numa ノードに移行する、この領域のようなハンドラー。
このポリシーは、多数のスレッドで処理する巨大なデータがあり、このデータへのアクセスのパターンが異なる場合に役立ちます (たとえば、最初のフェーズ - スレッドを介して列ごとに 2D 配列を分割し、2 番目のフェーズでは同じデータを行ごとに分割します)。
このようなポリシーは、Solaris 9 以降、MADV_ACCESS_LWP フラグを指定した maadvice を介してサポートされていました。
https://cims.nyu.edu/cgi-systems/man.cgi?section=3C&topic=madvise
MADV_ACCESS_LWP 指定されたアドレス範囲に触れる次の LWP が最も頻繁にアクセスすることをカーネルに伝えます。そのため、カーネルはこの範囲とそれに応じて LWP にメモリと他のリソースを割り当てようとする必要があります。
「affinity-on-next-touch」という名前の Linux カーネルへのパッチがありました (2009 年 5月) 。それ?
また、Lee Schermerhorn の「migrate_on_fault」パッチ http://free.linux.hp.com/~lts/Patches/PageMigration/もありました。
では、質問: 現在のバニラ Linux カーネル、または RedHat Linux カーネルや Oracle Linux カーネルなどの主要なフォークに NUMA の次のタッチはありますか?
linux - NUMA マシンでの共有ライブラリのボトルネック
NUMA マシン (SGI UV 1000) を使用して、多数の数値シミュレーションを同時に実行しています。それぞれのシミュレーションは、4 つのコアを使用する OpenMP ジョブです。ただし、これらのジョブを約 100 以上実行すると、パフォーマンスが大幅に低下します。これが発生する理由に関する私たちの理論は、ソフトウェアに必要な共有ライブラリがマシンのグローバル メモリに 1 回だけ読み込まれ、その後、すべてのプロセスが単一ノードのメモリにアクセスするため、システムで通信のボトルネックが発生するというものです。
これは古いソフトウェアであり、変更の範囲が制限されており、静的 make オプションは必要なすべてのライブラリを静的にリンクしていません。私が見ることができる最も便利な解決策は、システムに必要な共有ライブラリの新しいコピーを各プロセスまたはノード (それぞれで 3 つのプロセスを実行している) にロードさせることですが、まだ実行していませんこれを行う方法を見つけることができました。誰かがこれを行う方法を教えてもらえますか、またはこの問題を解決する方法について他の提案がありますか?
haskell - マルチコア プロセッサ上の Haskell ランタイムの構造
Haskell ランタイムは、コアごとに OS スレッドを作成することを理解しています。軽量スレッド/ユーザー スレッドは、ランタイムによってこれらの事前展開された OS スレッドにスケジュールされます。だいたい。
しかし、Haskell ランタイムはどのように構造化されているのでしょうか?モノリシックなのか、それとも別々のパーツで構成されているのでしょうか?
私が本当に知りたいのは、RT 自体がコア間でどれだけスケーラブルで分散可能かということです。たとえば、理論的には 1000 コアのシステムがあり、コアの 5% で Haskell RT を開始できますか (50 個の独立または分散 RT として)。 ?
c - 複数の NUMA ノードからメモリ チャンクを予約する
この質問では、Linux カーネルが一部のメモリを使用されないように強制する方法について説明します (したがって、カーネルに表示されます)。をmemmap=nn[KMG]$ss[KMG]
使用すると、メモリの 1 つのチャンクを除外できます。
このカーネル ブート パラメーターを複数回指定して、物理メモリの複数のセクションをさまざまな NUMA ノードから除外することは可能ですか。
試してみましたか?助言がありますか ?
java - Opteronコアがそれぞれ75%の容量で実行されているのはなぜですか?(25%CPUアイドル)
128Gbを備えた強力な32コアAMDOpteronサーバーの配信を開始しました。それぞれ16コアの2x6272CPUがあります。30スレッドで長時間実行される大きなJavaタスクを実行しています。LinuxとJavaのNUMA最適化がオンになっています。私たちのJavaスレッドは、主にそのスレッド専用のオブジェクトを使用しており、他のスレッドが読み取るメモリを読み取ることもあれば、共有オブジェクトを書き込んだりロックしたりすることもあります。
CPUコアが25%アイドル状態である理由を説明することはできません。以下は「トップ」のダンプです。
Javaスタックのダンプは、ロックが使用されているいくつかの場所の近くにスレッドがないこと、およびディスクやネットワークI/Oの近くにスレッドがないことを確認します。
「アイドル」と「待機」の「トップ」の意味を明確に説明するのに苦労しましたが、「アイドル」は「実行する必要のあるスレッドがこれ以上ない」という意味であるという印象を受けますが、これは意味がありません。私たちの場合。「Executors.newFixedThreadPool(30)」を使用しています。保留中のタスクは多数あり、各タスクは10秒ほど続きます。
説明にはNUMAをよく理解する必要があるのではないかと思います。CPUが非ローカルアクセスを待機しているときに表示される「アイドル」状態ですか?そうでない場合、説明は何ですか?
numa - すべてのメモリ割り当てを 1 つの NUMA ノードに制限する方法
NUMA 対応のマルチスレッド プログラミングは初めてです。すべてのスレッドとそのメモリ割り当てが 1 つのノードに制限されるようにコードを書いています。プログラムの開始時に、次の呼び出しを行います。
私の理解では、この方法で numa_bind を呼び出すと、すべてのスレッドとすべてのメモリ割り当てがノード 0 にバインドされます。
さらに、このコードから pthread を開始するときは、次を使用して特定の CPU にバインドします。
ただし、/proc//numa_maps を見ると、特定のライブラリ (libc など) がノード 1 のメモリにバインドされていることがわかります。プロセスが必要とするすべてのメモリがノードにバインドされていることを確認するにはどうすればよいですか? 0?
numa - SGI Numatools のソース コード (dplace ユーティリティおよびカーネル モジュール)
プロプライエタリ パッケージ (SGI ProPack) の一部である SGI Numatools のソース コードがあるかどうか興味があります。ただし、GPL コードが含まれています。このパッケージは、dlook、dplace NUMA ユーティリティ、numatools カーネル モジュールで構成されています。
GPL ライセンスは、 SGI ProPack のリリース ノートに記載されています。-for-use-with-sles10-sp1/PACKAGE_LICENSES.txt