Gibt es NUMA Next-Touch-Richtlinien in modernen Linux?

8

Wenn wir am NUMA-System arbeiten, kann der Speicher relativ zum aktuellen NUMA-Knoten lokal oder remote sein. Um den Speicher lokaler zu machen, gibt es eine "first-touch" -Richtlinie (die Standardspeicher-zu-Knoten-Bindungsstrategie): Ссылка

  

Standardspeicherbindung    Es ist wichtig, dass der Speicher der Benutzerprogramme auf einem Knoten zugewiesen wird, der dem Knoten nahe ist, der die CPU enthält, auf der sie ausgeführt werden. Daher werden Seitenfehler standardmäßig durch den Speicher von dem Knoten erfüllt, der die seitenfehlerverursachende CPU enthält. Da die erste CPU, die die Seite berührt, die CPU ist, die die Seite fehlerhaft macht, wird diese Standardrichtlinie "first touch" genannt.

Ссылка

  

Die Standardrichtlinie heißt first-touch. Gemäß dieser Richtlinie bewirkt der Prozess, der eine Seite des Speichers zuerst berührt (dh auf eine Seite des Speichers schreibt oder von dieser liest), dass diese Seite in dem Knoten zugeordnet wird, auf dem der Prozess ausgeführt wird. Diese Richtlinie funktioniert gut für sequentielle Programme und für viele parallele Programme.

Es gibt auch einige andere nicht lokale Richtlinien. Außerdem gibt es eine Funktion, die eine explizite Verschiebung des Speichersegments zu einem NUMA-Knoten erfordert.

Aber manchmal (im Zusammenhang mit vielen Threads von einzelnen Anwendungen) kann es nützlich sein, die "nächste Berührung" -Richtlinie zu haben: eine Funktion aufrufen, um einige Speicherbereiche (bis zu 100s MB) mit einigen Daten zu "lösen" und den " Berühren Sie zuerst den "ähnlichen" Handler in dieser Region, der die Seite bei der nächsten Berührung (Lesen oder Schreiben) auf den NUMA-Knoten des zugreifenden Threads migriert.

Diese Richtlinie ist nützlich, wenn große Datenmengen von vielen Threads verarbeitet werden sollen und verschiedene Zugriffsmuster auf diese Daten vorhanden sind (z. B. erste Phase - Aufteilung der 2D-Anordnung nach Spalten über Threads; zweite - Aufteilung der gleichen Daten nach Reihen).

Eine solche Richtlinie wurde in Solaris seit 9 über madvice mit MADV_ACCESS_LWP Flag

unterstützt

Ссылка

  

MADV_ACCESS_LWP Sagen Sie dem Kernel, dass der nächste LWP zu                                Berühren Sie den angegebenen Adressbereich                                wird es am stärksten zugreifen, so dass die                                Kernel sollte versuchen, die zuzuteilen                                Speicher und andere Ressourcen dafür                                Bereich und der LWP entsprechend.

Es gab (Mai 2009) das Patch zum Linux-Kernel namens "affinity-on-next-touch", Ссылка ( thread ), aber wie ich es verstehe, wurde es nicht in die Hauptleitung aufgenommen, nicht wahr?

Außerdem gab es Lee Schermerhorns "migrate_on_fault" -Patches Ссылка .

Also, die Frage: Gibt es für NUMA im aktuellen Vanilla-Linux-Kernel oder in irgendeinem Major-Fork, wie dem RedHat-Linux-Kernel oder dem Oracle-Linux-Kernel, einen Next-Touch?

    
osgx 30.08.2012, 12:09
quelle

1 Antwort

1

Nach meinem Verständnis gibt es im Vanilla-Kernel nichts Ähnliches. numactl hat Funktionen, um Seiten manuell zu migrieren, aber es ist wahrscheinlich nicht hilfreich in Ihrem Fall. (Die NUMA-Richtlinienbeschreibung befindet sich in Dokumentation / vm / numa_memory_policy, wenn Sie sich selbst überprüfen möchten)

Ich denke, dass diese Patches nicht zusammengeführt werden, da ich keine der relevanten Code-Snippets im aktuellen Kernel sehe.

    
wujj123456 10.09.2012 17:44
quelle

Tags und Links