Quería saber cuántos núcleos tiene mi sistema, así que busqué la misma pregunta en Google. Tengo algunos comandos como el lscpu
comando. Cuando probé este comando, me dio el siguiente resultado:
$ 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: 1
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 23
Stepping: 10
CPU MHz: 1998.000
BogoMIPS: 5302.48
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 2048K
NUMA node0 CPU(s): 0-3
En particular, esta salida muestra:
- CPU (s): 4
- Núcleo (s) por zócalo: 4
- Familia de CPU: 6
¿Cuál de esos indica núcleos de un sistema Linux?
¿Hay algún otro comando para decir la cantidad de núcleos, o estoy asumiendo que está completamente equivocado?
Respuestas:
Tienes que mirar los zócalos y los núcleos por zócalo. En este caso, tiene 1 CPU física (socket) que tiene 4 núcleos (núcleos por socket).
fuente
nproc
me devuelven 4. Usandocat /proc/cpuinfo
obtengo 4, y por lo tanto parece que esta respuesta es incorrecta, al menos para mi situación.Para obtener una imagen completa, debe observar la cantidad de hilos por núcleo, núcleos por zócalo y zócalos . Si multiplica estos números obtendrá el número de CPU en su sistema.
Las CPU son lo que ves cuando corres
htop
(estas no equivalen a CPU físicas).Aquí hay un ejemplo de una máquina de escritorio:
Y un servidor:
La salida de
nproc
corresponde al recuento de CPU delscpu
. Para la máquina de escritorio anterior, esto debe coincidir con las 8 CPU informadas porlscpu
:La salida de
/proc/cpuinfo
debería coincidir con esta información, por ejemplo, en el sistema de escritorio anterior, podemos ver que hay 8 procesadores (CPU) y 4 núcleos (core id 0-3):El
cpu cores
reportado por/proc/cpuinfo
corresponde alCore(s) per socket
reportado porlscpu
. Para la máquina de escritorio anterior, esto debería coincidir con los 4 núcleos por socket informados por lscpu:Para responder específicamente a su pregunta, diga cuántos núcleos tiene multiplicando la cantidad de núcleos que tiene por zócalo por la cantidad de zócalos que tiene.
Para los sistemas de ejemplo sobre el escritorio tiene 4 núcleos:
Mientras el servidor tiene 16:
Otra utilidad útil es
dmidecode
qué salidas por información de socket. En el caso del sistema de servidor mencionado anteriormente, esperamos ver 8 núcleos por socket y 16 hilos por socket:El
lscpu
comando tiene una serie de opciones útiles que puede consultar, por ejemplo:Ver
man lscpu
para más detalles.En resumen:
fuente
lscpu --all --extended
sería una adición útil, pero ya no tengo acceso a estas máquinas en particular.lscpu --all --parse=CORE,SOCKET | grep -Ev "^#" | sort -u | wc -l
Socket(s) * Core(s) per socket
. Dado lo que acabo de decir, creoecho Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))
que sería mejor para que la gente pueda ver exactamente lo que se está multiplicando ...Puede obtener esta información por
nproc(1)
comandoNo requiere privilegios de root.
fuente
Para que la respuesta no sea confusa, debe comprender un par de conceptos simples de arquitectura de computadora:
Hay diferentes tipos de instrucciones. La lógica de decisión dentro de una CPU enviará las diferentes instrucciones a diferentes unidades de hardware . Por ejemplo, las instrucciones aritméticas son realmente realizadas por una ALU ( unidad aritmética / lógica), mientras que las instrucciones que cargan / almacenan desde la memoria son ejecutadas por algún tipo de unidad de memoria .
Un núcleo se refiere a un conjunto de hardware de ejecución real (es decir, cada núcleo tiene una ALU, una unidad de memoria, etc.)
Puede tener múltiples CPU que compartan un núcleo, esto se llama hyperthreading.
Un zócalo es la ranura física en la placa base en la que se inserta un chip. Este chip tiene una cierta cantidad de núcleos.
Ejemplos:
El ejemplo del OP:
Otro ejemplo:
Dos enchufes físicos, cada uno con un chip con 4 núcleos físicos, lo que hace un total de 8 núcleos. Dos subprocesos emiten instrucciones para cada núcleo (esta máquina tiene hyperthreading), lo que significa que debe haber dos CPU conectadas a cada núcleo, lo que hace un total de 8 * 2 = 16 CPU
La primera máquina puede ejecutar exactamente cuatro instrucciones en un momento dado, período. La segunda máquina puede ejecutar entre 8 y 16 instrucciones en cualquier momento dado: 16 se lograrán solo cuando cada par de CPU ejecute diferentes tipos de instrucciones y, por lo tanto, puedan compartir un núcleo sin esperar.
fuente
También puede usar el comando
cat /proc/cpuinfo
que generará una porción de datos para cada núcleo. Cada fragmento comienza con esta información:Los núcleos están numerados a partir de 0, por lo que si el último fragmento dice
processor : 3
como en este caso, su máquina tiene 4 núcleos.fuente
grep -c ^processor /proc/cpuinfo
(getconf es parte de glibc)
fuente
getconf _NPROCESSORS_CONF
te da la cantidad de procesadores configurados. También puede obtener el valor de ambas macros dentro de un código fuente en C, utilizando lasysconf()
función Escribaman sysconf
para más información.fuente
t 4
dmidecode? ¿Cómo se multiplican los recuentos y las líneas habilitadas? ¿Su ejemplo muestra 2 núcleos, o 6, o 12, o 24, o algún otro número?4
esprocessor
, consulte linux.die.net/man/8/dmidecode . Pero usarlo4
como argumento es una mala práctica.bash: dmidecode: command not found
Eso es todo lo que necesitas. Es el número de núcleos en línea, independientemente de si hyperthreading está activado o desactivado.
Otra forma fácil.
fuente
ls -d /sys/devices/system/cpu/cpu* | wc -l
mostró 49 porque hay un directoriocpuidle
entre loscpuN
directorios.Encontré de esta manera:
fuente
Solo quiero agregar información a la respuesta de @htaccess.
En CentOS 6.x, dmidecode no genera información de conteo de Core / Thread, y en realidad considera 'CPU' como 'CPU' o 'Core' en lscpu, no 'socket'.
fuente
La familia de CPU es irrelevante aquí.
En su caso, tiene un total de 4 núcleos completos.
Lo que también puede ser importante es "Hilo (s) por núcleo". Pero tienes 1, así que no en tu caso.
fuente
Cores = Cores per socket X Sockets
, vea la descripción en mi respuesta.Una forma sencilla de calcular la cantidad de CPU es emitiendo los siguientes comandos:
fuente