Escribí una pieza de software multiproceso que realiza muchas simulaciones al día. Esta es una tarea muy intensiva de CPU, y he estado ejecutando este programa en servicios en la nube, generalmente en configuraciones como 1 GB por núcleo.
Estoy ejecutando CentOS 6.7, y /proc/cpuinfo
me da que mis cuatro núcleos VPS son 2.5GHz.
processor : 3
vendor_id : GenuineIntel
cpu family : 6
model : 63
model name : Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz
stepping : 2
microcode : 1
cpu MHz : 2499.992
cache size : 30720 KB
physical id : 3
siblings : 1
core id : 0
cpu cores : 1
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 mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good unfair_spinlock pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm arat xsaveopt fsgsbase bmi1 avx2 smep bmi2 erms invpcid
bogomips : 4999.98
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management:
Con un aumento de los tipos de cambio, mi VPS comenzó a ser más costoso, y he llegado a un "gran acuerdo" en los servidores de metal desnudo usados.
Compré cuatro HP DL580 G5 , con cuatro Intel Xeon X7350 cada uno. Básicamente, cada máquina tiene 16x núcleos de 2.93GHz y 16GB, para mantener cosas como mi nube VPS .
processor : 15
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Intel(R) Xeon(R) CPU X7350 @ 2.93GHz
stepping : 11
microcode : 187
cpu MHz : 1600.002
cache size : 4096 KB
physical id : 6
siblings : 4
core id : 3
cpu cores : 4
apicid : 27
initial apicid : 27
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca lahf_lm dts tpr_shadow vnmi flexpriority
bogomips : 5866.96
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management:
Esencialmente, parecía mucho, ya que podía dejar de usar VPS para realizar estos trabajos por lotes. Ahora son las cosas raras ...
- En los VPS, he estado ejecutando 1.25 hilos por núcleo, tal como lo he estado haciendo en el metal desnudo. (El hilo adicional de 0.25 es para compensar el tiempo de inactividad causado por el uso de la red).
- En mi VPS, usando un total de 44x núcleos de 2.5GHz, obtengo casi 900 simulaciones por minuto.
- En mi DL580, usando un total de 64x 2.93GHz núcleos, solo obtengo 300 simulaciones por minuto.
Entiendo que el DL580 tiene un procesador más antiguo. Pero si estoy ejecutando un subproceso por núcleo y el servidor bare metal tiene un núcleo más rápido, ¿por qué funciona peor que mi VPS?
No tengo ningún cambio de memoria en ninguno de los servidores.
TOP dice que mis procesadores funcionan al 100%. Tengo una carga promedio de 18 (5 en VPS).
¿Va a ser así o me estoy perdiendo algo?
Ejecutar lscpu me da 1.6GHz en mi servidor de metal desnudo. Esto se vio en el /proc/cpuinfo
también.
¿Es correcta esta información o está vinculada a una administración de energía incorrecta?
[BARE METAL] $ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 16
On-line CPU(s) list: 0-15
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 4
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 15
Stepping: 11
**CPU MHz: 1600.002**
BogoMIPS: 5984.30
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 4096K
NUMA node0 CPU(s): 0-15
[VPS] $ 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: 1
Socket(s): 4
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 63
Stepping: 2
**CPU MHz: 2499.992**
BogoMIPS: 4999.98
Hypervisor vendor: KVM
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 30720K
NUMA node0 CPU(s): 0-3
fuente
Respuestas:
Los avances del procesador, la velocidad del reloj y los cálculos de IPC pueden hacer que sea casi imposible intentar comparar razonablemente las CPU de una década con las modernas. No solo van a variar las instrucciones por ciclo, sino que los procesadores más nuevos tienen conjuntos de instrucciones dedicados a cálculos complejos (Intel ha agregado AES-NI como ejemplo), la velocidad del reloj ya no es un comparador razonable, debido a estos factores (mencioné multi-core vs hyperthreading ...). Con suficiente tiempo y paciencia, sin duda podría descubrir cuántos procesos más antiguos equivalen a 1 proceso más nuevo, pero los cálculos terminarán diciendo que es más barato y más rápido comprar una nueva CPU.
fuente
No quiero sonar terrible enfatizando algo que debería ser obvio aquí, pero está comparando un procesador de servidor de gama alta de 2014 con un procesador de servidor de gama alta de 2007 .
No creo que esto requiera mucha más explicación.
Hay una razón por la cual un HP ProLiant DL580 G5 está disponible tan barato hoy . Eran grandes, lentos y carecen de muchas características que son deseables en servidores más modernos. Vendí mi último en 2009 . Fue una mala compra, y sería mejor que recibiera una CPU de las familias de CPU Nehalem o Westmere, si se ve obligado a comprar equipos usados.
Además, los servidores que compró son muy ineficientes en términos de consumo de energía, por lo que su funcionamiento será costoso.
Parece que sus servidores físicos están funcionando en un modo de ahorro de energía que redujo la velocidad del reloj de su CPU. Deberá ingresar al BIOS (presione F9 en el arranque) y restablecer el servidor a los valores predeterminados de fábrica (¿ quién sabe qué más se modificó de manera predeterminada? )
fuente
float d = a + b*c
, 2) Dos cargas de 32 bytes (thea
yb
) y 3) un almacén de 32 bytes (thed
). Está increíblemente bien ajustado.-march=native
, por lo que supongo que su código solo usa SSE2 en cualquiera de los sistemas. Supongo que el ancho de banda de la memoria es probablemente un cuello de botella, especialmente. si su núcleo no tiene soporte NUMA, o los patrones de asignación de su sim no son compatibles con NUMA. ¿Esto es qué, quad socket quad core, con controladores de memoria de doble canal en cada socket?