Ich führe den folgenden Befehl aus, um die Anzahl der Prozessoren / Kerne unter Linux abzurufen:
cat /proc/cpuinfo | grep processor | wc -l
Es funktioniert, sieht aber nicht elegant aus. Wie würden Sie vorschlagen, es zu verbessern?
Ich führe den folgenden Befehl aus, um die Anzahl der Prozessoren / Kerne unter Linux abzurufen:
cat /proc/cpuinfo | grep processor | wc -l
Es funktioniert, sieht aber nicht elegant aus. Wie würden Sie vorschlagen, es zu verbessern?
Antworten:
nproc
ist was Sie suchen.
Mehr hier: http://www.cyberciti.biz/faq/linux-get-number-of-cpus-core-command/
nproc
befindet sich auf meiner Ubuntu-VM, jedoch nicht auf meinem RedHat 5.5-basierten Computer.
nproc --all
für alle installierten Verarbeitungseinheiten. Ohne --all
werden nproc
nur Verarbeitungseinheiten angezeigt, die für den aktuellen Prozess verfügbar sind. Lesen Sie die Manpage für weitere Details. MMV.
Das einfachste Tool wird mit glibc geliefert und heißt getconf
:
$ getconf _NPROCESSORS_ONLN
4
nproc
dazu funktioniert dies (standardmäßig) auf Mac OS X.
_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.
Ich denke, die Methode, die Sie angeben, ist unter Linux die portabelste. Anstatt unnötiges Laichen cat
und wc
Prozesse zu erzeugen, können Sie es ein wenig verkürzen:
$ grep --count ^processor /proc/cpuinfo
2
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)
psrinfo -p
stattdessen
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 .
online
Datei, einfacher als das, was nproc tut)
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
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
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
& egrep
keine -o
Option haben, sed
wird stattdessen verwendet.