NUMAシステムでは、メモリは現在のNUMAノードに対してローカルまたはリモートになります。 バインディング http://lse.sourceforge.net/numa/status/description.html現代のLinuxにNUMA next-touchポリシーがあります
デフォルトのメモリユーザーのプログラムのメモリがオンに割り当てられていることが重要である:「最初のタッチ」政策(結合戦略をノードにデフォルトのメモリ)があるメモリは更にローカルようにするに それらが動作しているCPUを含むノードに近いノード。したがって、デフォルトでは、ページフォールトCPUを含むノードからのメモリによってページフォールトが満たされます。ページに接触する最初のCPUはページをフォルトするCPUであるため、このデフォルトのポリシーは「最初のタッチ」と呼ばれます。
デフォルトポリシーが最初のタッチと呼ばれています。このポリシーのもとでは、メモリのページに最初に触れる(つまり、そこに書き込む、またはそこから読む)プロセスによって、プロセスが実行されているノードにそのページが割り当てられます。この方針は、逐次プログラムや多くの並列プログラムにも有効です。
その他の非ローカルポリシーもあります。また、NUMAノードにメモリセグメントを明示的に移動する必要がある機能もあります。
しかし、(単一のアプリケーションの多くのスレッドの文脈では)いくつかのデータを使ってメモリ領域(最大100 MB)を「バインド解除」し、この領域の次のタッチ(読み込みまたは書き込み)時にページをスレッドにアクセスするnumaノードに移行する "first touch"のようなハンドラ。
このポリシーは、多数のスレッドで処理する膨大なデータがあり、このデータへのアクセスパターンが異なる場合に役立ちます(たとえば、第1段階 - スレッドによって2次元配列を列で分割し、行ごとに)。
このような方針は、次のLWPは が最も重く、それをアクセスする指定されたアドレス範囲を触れ するカーネルに知らせる
https://cims.nyu.edu/cgi-systems/man.cgi?section=3C&topic=madvise
MADV_ACCESS_LWP MADV_ACCESS_LWPフラグでmadviceを経由して9以降のSolarisでサポートされていましたしたがって、 カーネルは、この 範囲とLWPに対応するメモリおよびその他のリソースを に割り当てようとする必要があります。
がありました(2009年5月)、「親和オン次回タッチ」という名前のLinuxカーネルにパッチ、http://lwn.net/Articles/332754/(thread)が、私はそれがメインラインに未承認だった理解し、それはないですか?
Lee Schermerhornの "migrate_on_fault"パッチhttp://free.linux.hp.com/~lts/Patches/PageMigration/もありました。
質問:現在のバニラLinuxカーネルまたはRedHat LinuxカーネルやOracle Linuxカーネルのようないくつかの主要なフォークに、NUMAのためのいくつかの次のタッチがありますか?
この文書をチェックする - https://hal.inria.fr/inria-00358172/file/article.pdf「Linuxでのマルチスレッドアプリケーションの高性能メモリ移行の実現」、Brice Goglin、Nathalie Furmento、2009「実装mprotectによるユーザー空間のNext-touchポリシーとセグメンテーションフォルトのシグナルハンドラ "を参照してください。" next-touchの実装は、MaMI/Marcelの一部ですhttps://runtime.bordeaux.inria.fr/MaMI//https://runtime.bordeaux.inria.fr/marcel/ – osgx