Numero di processori / core nella riga di comando


Risposte:


138

nproc è quello che stai cercando.

Maggiori informazioni qui: http://www.cyberciti.biz/faq/linux-get-number-of-cpus-core-command/


11
Bello, ma non così onnipresente come / proc / cpuinfo. nprocè presente sulla mia macchina virtuale Ubuntu, ma non sulla mia macchina basata su RedHat 5.5.
Digital Trauma

8
Assicurati di farlo 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.
JamesThomasMoon1979

96

Lo strumento più semplice viene fornito con glibc e si chiama getconf:

$ getconf _NPROCESSORS_ONLN
4

8

2
diversamente nproc, funziona (per impostazione predefinita) su mac os x.
Alec Jacobson

Sfortunatamente, sebbene questa utilità sia disponibile su Solaris, _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.
Brian Vandenberg,

39

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

25

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)

bella sceneggiatura portatile :)
mircealungu

2
Su Solaris devi psrinfo -pinvece usare
mems

14

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.


2
nproc usa questo, principalmente ($ OMP_NUM_THREADS quindi readdir sysfs). Penso che questa sia l'interfaccia migliore.
Tobu

2
E getconf si basa anche su questa interfaccia (il onlinefile, più semplice di quello che fa nproc)
Tobu

6

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

Questa è la risposta più esauriente che mi ha dato le informazioni che stavo cercando.
tostapane in legno

4

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

1

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.


1

Un altro one-liner, senza contare i core hyper-threaded :

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

0

Se hai bisogno di un metodo indipendente dal sistema operativo, funziona su Windows e Linux. Usa python

$ python -c 'import multiprocessing as m; print m.cpu_count()'
16
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.