Anzahl der Prozessoren / Kerne in der Befehlszeile


Antworten:


138

11
Schön - aber nicht so allgegenwärtig wie / proc / cpuinfo. nprocbefindet sich auf meiner Ubuntu-VM, jedoch nicht auf meinem RedHat 5.5-basierten Computer.
Digitales Trauma

8
Stellen Sie sicher, dass nproc --allfür alle installierten Verarbeitungseinheiten. Ohne --allwerden nprocnur Verarbeitungseinheiten angezeigt, die für den aktuellen Prozess verfügbar sind. Lesen Sie die Manpage für weitere Details. MMV.
JamesThomasMoon1979

96

Das einfachste Tool wird mit glibc geliefert und heißt getconf:

$ getconf _NPROCESSORS_ONLN
4

8
Noch besser ist, dass es sich um ein POSIX-Dienstprogramm handelt: pubs.opengroup.org/onlinepubs/009604499/utilities/getconf.html .
BCran

2
Im Gegensatz nprocdazu funktioniert dies (standardmäßig) auf Mac OS X.
Alec Jacobson

Obwohl dieses Dienstprogramm unter Solaris verfügbar ist _NPROCESSORS_ONLN(oder irgendetwas mit CPU, Proc usw.), ist es leider in seiner Ausgabe aufgeführt. Ich hatte gehofft, da es sich um ein Posix-Tool handelt, das unter Linux / Solaris funktioniert, musste ich keine Verzweigung verwenden.
Brian Vandenberg

39

Ich denke, die Methode, die Sie angeben, ist unter Linux die portabelste. Anstatt unnötiges Laichen catund wcProzesse zu erzeugen, können Sie es ein wenig verkürzen:

$ grep --count ^processor /proc/cpuinfo
2

25

Wenn Sie dies tun möchten, damit es unter Linux und OS X funktioniert, können Sie Folgendes tun:

CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)

schönes tragbares Skript :)
mircealungu

2
Unter Solaris müssen Sie psrinfo -pstattdessen
mems

14

Bei neueren Kerneln können Sie möglicherweise auch die /sys/devices/system/cpu/Schnittstelle verwenden, um weitere Informationen zu erhalten:

$ ls /sys/devices/system/cpu/
cpu0  cpufreq  kernel_max  offline  possible  present  release
cpu1  cpuidle  modalias    online   power     probe    uevent
$ cat /sys/devices/system/cpu/kernel_max 
255
$ cat /sys/devices/system/cpu/offline 
2-63
$ cat /sys/devices/system/cpu/possible 
0-63
$ cat /sys/devices/system/cpu/present 
0-1
$ cat /sys/devices/system/cpu/online 
0-1

Weitere Informationen dazu, was all dies bedeutet, finden Sie in den offiziellen Dokumenten .


2
nproc verwendet dies meistens ($ OMP_NUM_THREADS, dann readdir sysfs). Ich denke, dies ist die bessere Schnittstelle.
Tobu

2
Und getconf verlässt sich auch auf diese Schnittstelle (die onlineDatei, einfacher als das, was nproc tut)
Tobu

6

Wenn jemand nach "der Anzahl der Prozessoren / Kerne" fragt, werden 2 Antworten angefordert. Die Anzahl der "Prozessoren" entspricht der physischen Anzahl, die in den Sockeln des Computers installiert ist.

Die Anzahl der "Kerne" wäre physikalische Kerne. Hyperthreaded (virtuelle) Kerne wären nicht enthalten (zumindest meiner Meinung nach). Als jemand, der viele Programme mit Thread-Pools schreibt, müssen Sie wirklich die Anzahl der physischen Kerne im Vergleich zu Kernen / Hyperthreads kennen. Sie können jedoch das folgende Skript ändern, um die gewünschten Antworten zu erhalten.

#!/bin/bash

MODEL=`cat /cpu/procinfo | grep "model name" | sort | uniq`
ALL=`cat /proc/cpuinfo | grep "bogo" | wc -l`
PHYSICAL=`cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l`
CORES=`cat /proc/cpuinfo | grep "cpu cores" | sort | uniq | cut -d':' -f2`
PHY_CORES=$(($PHYSICAL * $CORES))
echo "Type $MODEL"
echo "Processors $PHYSICAL"
echo "Physical cores $PHY_CORES"
echo "Including hyperthreading cores $ALL"

Das Ergebnis auf einer Maschine mit 2 physischen Xeon X5650-Prozessoren des Modells mit jeweils 6 physischen Kernen, die auch Hyperthreading unterstützen:

Type model name : Intel(R) Xeon(R) CPU           X5650  @ 2.67GHz
Processors 2
Physical cores 12
Including hyperthreading cores 24

Auf einem Computer mit 2 mdeol Xeon E5472-Prozessoren mit jeweils 4 physischen Kernen, die kein Hyperthreading unterstützen

Type model name : Intel(R) Xeon(R) CPU           E5472  @ 3.00GHz
Processors 2
Physical cores 8
Including hyperthreading cores 8

Dies ist die gründlichste Antwort, die mir die Informationen gab, nach denen ich gesucht habe.
woodToaster

4

Der lscpu(1)vom util-linux- Projekt bereitgestellte Befehl kann auch nützlich sein:

$ 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:    2
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 58
Model name:            Intel(R) Core(TM) i7-3520M CPU @ 2.90GHz
Stepping:              9
CPU MHz:               3406.253
CPU max MHz:           3600.0000
CPU min MHz:           1200.0000
BogoMIPS:              5787.10
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              4096K
NUMA node0 CPU(s):     0-3

1

Dies ist für diejenigen gedacht, die auf tragbare Weise CPU-Kerne auf * bsd, * nix oder solaris zählen möchten (haben nicht auf aix und hp-ux getestet, sollten aber funktionieren). Es hat immer für mich funktioniert.

dmesg | \
egrep 'cpu[. ]?[0-9]+' | \
sed 's/^.*\(cpu[. ]*[0-9]*\).*$/\1/g' | \
sort -u | \
wc -l | \
tr -d ' '

Solaris grep& egrepkeine -oOption haben, sedwird stattdessen verwendet.


1

Ein weiterer Ein-liner, ohne Zählen hyperGewindeKerne :

lscpu | awk -F ":" '/Core/ { c=$2; }; /Socket/ { print c*$2 }' 

0

Wenn Sie eine os-unabhängige Methode benötigen, funktioniert sie unter Windows und Linux. Verwenden Sie Python

$ python -c 'import multiprocessing as m; print m.cpu_count()'
16
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.