¿Cuántas CPU físicas tiene mi máquina?

¿Cuántas CPU físicas tiene mi máquina?

Estoy un poco confundido acerca de la cantidad de CPU que tiene mi servidor.

Está funcionando en Intel(R) Xeon(R) Gold 6242R CPU @ 3.10GHzel que segúndocumentos oficiales de IntelContiene 20 núcleos físicos.

El problema aquí es la salida del lscpucomando (algunas filas filtradas):

CPU(s):                          80
On-line CPU(s) list:             0-79
Thread(s) per core:              2
Core(s) per socket:              20
Socket(s):                       2
NUMA node(s):                    2
Model name:                      Intel(R) Xeon(R) Gold 6242R CPU @ 3.10GHz
NUMA node0 CPU(s):               0-19,40-59
NUMA node1 CPU(s):               20-39,60-79

Por lo que tengo entendido actual physical cores = CPU(s) / thread(s) per core, obtengo 40, que es el doble de lo que esperaba.

¿Alguien puede explicarme qué está pasando aquí y qué CPU(s), thread(s) per core, core(s) per socket, socet(s)significa exactamente?

Respuesta1

  • Socketsrepresenta cuántas CPU físicas hay en el sistema.

  • Cores per socketes cuántos núcleos de CPU completos (incluida la lógica de carga/decodificación) hay por CPU física.

  • Threads per corees cuántos subprocesos se pueden programar en un solo núcleo (HyperThreading). En pocas palabras, el hardware de la CPU que se utilizaantesla ejecución real de código se duplica, lo que permite que la CPU tenga múltiples tareas diferentes listas para su ejecución. Permite a la CPU buscar/decodificar instrucciones antes de que lleguen al núcleo de ejecución de la CPU. Previene o reduceparada de tubería.

  • CPUsignifica "entidades programables", esta es la cantidad de colas de ejecución que tendrá el sistema operativo, por lo que seríasockets x cores per socket x threads per core

En su caso, tiene 2 CPU físicas, cada una de las cuales tiene 20 núcleos, cada una de las cuales puede ejecutar 2 subprocesos (hyperthreading). Entonces 2x20x2 = 80, ¿cuál es el número de CPUsmostrados?

Respuesta2

La confusión proviene de un detalle muy simple que puede no quedar claro en el lscpucomando de información que le muestra.

La cuestión es que su servidor en realidad tiene 2 Intel(R) Xeon(R) Gold 6242R CPUs, que se menciona en la Socket(s)fila.

Como indica la documentación de Intel, cada una de esas CPU contiene 20 núcleos físicos (la Core(s) per socketlínea), lo que da un total de 40 núcleos físicos.

Cada uno de esos núcleos es capaz de ejecutar 2 subprocesos "simultáneamente" (la Thread(s) per corelínea).

Entonces: 2 Intel Xeon, 20 núcleos físicos cada uno, 2 hilos cada núcleo, da un total de 80 "unidades que pueden ejecutar un proceso" o "CPU"

Respuesta3

La idea de una CPU es un poco abstracta ahora, y esto comenzó con el hyperthreading (finales de los 90) y luego la serie Intel Core (principios de los 2000). Antes de eso, definitivamente tenías sistemas de múltiples CPU, pero todos eran múltiples CPU físicas.

Pero con el hyperthreading y las CPU de un solo núcleo, el número físico de CPU es diferente del número lógico de CPU que ve el código en ejecución en las CPU.

Socket(s):                       2

Tienes 2 CPU físicas como en "algo con disipador de calor conectado a tu placa base"

Core(s) per socket:              20

Cada CPU física tiene 20 núcleos, que parecen y en su mayoría funcionan como CPU independientes para Linux. Los núcleos comparten al menos el mismo caché L3, probablemente caché L2, y probablemente tengan su propio caché L1, por lo que no son tan eficaces como los sockets individuales con su propio L3/L2/L1, pero casi lo logran.

Como ese es cada zócalo, tienes 2 * 20 = 40.

Thread(s) per core:              2

Cada núcleo tiene 2 subprocesos SMT, que se implementan mediante la microarquitectura de su CPU para que básicamente parezcan CPU independientes para Linux.

No serán tan rápidos como los núcleos independientes reales.

Los subprocesos en la microarquitectura intentan tomar etapas de canalización actualmente no utilizadas de los núcleos, pero podrían tener que terminar esperando si están ocupadas, y las CPU ya intentan mantenerse muy ocupadas, por lo que nuevamente, 2 subprocesos en 2 núcleos no equivalen en absoluto a 4 núcleos, pero es algo que puede hacer que el código se ejecute un poco más rápido.

Tenga en cuenta que Spectre y vulnerabilidades similares son mucho más posibles entre subprocesos que entre núcleos o sockets porque los recursos centrales se comparten.

De todos modos, dado que eso es por núcleo y también por socket, eso es 2 * 20 * 2, lo que te da:

CPU(s):                          80

Respuesta4

Su servidor utiliza 2 "Chips de procesador" (en los 2 zócalos), que tienen 20 núcleos físicos cada uno.

Y cada núcleo puede procesar 2 subprocesos.

Es por eso que muestra 2 (Chips de procesador) * 20 (Núcleos por parte) * 2 (Subprocesos que cada núcleo puede procesar) = 80 CPU

En este caso, CPU significa "entidad programable", también conocida como. la cantidad de hilos que puede ejecutar la máquina.

información relacionada