Um ein vollständiges Bild zu erhalten, müssen Sie sich die Anzahl der Threads pro Kern, Kerne pro Socket und Sockets ansehen. Wenn Sie diese Zahlen multiplizieren, erhalten Sie die Anzahl der CPUs auf Ihrem System.
CPUs =Threads pro Kern X Kerne pro Socket X Sockets
CPUs sind das, was Sie sehen, wenn Sie htop
ausführen (diese entsprechen nicht physischen CPUs).
Hier ist ein Beispiel von einem Desktop-Rechner:
$ 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-Anzahl von lscpu
. Für den obigen Desktop-Rechner sollte dies mit den 8 CPU(s) übereinstimmen, die von lscpu
gemeldet werden :
$ nproc --all
8
Die Ausgabe von /proc/cpuinfo
sollte mit diesen Informationen übereinstimmen, zum Beispiel können wir auf dem Desktop-System oben sehen, dass es 8 Prozessoren (CPUs) und 4 Kerne (Kern-ID 0-3) gibt:
$ 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
Die cpu cores
gemeldet von /proc/cpuinfo
entspricht dem Core(s) per socket
gemeldet von lscpu
. Für den obigen Desktop-Rechner sollte dies mit den 4 Kernen pro Socket übereinstimmen, die von lscpu:
$ grep -m 1 'cpu cores' /proc/cpuinfo
cpu cores : 4
Um Ihre Frage konkret zu beantworten, geben Sie an, wie viele Kerne Sie haben, indem Sie die Anzahl der Kerne, die Sie pro Socket haben, mit der Anzahl der Sockets multiplizieren, die Sie haben.
Kerne =Kerne pro Socket X Sockets
Für die obigen Beispielsysteme hat der Desktop 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 ist dmidecode
die pro Socket Informationen ausgibt. Im Fall des oben aufgeführten Serversystems erwarten wir 8 Kerne 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
Die lscpu
Der Befehl hat eine Reihe nützlicher Optionen, die Sie vielleicht ausprobieren möchten, zum Beispiel:
$ lscpu --all --extended
$ lscpu --all --parse=CPU,SOCKET,CORE | grep -v '^#'
Siehe man lscpu
für Details.
Zusammengefasst:
- Sie müssen Sockets, Kerne und Threads kennen
- Sie müssen mit dem Begriff CPU vorsichtig sein, da er in verschiedenen Kontexten unterschiedliche Dinge bedeutet
Man muss sich Sockets und Adern pro Socket ansehen. In diesem Fall haben Sie 1 physische CPU (Sockel) mit 4 Kernen (Kerne pro Sockel).
Diese Informationen erhalten Sie unter nproc(1)
Befehl
$ nproc --all
12
Es erfordert keine Root-Rechte.