Wie kann ich die Verteilung von Cores auf NUMA-Knoten ändern?

859
Alex

Auf Ubuntu 14.04 TLS für insgesamt 36 Kerne = (2 x CPUs x 9 Kerne x 2 HyperThreading) lscpugeben Sie mir Folgendes :

Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 36 On-line CPU(s) list: 0-35 Thread(s) per core: 2 Core(s) per socket: 9 Socket(s): 2 NUMA node(s): 2 Vendor ID: GenuineIntel CPU family: 6 Model: 63 Stepping: 2 CPU MHz: 1200.000 BogoMIPS: 5858.45 Hypervisor vendor: Xen Virtualization type: full L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 25600K NUMA node0 CPU(s): 0-8,18-26 NUMA node1 CPU(s): 9-17,27-35 

Wie bekannt ist, ist der Datenaustausch über Cores einer einzelnen CPU (über Cache-L3) schneller als über Cores mehrerer verschiedener CPUs (über QPI-Link).

0-8 und 9-17 sind physische CPU-Kerne von zwei NUMA-Knoten, aber 18-26 und 27-35 sind HyperThreading-CPU-Kerne. Es wird bevorzugt, zuerst alle physischen Kerne und dann in der zweiten Runde zu nehmen auf zwei physischen Kernen zwei logische Kerne zu übernehmen, dh erhöht dies die Gesamtleistung?

Oder bedeutet es, dass, wenn ich mehr als 8 Threads starte, zum Beispiel 12 Threads, dann 9 Threads (0-8) auf der 1. CPU (NUMA node0) und 3 Threads (9-12) auf der 2. CPU ( NUMA-Knoten1)? Und erhöht dies die Latenz des Austauschs zwischen den Threads und verringert die Gesamtleistung?

Wie kann ich die Verteilung der Kerne auf die NUMA-Knoten ändern, um sie wie folgt einzustellen?

NUMA node0 CPU(s): 0-17 NUMA node1 CPU(s): 18-35 
5
In jeder realistischen Anwendung können die Vorteile eines schnelleren Datenaustauschs zwischen Kernen nicht die Kosten kompensieren, die beim Verlust aller Ressourcen auf einem Chip wie Speicherbandbreite, L3-Cache, thermischer Headroom usw. anfallen. Wenn Sie nichts wissen, tun die Leute, die Ihr System entworfen haben, nichts damit. David Schwartz vor 7 Jahren 1
Nur für mein eigenes Wissen, welche Intel-CPU hat 9 Kerne? Peter Berbec vor 6 Jahren 0
@ Peter Berbec https://en.wikichip.org/wiki/intel/xeon_e5/e5-2686_v4 http://www.cpu-world.com/CPUs/Xeon/Intel-Xeon%20E5-2686%20v4.html Alex vor 6 Jahren 1
Oh, der Single-Socket-18-Core-Chip zeigt sich als 2 NUMA-Knoten mit jeweils 9 Kernen und die Hyperthreading-Cores als zwei weitere NUMA-Knoten. interessant! Peter Berbec vor 6 Jahren 0
@Peter Berbec ** 2 x CPU-Sockel ** = 2 NUMA_nodes x 18 Kerne (36 logische Kerne HT) = 72 logische Kerne HT Alex vor 6 Jahren 0
Ich muss wirklich ein Upgrade von der 4-Kern-Sandy-Bridge durchführen ... Peter Berbec vor 6 Jahren 0
@Peter Berbec 1 x Desktop-CPU = 18 Kerne (36 logische Kerne HT) (Bonus 44 PCIe) https://ark.intel.com/products/126699/Intel-Core-i9-7980XE-Extreme-Edition-Processor-24_75M -Cache-up-to-4_20-GHz 1 x Desktop-CPU = 16 Kerne (32 logische Kerne) (Bonus 64 PCIe) https://www.amd.com/de/products/cpu/amd-ryzen-threadripper-1950x # produktspezifikationen Alex vor 6 Jahren 0

1 Antwort auf die Frage

1
Astara

Sie können die Verteilung von Kernen zwischen Numaknoten nicht ändern.

Die Numaknoten sind physikalische Einschränkungen, die sich auf zwei Sockets beziehen.

Numa - Nicht-Uniform-Memory-Architektur - hat eine Strafe für den Zugriff auf Speicher außerhalb des lokalen Knotens. Hyperthreaded-Cores sollten auf demselben Numa-Knoten als 'Cores' angezeigt werden wie die Haupt-Cores.

Wenn Sie also über 9 Kerne / Numa-Knoten verfügen und Hyperthreading aktiviert haben (in den meisten Situationen kein Gewinn für die Leistung, da die Hyperthread-Cores Ressourcen aus den Haupt-Cores stehlen und zu mehr "Thrashing" führen), WENN NICHT Ihre Hyperthreading-Prozesse Teil des Prozesses sind dasselbe Programm und die gleichen Teile des Caches wie die Hauptkerne: Normalerweise behandeln die Personen die Kerne als unabhängige Ressourcen, wobei die Hyper-Thread-Kerne ebenfalls unabhängig voneinander behandelt werden.

Bei allgemeinen Workloads führt das Hyperthreading auf Computern, die "geladen" werden, zu einer erhöhten Ressourcenkonflikt und verlangsamt den Gesamtdurchsatz. Wenn Ihre Workload so ist, dass alle Haupt- und Hypercpus für dasselbe Programm bestimmt sind und verwandte Threads ausführen, können Sie mit Hyperthreading eine bessere Leistung erzielen.

Angesichts Ihrer Fragen würde ich wirklich vorschlagen, das Hyperthreading zu deaktivieren, da es nicht so aussieht, als würden Sie einen Nummernknoten für eine Anwendung reservieren, in der alle lokalen Speicher und Ressourcen gemeinsam nutzen können.

Ignorieren des Hyperthread-Problems - da dies meist nur eine zusätzliche Komplikation ist, wenn dieselben Regeln angewendet werden, können Sie die cpu nicht zwischen den Knoten verschieben, da der Kern der cpu auch physische Dinge ist, die sich physisch in einem Chip (Numa-Knoten) befinden.

Sie können Prozesse und Threads mit Prozessor-Affinität an einen oder mehrere Numa-Knoten binden - vielleicht möchten Sie das?