Número de procesadores en / proc / cpuinfo

26

Mientras estaba aprendiendo sobre la carga de la CPU, llegué a saber que depende de la cantidad de núcleos. Si tengo 2 núcleos, la carga 2 dará una utilización del 100% de la CPU.

Así que traté de averiguar los núcleos. (Ya sé que el sistema tiene 2 núcleos, 4 subprocesos, así que 2 núcleos virtuales. Consulte aquí sobre el procesador ). Así que corrí, lo cat /proc/cpuinfo que me dio

processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 69
model name  : Intel(R) Core(TM) i7-4500U CPU @ 1.80GHz
stepping    : 1
microcode   : 0x17
cpu MHz     : 774.000
cache size  : 4096 KB
physical id : 0
siblings    : 4
core id     : 0
cpu cores   : 2
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid
bogomips    : 3591.40
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

processor   : 1
vendor_id   : GenuineIntel
cpu family  : 6
model       : 69
model name  : Intel(R) Core(TM) i7-4500U CPU @ 1.80GHz
stepping    : 1
microcode   : 0x17
cpu MHz     : 1600.000
cache size  : 4096 KB
physical id : 0
siblings    : 4
core id     : 0
cpu cores   : 2
apicid      : 1
initial apicid  : 1
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid
bogomips    : 3591.40
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

processor   : 2
vendor_id   : GenuineIntel
cpu family  : 6
model       : 69
model name  : Intel(R) Core(TM) i7-4500U CPU @ 1.80GHz
stepping    : 1
microcode   : 0x17
cpu MHz     : 800.000
cache size  : 4096 KB
physical id : 0
siblings    : 4
core id     : 1
cpu cores   : 2
apicid      : 2
initial apicid  : 2
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid
bogomips    : 3591.40
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

processor   : 3
vendor_id   : GenuineIntel
cpu family  : 6
model       : 69
model name  : Intel(R) Core(TM) i7-4500U CPU @ 1.80GHz
stepping    : 1
microcode   : 0x17
cpu MHz     : 774.000
cache size  : 4096 KB
physical id : 0
siblings    : 4
core id     : 1
cpu cores   : 2
apicid      : 3
initial apicid  : 3
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid
bogomips    : 3591.40
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

Ahora estoy totalmente confundido. Muestra 4 procesadores, con 2 núcleos de CPU. ¿Alguien puede explicar esta salida?

Una vez que la carga de mi CPU era 3.70, ¿es esta la carga máxima? Aún en ese momento, la CPU estaba en <50%.

¿Qué pasa con turbo boost? ¿Todos los núcleos están potenciados por turbo o solo son físicos?

¿Algún método en Ubuntu para obtener la frecuencia actual de la CPU para ver si el procesador está en turbo boost o no?

La carga fue a 3.70 aproximadamente 100%. Pero el uso de la CPU no fue del 100% debido al tiempo de respuesta de IO. Esto no significa que el dispositivo IO estará a la velocidad máxima, pero el dispositivo io estará 100% ocupado, lo que a veces afecta las aplicaciones que usan IO, por ejemplo: la música puede romperse.

Madhurendra Sachan
fuente
2
Hyper threading es la razón por la que ves 4 en lugar de 2.
derobert
1
Tanto la documentación como cpuinfo le dicen que tiene dos núcleos de CPU. Los procesadores 0 y 1 están en el núcleo 0 mientras que los procesadores 2 y 3 están en el núcleo 1 (mira la línea core id). El physical idte da el chip (supongo). Aquí, es 0 para todos los procesadores, por lo que solo tiene un chip.
lgeorget
Entonces, ¿qué es la carga del procesador al 100% ... 2 o 4?
Madhurendra Sachan
¿Qué es el procesador aquí?
Madhurendra Sachan
Tenga en cuenta que la definición de subproceso de Intel ("Un subproceso, o subproceso de ejecución, es un término de software para la secuencia básica de instrucciones ordenada que puede pasar o procesarse por un solo núcleo de CPU ") puede hacer pensar que con 2 núcleos y 4 hilos, como se indica en las especificaciones, se ejecutan 2x4 = 8 hilos De hecho, tiene 4 subprocesos en total y 2 núcleos se parecen a 4. La definición de la tecnología Intel® Hyper-Threading es más clara: "entrega dos subprocesos de procesamiento por núcleo físico " y explica mejor que su sistema vea 4 procesadores / hermanos de 2 núcleos de CPU montados en un chip
XavierStuvw

Respuestas:

35

Las palabras "CPU", "procesador" y "núcleo" se utilizan de maneras algo confusas. Se refieren a la arquitectura del procesador. Un núcleo es la unidad independiente más pequeña que implementa un procesador de uso general; un procesador es un conjunto de núcleos (en algunos sistemas ARM, un procesador es un conjunto de grupos que son en sí mismos conjuntos de núcleos). Un chip puede contener uno o más procesadores (los chips x86 contienen un único procesador, en este sentido del procesador de textos ).

Hyperthreading significa que algunas partes de un núcleo están duplicadas. Un núcleo con hyperthreading a veces se presenta como un conjunto de dos "núcleos virtuales", lo que significa que no cada núcleo es virtual, sino que el plural es virtual porque en realidad no son núcleos separados y a veces tendrán que esperar mientras el otro núcleo está haciendo uso de una parte compartida.

En lo que respecta al software, solo hay un concepto que es útil en casi todas partes: la noción de hilos paralelos de ejecución. Entonces, en la mayoría de los manuales de software, los términos CPU y procesador se usan para referirse a cualquier pieza de hardware que ejecute el código del programa. En términos de hardware, esto significa un núcleo o un núcleo virtual con hyperthreading.

Por lo tanto, le topmuestra 4 CPU, porque puede tener 4 hilos ejecutándose al mismo tiempo. /proc/cpuinfotiene 4 entradas, una para cada CPU (en ese sentido). Los processornúmeros (que son el número de las entradas ) corresponden a estos 4 hilos.cpuNUMBER/sys/devices/system/cpu

/proc/cpuinfo es uno de los pocos lugares donde obtiene información sobre qué hardware implementa estos hilos de ejecución:

physical id : 0
siblings    : 4
core id     : 0
cpu cores   : 2

significa que cpu0es uno de los 4 hilos dentro del componente físico (procesador) número 0, y que está en el núcleo 0 entre 2 en este procesador.

Gilles 'SO- deja de ser malvado'
fuente
Buena explicación, dejó 3 preguntas Once my cpu load was 3.70, Is this maximum load? Still at that time cpu was at <50%., What about turbo boost ? Are all cores are turbo boosted or only physical ?yHow to check frequency.
Madhurendra Sachan
@MADTerry ¿Qué programa informó que la "carga de la CPU fue 3.70", en qué términos exactamente? ¿Te refieres al promedio de carga? ¿Qué quiere decir con "CPU estaba en <50%"? Con respecto a Turbo Boost, no estoy familiarizado con eso, pero no veo por qué no se impulsarían todos. Todos los núcleos son físicos, a menos que esté funcionando en una máquina virtual: como explico en mi respuesta, en "núcleos virtuales", no son los núcleos los que son virtuales, es su separación.
Gilles 'SO- deja de ser malvado'
carga media uptime.por CPU quise decir uso de CPU. Comprendí por qué. Pero, ¿cómo verificar la frecuencia o verificar si la CPU está impulsada por turbo?
Madhurendra Sachan
También diría que, en términos de software de alto nivel, está bastante interesado en los procesos (ver top, uptime). La unidad de hardware que se ocupa de los procesos es, en última instancia, una cuestión de software de bajo nivel (compilación, sistema operativo). El informe de cpuinfo resume el hecho de que cada procesador físico (uno de varios cpu en un dado) puede ampliar sus poderes informáticos mediante hazañas tecnológicas como el subprocesamiento múltiple. Se considerará "cualquier cosa" que pueda encargarse de un proceso a la vez como procesador. En el ojo contable de cpuinfo, las capacidades del dispositivo conducen al recuento total de "procesadores"
XavierStuvw
13

Solo respondiendo tu primera pregunta. En la salida de cat /proc/cpuinfopuede ver la siguiente información: -

physical id : 0
siblings    : 4
core id     : 0
cpu cores   : 2

Puedes ver el recuento de siblings is 4y cpu cores is 2. cpu coressiendo 2 es el número total de núcleos en el procesador que puede verificarse a partir de la especificación proporcionada en la URL de Intel que ha proporcionado. De manera similar, siblingses el determinado por el número de subprocesos que proporciona Intel HTT.

Del mismo modo, para la identificación física es lo 0que indica que solo hay un chip de procesador y para los identificadores de núcleo puede ver 0 and 1que hay 2 núcleos en el procesador.

Actualización: Agregar respuestas a las otras preguntas.

¿Qué pasa con turbo boost? ¿Todos los núcleos tienen turboalimentación o son solo físicos?

Bueno, diré que todos los núcleos activos están potenciados por turbo. Hola amigo, deberías haber consultado los ejemplos de nuestra querida Wikipedia . Explicado con cálculos también.

Any method in ubuntu to get current cpu freq. if processor is on turbo boost or not.

Turbo boost o no, puedes ver los detalles de la frecuencia en la salida de lscpu. Y para una salida refinada: -

lscpu | grep Hz
principiante
fuente
Respuesta corta y rápida, pero ¿puedes explicar los 3 restantes?
Madhurendra Sachan
@MADTerry gracias, pero los otros que no tengo claro, investigarán y editarán mi respuesta. Mientras tanto, veamos si alguien más aparece.
principiante
1
+1 para lscpucomando.
Arda
8

Puedes probar esto en la terminal:

sudo lscpu

Esto le dará una visión general de su rasgo físico de la CPU. En cuanto a turbo boost o no, esto es puramente control de hardware que el sistema operativo en sí mismo, por lo que a menos que Intel tenga controladores específicos para Linux que puedan ajustar la velocidad de su procesador, no hay un cable sólido para verificar el estado del turbo boost (a menos que haya un código de comando para Consulte otros foros si hay alguna pista con respecto a su pregunta).

En cuanto a mí, esto es lo que obtengo cuando escribo el comando anterior. Mi AMD dijo que es de cuatro núcleos, pero mi núcleo físico enumerado aquí es solo 2, con 2 subprocesos por núcleo (agrega hasta 4 núcleos). Estoy usando el procesador AMD A10 APU 5750m.

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:    2
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             AuthenticAMD
CPU family:            21
Model:                 19
Stepping:              1
CPU MHz:               2500.000
BogoMIPS:              4990.51
Virtualization:        AMD-V
L1d cache:             16K
L1i cache:             64K
L2 cache:              2048K
NUMA node0 CPU(s):     0-3
user220402
fuente
0

La carga del sistema y el% de CPU son dos formas diferentes de medir cómo se usa la potencia de la CPU.

  • carga del sistema: cuántos procesos por CPU han estado en estado "listo" - promediados durante algún tiempo. Hasta 1 * cpu (en su caso hasta 4) el sistema se considera casi inactivo (compárelo con un supermercado en el que, en promedio, solo un cliente espera en cada proceso de pago). Probablemente no notará ningún retraso de hasta 2 * cpu (en su caso 8).
  • cpu%: cuánto tiempo los cpus hacen el trabajo real ejecutando un proceso. Es como el punto de vista de los cajeros, o más bien el de su supervisor, quieren que estén ocupados todo el tiempo.

Ambas medidas están relacionadas pero de ninguna manera son idénticas.

Guntbert
fuente
No pregunté a los diferentes. Ya lo leí en artículos. De todos modos su respuesta contradice la respuesta de Gilles.
Madhurendra Sachan
¿Dónde ves una contradicción?
guntbert