Sto eseguendo il seguente comando per ottenere il numero di processori / core in Linux:
cat /proc/cpuinfo | grep processor | wc -l
Funziona ma non sembra elegante. Come suggeriresti di migliorarlo?
Sto eseguendo il seguente comando per ottenere il numero di processori / core in Linux:
cat /proc/cpuinfo | grep processor | wc -l
Funziona ma non sembra elegante. Come suggeriresti di migliorarlo?
Risposte:
nproc è quello che stai cercando.
Maggiori informazioni qui: http://www.cyberciti.biz/faq/linux-get-number-of-cpus-core-command/
nprocè presente sulla mia macchina virtuale Ubuntu, ma non sulla mia macchina basata su RedHat 5.5.
nproc --allper tutte le unità di elaborazione installate. Senza --all, nprocmostra solo le unità di elaborazione disponibili per il processo corrente. Leggi la pagina man per maggiori dettagli. MMV.
Lo strumento più semplice viene fornito con glibc e si chiama getconf:
$ getconf _NPROCESSORS_ONLN
4
nproc, funziona (per impostazione predefinita) su mac os x.
_NPROCESSORS_ONLN(o qualsiasi altra cosa con cpu, proc, ecc.) È elencata nel suo output. Speravo che dal momento che è uno strumento posix funzionasse su Linux / Solaris, quindi non ho dovuto usare il branching.
Penso che il metodo che offri sia il più portabile su Linux. Invece di generare processi cate non necessari wc, puoi accorciarlo un po ':
$ grep --count ^processor /proc/cpuinfo
2
Se vuoi farlo in modo che funzioni su Linux e OS X, puoi fare:
CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)
psrinfo -pinvece usare
Sui kernel più recenti potresti anche usare l' /sys/devices/system/cpu/interfaccia per ottenere un po 'più di informazioni:
$ 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
Vedere i documenti ufficiali per ulteriori informazioni su cosa significano tutti questi.
onlinefile, più semplice di quello che fa nproc)
Quando qualcuno chiede "il numero di processori / core" vengono richieste 2 risposte. Il numero di "processori" sarebbe il numero fisico installato nei socket della macchina.
Il numero di "core" sarebbe core fisici. I core hyperthread (virtuali) non sarebbero inclusi (almeno secondo me). Come qualcuno che scrive molti programmi con pool di thread, devi davvero conoscere il conteggio dei core fisici rispetto ai core / hyperthread. Detto questo, puoi modificare il seguente script per ottenere le risposte di cui hai bisogno.
#!/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"
Il risultato su una macchina con 2 processori fisici modello Xeon X5650, ciascuno con 6 core fisici che supportano anche l'hyperthreading:
Type model name : Intel(R) Xeon(R) CPU X5650 @ 2.67GHz
Processors 2
Physical cores 12
Including hyperthreading cores 24
Su una macchina con 2 processori mdeol Xeon E5472 ciascuno con 4 core fisici che non supportano l'hyperthreading
Type model name : Intel(R) Xeon(R) CPU E5472 @ 3.00GHz
Processors 2
Physical cores 8
Including hyperthreading cores 8
Anche il lscpu(1)comando fornito dal progetto util-linux potrebbe essere utile:
$ 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
Questo è per coloro che vogliono un modo portatile per contare i core della cpu su * bsd, * nix o solaris (non sono stati testati su aix e hp-ux ma dovrebbero funzionare). Ha sempre funzionato per me.
dmesg | \
egrep 'cpu[. ]?[0-9]+' | \
sed 's/^.*\(cpu[. ]*[0-9]*\).*$/\1/g' | \
sort -u | \
wc -l | \
tr -d ' '
solaris grepe egrepnon hanno -oopzioni, quindi sedviene utilizzato al suo posto.