Auf Ubuntu 14.04 TLS für insgesamt 36 Kerne = (2 x CPUs x 9 Kerne x 2 HyperThreading), lscpu
gib mir:
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
Bekanntermaßen ist der Datenaustausch zwischen Kernen einer einzelnen CPU (über Cache-L3) schneller als zwischen Kernen mehrerer verschiedener CPUs (über QPI-Verbindung).
0-8 und 9-17 sind physische CPU-Kerne von zwei NUMA-Knoten, aber 18-26 und 27-35 sind HyperThreading-CPU-Kerne, und es wird bevorzugt, zuerst alle physischen Kerne und dann in der zweiten Runde zu übernehmen zwei logische Kerne auf jedem physischen Kern anzunehmen, dh wird dies die Gesamtleistung erhöhen?
Oder heißt das, wenn ich mehr als 8 Threads starte, zum Beispiel 12 Threads, werden 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 wie folgt einstellen?
NUMA node0 CPU(s): 0-17
NUMA node1 CPU(s): 18-35