GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo saber el número de núcleos de un sistema en Linux?

Para obtener una imagen completa, debe observar la cantidad de subprocesos por núcleo, núcleos por zócalo y zócalos. Si multiplica estos números, obtendrá la cantidad de CPU en su sistema.

CPU =Subprocesos por núcleo X núcleos por socket X sockets

Las CPU son lo que ves cuando ejecutas htop (estos no equivalen a CPU físicas).

Aquí hay un ejemplo de una máquina de escritorio:

$ lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s):                8
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1

Y un servidor:

$ lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s):                32
Thread(s) per core:    2
Core(s) per socket:    8
Socket(s):             2

La salida de nproc corresponde al conteo de CPU de lscpu . Para la máquina de escritorio anterior, esto debería coincidir con las 8 CPU informadas por lscpu :

$ nproc --all
8

La salida de /proc/cpuinfo debe coincidir con esta información, por ejemplo, en el sistema de escritorio anterior podemos ver que hay 8 procesadores (CPU) y 4 núcleos (ID de núcleo 0-3):

$ grep -E 'processor|core id' /proc/cpuinfo
processor   : 0
core id     : 0
processor   : 1
core id     : 0
processor   : 2
core id     : 1
processor   : 3
core id     : 1
processor   : 4
core id     : 2
processor   : 5
core id     : 2
processor   : 6
core id     : 3
processor   : 7
core id     : 3

Los cpu cores denunciado por /proc/cpuinfo corresponde al Core(s) per socket denunciado por lscpu . Para la máquina de escritorio anterior, esto debería coincidir con los 4 núcleos por socket informados por lscpu:

$ grep -m 1 'cpu cores' /proc/cpuinfo
cpu cores   : 4

Para responder específicamente a su pregunta, diga cuántos núcleos tiene multiplicando la cantidad de núcleos que tiene por socket por la cantidad de sockets que tiene.

Núcleos =Núcleos por socket X Sockets

Para los sistemas de ejemplo anteriores, el escritorio tiene 4 núcleos:

$ echo "Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))"
Cores = 4

Mientras que el servidor tiene 16:

$ echo "Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))"
Cores = 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 subprocesos por socket:

$ sudo dmidecode -t 4 | grep -E 'Socket Designation|Count'
    Socket Designation: CPU1
    Core Count: 8
    Thread Count: 16
    Socket Designation: CPU2
    Core Count: 8
    Thread Count: 16

El lscpu El comando tiene una serie de opciones útiles que le gustaría consultar, por ejemplo:

$ lscpu --all --extended
$ lscpu --all --parse=CPU,SOCKET,CORE | grep -v '^#'

Ver man lscpu para más detalles.

En resumen:

  • Debe tener en cuenta los sockets, los núcleos y los subprocesos
  • Debe tener cuidado con el término CPU, ya que significa diferentes cosas en diferentes contextos

Tienes que mirar sockets y núcleos por socket. En este caso, tiene 1 CPU física (zócalo) que tiene 4 núcleos (núcleos por zócalo).


Puede obtener esta información por nproc(1) comando

$ nproc --all
12

No requiere privilegios de root.


Linux
  1. Cómo configurar la virtualización en Redhat Linux

  2. Cómo aumentar el número de inodo de disco en Linux

  3. Cómo configurar o cambiar el nombre de host del sistema en Linux

  4. cómo saber el número de interrupción/GPIO para un pin específico en Linux

  5. Linux:¿cómo saber qué procesos están anclados a qué núcleo?

Cómo desfragmentar su sistema Linux

Cómo encontrar el número de núcleos de CPU desde la línea de comandos en Linux

Cómo obtener la cantidad de procesadores/núcleos en Linux

Cómo saber si su sistema tiene un puerto USB 3.0 en Linux [Consejo rápido]

Cómo hacer ping a un número de puerto en Linux

Cómo enumerar servicios en Linux