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 = Threads pro Core X Cores pro Socket X Sockets
CPUs sehen Sie beim Ausführen htop
(diese entsprechen nicht physischen CPUs).
Hier ist ein Beispiel von einem Desktop-Computer:
$ lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s): 8
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
Und ein Server:
$ lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s): 32
Thread(s) per core: 2
Core(s) per socket: 8
Socket(s): 2
Die Ausgabe von nproc
entspricht der CPU-Zählung von lscpu
. Für den Desktop-Computer oben sollte dies mit den 8 CPU (s) übereinstimmen, die gemeldet werden von lscpu
:
$ nproc --all
8
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):
$ grep -E 'processor|core id' /proc/cpuinfo
processor : 0
core id : 0
processor : 1
core id : 0
processor : 2
core id : 1
processor : 3
core id : 1
processor : 4
core id : 2
processor : 5
core id : 2
processor : 6
core id : 3
processor : 7
core id : 3
Der cpu cores
gemeldete von /proc/cpuinfo
entspricht dem Core(s) per socket
gemeldeten von lscpu
. Für die Desktop-Maschine oben sollte dies mit den 4 Core (s) pro Socket übereinstimmen, die von lscpu gemeldet werden:
$ grep -m 1 'cpu cores' /proc/cpuinfo
cpu cores : 4
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.
Adern = Adern pro Sockel X Sockel
Für die obigen Beispielsysteme verfügt der Desktop über 4 Kerne:
$ echo "Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))"
Cores = 4
Während der Server 16 hat:
$ echo "Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))"
Cores = 16
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:
$ sudo dmidecode -t 4 | grep -E 'Socket Designation|Count'
Socket Designation: CPU1
Core Count: 8
Thread Count: 16
Socket Designation: CPU2
Core Count: 8
Thread Count: 16
Der lscpu
Befehl enthält eine Reihe nützlicher Optionen, die Sie möglicherweise ausprobieren möchten, z.
$ lscpu --all --extended
$ lscpu --all --parse=CPU,SOCKET,CORE | grep -v '^#'
Siehe man lscpu
für weitere Einzelheiten.
In Summe:
- Sie müssen sich der Sockets, Kerne und Threads bewusst sein
- Sie müssen mit dem Begriff CPU vorsichtig sein, da er in verschiedenen Kontexten unterschiedliche Bedeutungen hat