Ich wollte herausfinden, wie viele Kerne mein System hat, und habe die gleiche Frage in Google gesucht. Ich habe einige Befehle wie den lscpu
Befehl. Als ich diesen Befehl ausprobierte, ergab sich folgendes Ergebnis:
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 23
Stepping: 10
CPU MHz: 1998.000
BogoMIPS: 5302.48
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 2048K
NUMA node0 CPU(s): 0-3
Diese Ausgabe zeigt insbesondere:
- CPU (s): 4
- Core (s) pro Sockel: 4
- CPU-Familie: 6
Welche davon gibt die Kerne eines Linux-Systems an?
Gibt es einen anderen Befehl, der die Anzahl der Kerne angibt, oder gehe ich davon aus, dass dies völlig falsch ist?
Antworten:
Man muss sich Sockel und Adern pro Sockel anschauen. In diesem Fall haben Sie 1 physische CPU (Sockel) mit 4 Kernen (Kerne pro Sockel).
quelle
nproc
bekomme ich 4 zurück. Wenncat /proc/cpuinfo
ich benutze, erhalte ich 4, und daher scheint diese Antwort für meine Situation zumindest falsch zu sein.Um ein vollständiges Bild zu erhalten, müssen Sie die Anzahl der Threads pro Core, Cores pro Socket und Sockets überprüfen . Wenn Sie diese Zahlen multiplizieren, erhalten Sie die Anzahl der CPUs in Ihrem System.
CPUs sehen Sie beim Ausführen
htop
(diese entsprechen nicht physischen CPUs).Hier ist ein Beispiel von einem Desktop-Computer:
Und ein Server:
Die Ausgabe von
nproc
entspricht der CPU-Zählung vonlscpu
. Für den Desktop-Computer oben sollte dies mit den 8 CPU (s) übereinstimmen, die gemeldet werden vonlscpu
:Die Ausgabe von
/proc/cpuinfo
sollte mit diesen Informationen übereinstimmen. Auf dem Desktop-System oben sehen wir beispielsweise 8 Prozessoren (CPUs) und 4 Kerne (Kern-ID 0-3):Der
cpu cores
gemeldete von/proc/cpuinfo
entspricht demCore(s) per socket
gemeldeten vonlscpu
. Für die Desktop-Maschine oben sollte dies mit den 4 Core (s) pro Socket übereinstimmen, die von lscpu gemeldet werden:Um Ihre Frage spezifisch zu beantworten, sagen Sie, wie viele Kerne Sie haben, indem Sie die Anzahl von Kernen, die Sie pro Sockel haben, mit der Anzahl von Sockeln multiplizieren, die Sie haben.
Für die obigen Beispielsysteme verfügt der Desktop über 4 Kerne:
Während der Server 16 hat:
Ein weiteres nützliches Dienstprogramm
dmidecode
gibt Informationen pro Socket aus. Für das oben aufgeführte Serversystem erwarten wir 8 Cores pro Socket und 16 Threads pro Socket:Der
lscpu
Befehl enthält eine Reihe nützlicher Optionen, die Sie möglicherweise ausprobieren möchten, z.Siehe
man lscpu
für weitere Einzelheiten.In Summe:
quelle
lscpu --all --extended
wäre eine nützliche Ergänzung, aber ich habe keinen Zugriff mehr auf diese speziellen Maschinen.lscpu --all --parse=CORE,SOCKET | grep -Ev "^#" | sort -u | wc -l
Socket(s) * Core(s) per socket
. Angesichts dessen, was ich gerade gesagt habe,echo Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))
wäre esSie können diese Informationen per
nproc(1)
Befehl abrufenEs sind keine Root-Rechte erforderlich.
quelle
Damit die Antwort nicht verwirrend ist, müssen Sie einige einfache Computerarchitekturkonzepte verstehen:
Es gibt verschiedene Arten von Anweisungen. Die Entscheidungslogik in einer CPU sendet die verschiedenen Anweisungen an verschiedene Hardwareeinheiten . Beispielsweise werden arithmetische Anweisungen tatsächlich von einer ALU (Arithmetik / Logik-Einheit) ausgeführt, während Anweisungen, die aus dem Speicher laden / speichern, von einer Art Speichereinheit ausgeführt werden .
Ein Core bezieht sich auf einen Satz von tatsächlicher Ausführungshardware (dh jeder Core hat eine ALU, eine Speichereinheit usw.).
Sie können mehrere CPUs haben, die sich einen Kern teilen - dies wird als Hyperthreading bezeichnet.
Ein Sockel ist der physische Steckplatz auf der Hauptplatine, in den ein Chip eingesetzt wird. Auf diesem Chip befindet sich eine bestimmte Anzahl von Kernen.
Beispiele:
Das Beispiel des OP:
Ein anderes Beispiel:
Zwei physische Sockel, die jeweils einen Chip mit 4 physischen Kernen enthalten, sodass insgesamt 8 Kerne vorhanden sind. Zwei Threads geben Anweisungen an jeden Kern aus (dieser Computer verfügt über Hyperthreading). Dies bedeutet, dass an jeden Kern zwei CPUs angeschlossen sein müssen, was insgesamt 8 * 2 = 16 CPUs ergibt
Die erste Maschine kann zu einem bestimmten Zeitpunkt genau vier Befehle ausführen. Die zweite Maschine kann zu einem bestimmten Zeitpunkt zwischen 8 und 16 Befehle ausführen: 16 werden nur dann erreicht, wenn jedes CPU-Paar unterschiedliche Befehlstypen ausführt, und können so einen Kern gemeinsam nutzen, ohne zu warten.
quelle
Sie können auch den Befehl verwenden,
cat /proc/cpuinfo
der einen Datenblock für jeden Kern ausgibt. Jeder Block beginnt mit diesen Informationen:Kerne werden ab 0 nummeriert. Wenn also der letzte Block
processor : 3
wie in diesem Fall lautet , verfügt Ihr Computer über 4 Kerne.quelle
grep -c ^processor /proc/cpuinfo
(getconf ist ein Teil von glibc)
quelle
getconf _NPROCESSORS_CONF
Sie erhalten die Anzahl der konfigurierten Prozessoren. Sie können den Wert dieser beiden Makros auch innerhalb eines C-Quellcodes abrufen, indem Sie diesysconf()
Funktion verwenden. Geben Sieman sysconf
für weitere Informationen ein.quelle
t 4
macht dmidecode? Wie multiplizieren sich die Zählwerte und aktivierten Zeilen? Zeigt Ihr Beispiel 2 Kerne oder 6 oder 12 oder 24 oder eine andere Zahl?4
istprocessor
, siehe linux.die.net/man/8/dmidecode . Die Verwendung4
als Argument ist jedoch eine schlechte Praxis.bash: dmidecode: command not found
Das ist alles was du brauchst. Dies ist die Anzahl der Online-Kerne, unabhängig davon, ob das Hyperthreading aktiviert oder deaktiviert ist.
Ein anderer einfacher Weg.
quelle
ls -d /sys/devices/system/cpu/cpu* | wc -l
zeigte 49 , weil es ein Verzeichnis istcpuidle
unter dencpuN
Verzeichnissen.Ich habe diesen Weg gefunden:
quelle
Ich möchte nur einige Informationen zu @htaccess 'Antwort hinzufügen.
In CentOS 6.x gibt dmidecode keine Informationen zur Anzahl der Kerne / Threads aus und betrachtet 'CPU' tatsächlich als 'CPU' oder 'Core' in lscpu, nicht als 'Socket'.
quelle
Die CPU-Familie spielt hier keine Rolle.
In Ihrem Fall haben Sie insgesamt 4 volle Kerne.
Was auch wichtig sein kann, ist "Thread (s) pro Kern". Aber du hast 1, also nicht in deinem Fall.
quelle
Cores = Cores per socket X Sockets
Siehe die Beschreibung in meiner Antwort.Eine einfache Möglichkeit, die Anzahl der CPUs zu ermitteln, besteht darin, die folgenden Befehle auszuführen:
quelle