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.
CPU = Subprocesos por núcleo X núcleos por socket X sockets
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:
$ 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 recuento de CPU de lscpu
. Para la máquina de escritorio anterior, esto debe coincidir con las 8 CPU informadas por lscpu
:
$ nproc --all
8
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):
$ 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
El cpu cores
reportado por /proc/cpuinfo
corresponde al Core(s) per socket
reportado 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 zócalo por la cantidad de zócalos que tiene.
Núcleos = núcleos por zócalo X zócalos
Para los sistemas de ejemplo sobre 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 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 hilos 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
comando tiene una serie de opciones útiles que puede 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 enchufes, núcleos e hilos
- Debe tener cuidado con el término CPU, ya que significa diferentes cosas en diferentes contextos.