Aktivieren von NUMA für Intel Core i7

22

Im Linux-Kernel heißt es in der Dokumentation für CONFIG_NUMA:

Enable NUMA (Non Uniform Memory Access) support. 

he kernel will try to allocate memory used by a CPU on the  
local memory controller of the CPU and add some more
NUMA awareness to the kernel.

For 64-bit this is recommended if the system is Intel Core i7
(or later), AMD Opteron, or EM64T NUMA.

Ich habe einen Intel Core i7-Prozessor, aber AFAICT hat nur einen NUMA-Knoten:

$ numactl --hardware
available: 1 nodes (0)
node 0 cpus: 0 1 2 3 4 5 6 7
node 0 size: 16063 MB
node 0 free: 15031 MB
node distances:
node   0 
  0:  10 

Wozu also CONFIG_NUMA=y, wenn i7 nur einen NUMA-Knoten hat?

user1968963
quelle

Antworten:

13

Ich denke, dieses Bild erklärt genug:

                  Bildbeschreibung hier eingeben

  • Socket oder Numa Node ist eine Sammlung von Kernen mit lokalem Speicherzugriff. Jeder Sockel enthält einen oder mehrere Kerne. Beachten Sie, dass sich dies nicht unbedingt auf einen physischen Sockel bezieht, sondern auf die Speicherarchitektur des Computers, die von Ihrem Chiphersteller abhängt.

  • Prozessorkern (CPU-Kern, logischer Prozessor) bezeichnet eine einzelne Verarbeitungseinheit, die Berechnungen durchführen kann.

Das oben Gesagte weist also darauf hin, dass Sie mehrere Prozessoren auf dem Computer benötigen, um die NUMA-Architektur zu nutzen.

Sie können die NUMA-Unterstützung im Kernel kompiliert und auf einem Einzelprozessor-Computer ausführen. Es ist ähnlich wie bei der SMP-Unterstützung. Es ist auch in kompiliert, aber wenn der Kernel feststellt, dass sich ein einzelner Prozessor im System befindet, wird er es nicht verwenden (deaktivieren). Gleiches gilt für NUMA. Sie können den dmesgKernelringpuffer oder die /var/log/dmesgKernelringdatei auf verwandte Nachrichten prüfen :

NUMA - Einzelprozessor (oder NUMA deaktiviert) X Multiprozessor:

No NUMA configuration found
NUMA: Allocated memnodemap from b000 - b440

SMP - Single Prozessor X Multi Prozessor:

SMP: Allowing 1 CPUs, 0 hotplug CPUs
SMP: Allowing 32 CPUs, 0 hotplug CPUs

Verweise

dsmsk80
quelle
2
@slm - was sagen Sie macht Sinn, aber warum der Kernel - Dokumentation (in meiner Frage zitiert) sagen , dass ich ermöglichen sollte CONFIG_NUMAfür core i7?
user1968963
1
Seit Haswell ist es nicht mehr wahr, dass NUMA für einen Single-Prozessor-Rechner (Single-Socket-Rechner) nicht mehr von Nutzen ist. Bestimmte Haswell-Produkte bieten den von Intel als "Cluster on Die" bezeichneten Modus. Der Single-Socket-Prozessor verfügt über mehrere integrierte Speichercontroller und daher über mehrere Speicherpfade, die mit dieser Funktion als unterschiedliche NUMA-Regionen behandelt werden können, die alle einen Socket umfassen.
Paul Caheny
16
For 64-bit this is recommended if the system is Intel Core i7
(or later), AMD Opteron, or EM64T NUMA.

Beachten Sie zunächst, dass Intel Core i7 nur eine Marketingbezeichnung ist und die Formulierung Intel Core i7 (oder höher) sehr vage ist. Was könnte es also bedeuten?

Die Hilfetexte des Linux-Kernels Kconfig, in denen ein Intel Core 7i erwähnt und dann auf Intel Core i7 korrigiert wurde , wurden im November 2008 bearbeitet . Das Festschreibungsprotokoll lautet:

x86: update CONFIG_NUMA description
Impact: clarify/update CONFIG_NUMA text

CONFIG_NUMA description talk about a bit old thing.
So, following changes are better.

 o CONFIG_NUMA is no longer EXPERIMENTAL

 o Opteron is not the only processor of NUMA topology on x86_64 no longer,
   but also Intel Core7i has it.

Es kann sich vernünftigerweise nur auf Intel Core i7-CPUs beziehen, die zu diesem Zeitpunkt gemäß Spezifikation veröffentlicht oder angekündigt wurden. Das wären die Bloomfield- Prozessoren, die auf der Nehalem-Mikroarchitektur basieren und den Speichercontroller von der Northbridge auf die CPU verlagern (wie AMD es 2003 mit dem Opteron / AMD64 getan hatte) und QuickPath Interconnect / QPI einführen (als Pendant zu AMDs HyperTransport). für die CPU / CPU- und CPU / IOH-Verbindung (IO-Hub, ex-Northbridge).

Die Bloomdale i7-CPUs waren die ersten Einträge im neuen Core i {3,5,7} -Namensschema. Als dieser Linux-Dokumententext geschrieben wurde, bezog sich i7 nicht speziell auf den Core i7 im Gegensatz zu i5 (erstmals 09/2009) oder i3 (erstmals 01/2010), sondern höchstwahrscheinlich auf die neue Nehalem-Mikroarchitektur mit seinen integrierten Speichercontroller und QPI.

Es gibt eine Intel-Pressemitteilung vom 11/2008 über das i7 ( Intel führt den schnellsten Prozessor auf dem Planeten ein ), in der es heißt, dass der Core i7-Prozessor die Speicherbandbreite früherer Intel "Extreme" -Plattformen mehr als verdoppelt , aber NUMA überhaupt nicht erwähnt .

Der Grund ist meiner Meinung nach, dass NUMA für Desktop-PCs keine Rolle spielt, auch nicht für "extreme".

NUMA ist wichtig für teure Server mit mehreren CPU-Sockeln (nicht nur mehreren Kernen auf einem Sockel) mit dedizierten physischen Speicherzugriffsspuren (nicht nur einem Speichercontroller), sodass jede CPU über einen dedizierten lokalen Speicher verfügt, der "näher" liegt als der Speicher der anderen CPUs. (Denken Sie an 8 Sockel, 64 Kerne, 256 GB RAM.) NUMA bedeutet, dass eine CPU zusätzlich zu ihrem eigenen lokalen Speicher auch auf Remote-Speicher (den lokalen Speicher einer anderen CPU) zugreifen kann, allerdings zu höheren Kosten. NUMA ist die Synthese einer gemeinsam genutzten Speicherarchitektur wie SMP, bei der der gesamte Speicher für alle Kerne gleichermaßen verfügbar ist, und einer verteilten Speicherarchitektur wie MPP (Massively Parallel Processing), bei der jedem Knoten ein dedizierter Speicherblock zugewiesen wird. Es ist MPP, aber es sieht für die Anwendung wie SMP aus.

Desktop-Motherboards haben keine Dual-Sockets und Intel-Desktop-CPUs, einschließlich extremer i7-Editionen, verfügen nicht über den zusätzlichen QPI-Link für die Dual-Socket-Konfiguration.

Lesen Sie den Wikipedia-QPI- Artikel, um zu erfahren, wie wichtig QPI für NUMA ist:

In der einfachsten Form auf einem Motherboard mit einem Prozessor wird ein einzelner QPI verwendet, um den Prozessor mit dem IO-Hub zu verbinden (z. B. um einen Intel Core i7 mit einem X58 zu verbinden). In komplexeren Fällen der Architektur verbinden separate QPI-Verbindungspaare einen oder mehrere Prozessoren und einen oder mehrere E / A-Hubs oder Routing-Hubs in einem Netzwerk auf der Hauptplatine, sodass alle Komponenten über das Netzwerk auf andere Komponenten zugreifen können. Wie bei HyperTransport setzt die QuickPath-Architektur voraus, dass die Prozessoren über integrierte Speichercontroller verfügen, und ermöglicht eine NUMA-Architektur (Non-Uniform Memory Access).

[…]

Obwohl einige High-End-Core-i7-Prozessoren QPI bereitstellen, sind andere "Mainstream" -Nehalem-Desktop- und -Mobilprozessoren für Single-Sockel-Boards vorgesehen (z. B. LGA 1156 Core i3-, Core i5- und andere Core i7-Prozessoren der Lynnfield / Clarksfield- und Nachfolgerfamilien). Stellen Sie QPI nicht extern zur Verfügung, da diese Prozessoren nicht für die Teilnahme an Multi-Socket-Systemen vorgesehen sind. QPI wird jedoch intern auf diesen Chips verwendet […]

Die Art und Weise, wie eine Intel Nehalem-CPU auf einer Multi-Socket-Serverplatine nicht lokalen Speicherzugriff ermöglicht, erfolgt über QPI. Auch im Artikel über NUMA :

Intel kündigte Ende 2007 die NUMA-Kompatibilität für seine x86- und Itanium-Server mit seinen Nehalem- und Tukwila-CPUs an. Beide CPU-Familien teilen sich einen gemeinsamen Chipsatz. Die Verbindung wird als Intel Quick Path Interconnect (QPI) bezeichnet. AMD implementierte NUMA mit seinem Opteron-Prozessor (2003) unter Verwendung von HyperTransport.

Überprüfen Sie diesen Bericht aus dem Jahr 11/2008 , um festzustellen , dass Intel einen der beiden QPI-Links auf dem i7 deaktiviert hat und somit die Dual-Socket-Konfiguration deaktiviert hat, sofern NUMA zutrifft:

Diese erste High-End-Desktop-Implementierung von Nehalem trägt den Codenamen Bloomfield und ist im Wesentlichen das gleiche Silizium, das irgendwann für Server mit zwei Sockets verwendet werden sollte. Aus diesem Grund sind bei Bloomfield-Chips zwei QPI-Verbindungen integriert, wie aus dem obigen Würfel ersichtlich ist. Die zweite QPI-Verbindung wird jedoch nicht verwendet. Auf 2P-Servern, die auf dieser Architektur basieren, werden die beiden Sockets durch diese zweite Verbindung verbunden, und über diese werden die CPUs Cache-Kohärenznachrichten (unter Verwendung eines neuen Protokolls) und Daten (da das Speichersubsystem NUMA ist) gemeinsam nutzen - wieder sehr ähnlich zum Opteron.

Ich habe mich also von Ihrer Frage bezüglich meiner Google-Forschungsergebnisse abgewandt. Sie fragen sich, warum in den Linux-Dokumenten empfohlen wird, sie Ende 2008 zu aktivieren. Ich bin nicht sicher, ob diese Frage nachweislich richtig beantwortet wurde. Wir müssten den Dokumentationsautor fragen. Das Einschalten von NUMA kommt Desktop-CPU-Benutzern nicht zugute, schadet ihnen aber auch nicht wesentlich, während es Multi-Socket-Benutzern hilft. Warum also nicht? Dies könnte die Begründung gewesen sein. Gefunden, was sich in einer Diskussion über das Deaktivieren von NUMA auf dem Arch Linux-Tracker widerspiegelt ( FS # 31187 - [linux] - NUMA aus Konfigurationsdateien deaktivieren ).

Der Verfasser des Dokuments hätte auch an das NUMA-Potenzial der Nehalem-Architektur denken können, deren einzige Vertreter bei der Erstellung des Dokuments die Core i7-Prozessoren 11/2008 (920, 940, 965) waren. Die ersten Nehalem-Chips, für die NUMA wirklich Sinn gemacht hätte, sind wahrscheinlich die Xeon-Prozessoren Q1 / 2009 mit doppeltem QPI-Link wie der Xeon E5520 .

Lumi
quelle
2

Ich denke, wenn Sie den --showSchalter verwenden, könnte es sinnvoller sein:

$ numactl --show
policy: default
preferred node: current
physcpubind: 0 1 2 3 
cpubind: 0 
nodebind: 0 
membind: 0 

So können Sie die Verwendung von physcpubind wie folgt steuern:

$ numactl --physcpubind=+0-2 myapp

Dies würde die Anwendung myappauf die ersten 2 CPU-Kerne beschränken. Mein System ist ein i5 mit 4 Kernen.

Verweise

slm
quelle
2

Ich habe dasselbe für meinen Desktop-PC untersucht, während ich meinen Kernel selbst erstellt habe. Ich habe mich entschieden, NUMA nach langem Nachforschen zu deaktivieren. Meine CPU ist ein Core i7 3820, der 8 Prozessoren mit HT hat. Diese Seite hat mir bei meiner Entscheidung geholfen.

deaktiviere NUMA in den Konfigurationsdateien

Zusammenfassend ist NUMA nur dann sinnvoll, wenn Sie mehr als einen CPU-Sockel haben (unabhängig von den Kernen). Die Rechenleistung von 1-CPU-Socket-Rechnern ist selbst bei mehreren Kernen nur sehr gering, fällt jedoch kaum auf. Daher lassen die meisten Distributionen diese Funktion aktiviert, da sie Servern und Rechnern mit mehr als einem Socket enorme Vorteile bietet.

Anthony S.
quelle
1

In einem PC mit höchstens einer CPU ist NUMA völlig nutzlos. Fühlen Sie sich frei, es in Ihrem eigenen Kernel zu deaktivieren.

Sie können das CPU-Bonden jederzeit über das Task-Set (1) steuern .

b166er
quelle