9

NUMA システムで作業する場合、メモリは現在の NUMA ノードに対してローカルまたはリモートにすることができます。メモリをよりローカルにするために、「ファーストタッチ」ポリシー (デフォルトのメモリからノードへのバインディング戦略) があります: http://lse.sourceforge.net/numa/status/description.html

デフォルトのメモリバインディング ユーザープログラムのメモリは、それらが実行されている CPU を含むノードに近いノードに割り当てられることが重要です。したがって、デフォルトでは、ページ フォールトは、ページ フォールト CPU を含むノードのメモリによって解決されます。ページに最初にタッチした CPU がページに障害を起こした CPU になるため、このデフォルト ポリシーは「ファースト タッチ」と呼ばれます。

http://techpubs.sgi.com/library/dynaweb_docs/0640/SGI_Developer/books/OrOn2_PfTune/sgi_html/ch08.html

デフォルトのポリシーはファーストタッチと呼ばれます。このポリシーでは、メモリのページに最初にアクセスする (つまり、書き込みまたは読み取りを行う) プロセスによって、プロセスが実行されているノードにそのページが割り当てられます。このポリシーは、順次プログラムだけでなく、多くの並列プログラムにも有効です。

他にもいくつかの非ローカル ポリシーがあります。また、一部の 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 の次のタッチはありますか?

4

1 に答える 1

1

私の理解では、バニラカーネルには似たようなものはありません。numactl にはページを手動で移行する機能がありますが、おそらくあなたの場合には役に立ちません。(自分で確認したい場合は、NUMA ポリシーの説明が Documentation/vm/numa_memory_policy にあります)

関連するコード スニペットが現在のカーネルに表示されていないため、これらのパッチはマージされていないと思います。

于 2012-09-10T17:44:45.837 に答える