Nombre de processeurs / cœurs en ligne de commande

J'exécute la commande suivante pour obtenir le nombre de processeurs / cœurs sous Linux:

cat /proc/cpuinfo | grep processor | wc -l

Ça marche mais ça n'a pas l'air élégant. Comment suggéreriez-vous l'améliorer ?

102
demandé sur Michael 2013-10-27 19:10:30

10 réponses

nproc est ce que vous cherchez.

Plus de détails ici : http://www.cyberciti.biz/faq/linux-get-number-of-cpus-core-command/

135
répondu pax162 2014-04-09 05:31:38

L'outil le plus simple est fourni avec la glibc et s'appelle getconf:

$ getconf _NPROCESSORS_ONLN
4
92
répondu Harald Hoyer 2014-08-29 09:11:35

Je pense que la méthode que vous donnez est la plus portable sur Linux. Au lieu de générer des processus cat et wc inutiles, vous pouvez les raccourcir un peu:

$ grep --count ^processor /proc/cpuinfo
2
39
répondu Digital Trauma 2015-10-28 16:52:38

Si vous voulez faire cela pour que cela fonctionne sur linux et OS X, vous pouvez faire:

CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)
22
répondu tim_yates 2014-05-25 22:12:59

Sur les noyaux plus récents, vous pouvez également utiliser l'interface /sys/devices/system/cpu/ pour obtenir un peu plus d'informations:

$ 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

Voir les docs officielles pour plus d'informations sur ce que tout cela signifie.

14
répondu Digital Trauma 2014-05-25 20:58:59

Quand quelqu'un demande "le nombre de processeurs/cœurs", 2 réponses sont demandées. Le nombre de "processeurs" serait le nombre physique installé dans les sockets de la machine.

Le nombre de "cœurs" serait des cœurs physiques. Les cœurs hyperthread (virtuels) ne seraient pas inclus (du moins à mon avis). Comme quelqu'un qui écrit beaucoup de programmes avec des pools de threads, vous avez vraiment besoin de connaître le nombre de cœurs physiques vs cœurs/hyperthreads. Cela dit, Vous pouvez modifier le script suivant pour obtenir les réponses dont vous avez besoin.

#!/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"

Le résultat sur une machine avec 2 processeurs physiques modèle Xeon X5650 chacun avec 6 cœurs physiques qui prennent également en charge l'hyperthreading:

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

Sur une machine avec 2 processeurs mdeol Xeon E5472 chacun avec 4 cœurs physiques qui ne prennent pas en charge l'hyperthreading

Type model name : Intel(R) Xeon(R) CPU           E5472  @ 3.00GHz
Processors 2
Physical cores 8
Including hyperthreading cores 8
6
répondu rabinnh 2016-10-18 12:29:10

La commande lscpu(1) fournie par le projet util-linux peut également être 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
4
répondu mtk 2015-04-21 16:23:18

C'est pour ceux qui veulent un moyen portable de compter les cœurs de processeur sur * bsd ,* Nix ou solaris (n'ont pas testé sur aix et hp-ux mais devraient fonctionner). Il a toujours travaillé pour moi.

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

Solaris grep & egrep Ne pas avoir l'option -o donc sed est utilisé à la place.

1
répondu gwillie 2015-07-31 06:38:09

Un Autre one-liner, sans comptage hyper-thread cœurs:

lscpu | awk -F ":" '/Core/ { c=$2; }; /Socket/ { print c*$2 }' 
1
répondu Marco 2015-10-30 09:27:47

Si vous avez besoin d'une méthode indépendante du système d'exploitation, fonctionne sous Windows et Linux. Utiliser python

$ python -c 'import multiprocessing as m; print m.cpu_count()'
16
0
répondu Meitham 2016-07-27 13:26:15