Quería saber cuántos núcleos tiene mi sistema, así que busqué la misma pregunta en Google. Tengo algunos comandos como el lscpucomando. 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
nprocme devuelven 4. Usandocat /proc/cpuinfoobtengo 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
nproccorresponde 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/cpuinfodeberí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 coresreportado por/proc/cpuinfocorresponde alCore(s) per socketreportado 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
dmidecodequé 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
lscpucomando tiene una serie de opciones útiles que puede consultar, por ejemplo:Ver
man lscpupara más detalles.En resumen:
fuente
lscpu --all --extendedserí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 -lSocket(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/cpuinfoque 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 : 3como en este caso, su máquina tiene 4 núcleos.fuente
grep -c ^processor /proc/cpuinfo(getconf es parte de glibc)
fuente
getconf _NPROCESSORS_CONFte 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 sysconfpara más información.fuente
t 4dmidecode? ¿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?4esprocessor, consulte linux.die.net/man/8/dmidecode . Pero usarlo4como argumento es una mala práctica.bash: dmidecode: command not foundEso 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 -lmostró 49 porque hay un directoriocpuidleentre loscpuNdirectorios.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