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.