Número de procesadores / núcleos en la línea de comandos


Respuestas:


138

11
Agradable, pero no tan ubicuo como / proc / cpuinfo. nprocestá en mi máquina virtual ubuntu, pero no en mi máquina basada en RedHat 5.5.
Digital Trauma

8
Asegúrese nproc --allde todas las unidades de procesamiento instaladas. Sin --all, nprocsolo muestra las Unidades de procesamiento disponibles para el proceso actual. Lea la página del manual para obtener más detalles. MMV.
JamesThomasMoon1979

96

La herramienta más simple viene con glibc y se llama getconf:

$ getconf _NPROCESSORS_ONLN
4


2
a diferencia de nprocesto, esto funciona (por defecto) en mac os x.
Alec Jacobson

Desafortunadamente, aunque esta utilidad está disponible en Solaris, _NPROCESSORS_ONLN(o cualquier cosa con cpu, proc, etc.) aparece en su salida. Tenía la esperanza de que, dado que es una herramienta posix, funcionaría en Linux / Solaris para no tener que usar la ramificación.
Brian Vandenberg

39

Creo que el método que das es el más portátil en Linux. En lugar de desove innecesaria caty wcprocesos, se puede acortar un poco:

$ grep --count ^processor /proc/cpuinfo
2

25

Si desea hacer esto para que funcione en Linux y OS X, puede hacer:

CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)

Buen

2
En Solaris, debe usar psrinfo -pen su lugar
mems

14

En los núcleos más nuevos, también podría usar la /sys/devices/system/cpu/interfaz para obtener un poco más de información:

$ 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

Consulte los documentos oficiales para obtener más información sobre lo que significan todos estos.


2
nproc usa esto, principalmente ($ OMP_NUM_THREADS luego readdir sysfs). Creo que esta es la mejor interfaz.
Tobu

2
Y getconf también se basa en esta interfaz (el onlinearchivo, más simple que lo que hace nproc)
Tobu

6

Cuando alguien pregunta "el número de procesadores / núcleos", se solicitan 2 respuestas. El número de "procesadores" sería el número físico instalado en los zócalos de la máquina.

El número de "núcleos" sería núcleos físicos. Los núcleos (virtuales) con hiperproceso no se incluirían (al menos en mi opinión). Como alguien que escribe muchos programas con grupos de subprocesos, realmente necesita saber el recuento de núcleos físicos frente a núcleos / hyperthreads. Dicho esto, puede modificar el siguiente script para obtener las respuestas que necesita.

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

El resultado en una máquina con 2 procesadores físicos modelo Xeon X5650, cada uno con 6 núcleos físicos que también admiten hyperthreading:

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

En una máquina con 2 procesadores mdeol Xeon E5472 cada uno con 4 núcleos físicos que no admiten hyperthreading

Type model name : Intel(R) Xeon(R) CPU           E5472  @ 3.00GHz
Processors 2
Physical cores 8
Including hyperthreading cores 8

Esta es la respuesta más completa que me dio la información que estaba buscando.
WoodenToaster

4

El lscpu(1)comando proporcionado por el proyecto util-linux también puede ser útil:

$ 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

Esto es para aquellos que desean una forma portátil de contar núcleos de CPU en * bsd, * nix o solaris (no lo he probado en aix y hp-ux, pero debería funcionar). Siempre me ha funcionado.

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

solaris grepy egrepno tienen -oopción, por lo que sedse usa en su lugar.


1

Otro one-liner, sin contar los núcleos hiperprocesados :

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

0

Si necesita un método independiente del sistema operativo, funciona en Windows y Linux. Usa Python

$ python -c 'import multiprocessing as m; print m.cpu_count()'
16
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.