
Ich bin etwas verwirrt über die Anzahl der CPUs meines Servers.
Es läuft auf Intel(R) Xeon(R) Gold 6242R CPU @ 3.10GHz
dem nachoffizielle Intel-Dokumenteenthält 20 physische Kerne.
Das Problem hier ist die Ausgabe des lscpu
Befehls (einige Zeilen gefiltert):
CPU(s): 80
On-line CPU(s) list: 0-79
Thread(s) per core: 2
Core(s) per socket: 20
Socket(s): 2
NUMA node(s): 2
Model name: Intel(R) Xeon(R) Gold 6242R CPU @ 3.10GHz
NUMA node0 CPU(s): 0-19,40-59
NUMA node1 CPU(s): 20-39,60-79
So wie ich das verstehe actual physical cores = CPU(s) / thread(s) per core
, bekomme ich dann aber 40, also das Doppelte von dem, was ich erwarte.
Kann mir bitte jemand erklären, was hier los ist und was genau CPU(s), thread(s) per core, core(s) per socket, socet(s)
bedeutet?
Antwort1
Sockets
gibt an, wie viele physische CPUs sich im System befinden.Cores per socket
ist die Anzahl der vollständigen CPU-Kerne (einschließlich Lade-/Decodierungslogik), die pro physischer CPU vorhanden sind.Threads per core
ist, wie viele Threads auf einem einzelnen Kern geplant werden können (HyperThreading). Einfach ausgedrückt, die Hardware in der CPU, die verwendet wirdVordie tatsächliche Ausführung des Codes wird verdoppelt, sodass die CPU mehrere verschiedene Aufgaben zur Ausführung bereithalten kann. Dadurch kann die CPU Anweisungen abrufen/dekodieren, bevor sie den Ausführungskern der CPU erreichen. Es verhindert oder reduziertPipeline-Stall.CPU
bedeutet "planbare Entitäten", das ist, wie viele Ausführungswarteschlangen das Betriebssystem haben wird, das wäre alsosockets x cores per socket x threads per core
In Ihrem Fall haben Sie 2 physische CPUs mit jeweils 20 Kernen, die jeweils 2 Threads ausführen können (Hyperthreading). 2x20x2 = 80
Das ist also die angezeigte Anzahl CPUs
.
Antwort2
Die Verwirrung rührt von einem sehr einfachen Detail her, das aus dem lscpu
angezeigten Infobefehl möglicherweise nicht klar hervorgeht.
Die Sache ist: Ihr Server hat tatsächlich 2 Intel(R) Xeon(R) Gold 6242R CPU
s, was in der Zeile erwähnt wird Socket(s)
.
Wie in der Intel-Dokumentation angegeben, enthält jede dieser CPUs 20 physische Kerne (die Core(s) per socket
Linie), was insgesamt 40 physische Kerne ergibt.
Jeder dieser Kerne kann zwei Threads „gleichzeitig“ ausführen (die Thread(s) per core
Zeile).
Also: 2 Intel Xeon, je 20 physische Kerne, je 2 Threads, ergibt insgesamt 80 „Einheiten, die einen Prozess ausführen können“ oder „CPUs“
Antwort3
Die Idee einer CPU ist heute ein wenig abstrakt, und das begann mit Hyperthreading (Ende der 90er) und dann mit der Intel Core-Serie (Anfang der 00er). Davor gab es definitiv Systeme mit mehreren CPUs, aber sie waren alle mehrere physische CPUs.
Aber beim Hyperthreading und Mehrkern-Einzel-CPUs unterscheidet sich die physische Anzahl der CPUs von der logischen Anzahl der CPUs, die der auf den CPUs ausgeführte Code sieht.
Socket(s): 2
Sie haben 2 physische CPUs, also „ein Ding mit Kühlkörper, das an Ihr Motherboard angeschlossen ist“
Core(s) per socket: 20
Jede physische CPU hat 20 Kerne, die für Linux wie unabhängige CPUs aussehen und größtenteils auch so funktionieren. Die Kerne teilen sich mindestens denselben L3-Cache, wahrscheinlich auch denselben L2-Cache und haben wahrscheinlich ihren eigenen L1-Cache – also nicht ganz so leistungsfähig wie einzelne Sockel mit eigenem L3/L2/L1, aber fast so gut.
Da dies jeder Sockel ist, haben Sie 2 * 20 = 40.
Thread(s) per core: 2
Jeder Kern verfügt über 2 SMT-Threads, die von der Mikroarchitektur Ihrer CPU implementiert werden, um für Linux im Grunde genommen wie unabhängige CPUs auszusehen
Sie werden bei weitem nicht so schnell sein wie echte unabhängige Kerne.
Threads auf der Mikroarchitektur versuchen, derzeit ungenutzte Pipeline-Stufen von Kernen abzurufen, müssen aber möglicherweise warten, wenn sie beschäftigt sind – und CPUs versuchen bereits, sich selbst sehr beschäftigt zu halten. Daher sind 2 Threads auf 2 Kernen zwar nicht annähernd gleichwertig mit 4 Kernen, aber es ist etwas, wodurch Code etwas schneller ausgeführt werden kann.
Beachten Sie, dass Spectre und ähnliche Sicherheitslücken eher über Threads als über Kerne oder Sockets hinweg auftreten können, da Kernressourcen gemeinsam genutzt werden.
Da dies jedoch pro Kern und auch pro Sockel gilt, ergibt dies 2 * 20 * 2, was zu folgendem Ergebnis führt:
CPU(s): 80
Antwort4
Ihr Server verwendet 2 „Prozessor-Chips“ (auf den 2 Sockeln), die jeweils über 20 physische Kerne verfügen.
Und jeder Kern kann 2 Threads verarbeiten.
Deshalb wird angezeigt: 2 (Prozessor-Chips) * 20 (Kerne pro Teil) * 2 (Threads, die jeder Kern verarbeiten kann) = 80 CPUs
In diesem Fall steht CPU für „schedulable entity“, also die Anzahl der Threads, die von der Maschine ausgeführt werden können.