Perché il mio computer core 16x 2.93GHz bare metal ha prestazioni inferiori rispetto a un VPS con core 4x 2.5GHz?


34

Ho scritto un pezzo di software multi-thread che fa un sacco di simulazioni al giorno. Questo è un compito molto impegnativo per la CPU e ho eseguito questo programma su servizi cloud, di solito su configurazioni come 1 GB per core.

Sto usando CentOS 6.7 e /proc/cpuinfomi dà che i miei quattro core VPS sono 2,5 GHz.

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 dei tassi di cambio, il mio VPS ha iniziato a essere più costoso e sono arrivato a un "grande affare" sui server bare metal usati.

Ho acquistato quattro HP DL580 G5 , con quattro Intel Xeon X7350 ciascuno. Fondamentalmente, ogni macchina ha core 16x 2.93GHz e 16GB, per mantenere cose come il mio cloud 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:

Fondamentalmente mi è sembrato molto, dato che ho potuto smettere di usare i VPS per eseguire questi lavori batch. Ora è roba strana ...

  1. Su VPS ho eseguito 1,25 thread per core, proprio come ho fatto sul bare metal. (Il thread extra di 0,25 serve a compensare i tempi di inattività causati dall'uso della rete.)
  2. Sul mio VPS, usando in totale 44x 2,5 GHz core, ottengo quasi 900 simulazioni al minuto.
  3. Sul mio DL580, utilizzando in totale 64x 2,93 GHz core, sto ricevendo solo 300 simulazioni al minuto.

Capisco che il DL580 ha un processore più vecchio. Ma se sto eseguendo un thread per core e il server bare metal ha un core più veloce, perché ha prestazioni inferiori al mio VPS?

Non ho alcun scambio di memoria in nessuno dei server.

TOP afferma che i miei processori funzionano al 100%. Ottengo un carico medio di 18 (5 su VPS).

Sarà così o mi sto perdendo qualcosa?

L'esecuzione di lscpu mi dà 1,6 GHz sul mio server bare metal. Questo è stato visto sul/proc/cpuinfo .

Queste informazioni sono corrette o sono collegate a una gestione errata dell'alimentazione?

[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

32
Perché i processori di otto anni fanno molto meno per ciclo di clock rispetto ai processori attuali.
Michael Hampton

3
Ti consigliamo di ripristinare le impostazioni del BIOS predefinite. Questi server sembrano avere una configurazione non ottimale anche su di essi. Vedi la mia modifica qui sotto.
ewwhite,

Dovresti provare a eseguire solo 1 thread per core. Se il core è lento, un carico elevato può significare che la CPU sta impiegando molto tempo a cambiare attività e sta facendo meno.
Nemo,

Puoi cercare "benchmark della CPU" su Internet per trovare confronti di prestazioni. La mia risorsa preferita è CPUBenchmark.net .

6
Dai un'occhiata anche alla differenza di dimensione della cache. I cache miss possono essere terribili.
acelent,

Risposte:


44

I progressi del processore, la velocità di clock e i calcoli IPC possono rendere quasi impossibile provare a confrontare ragionevolmente CPU vecchie di decenni con quelle moderne. Non solo le istruzioni per ciclo varieranno, ma i processori più recenti hanno set di istruzioni dedicati a calcoli complessi (Intel ha aggiunto AES-NI come esempio), la velocità di clock non è più un comparatore ragionevole, a causa di questi fattori (ho già detto multi-core vs hyperthreading ...). Con abbastanza tempo e pazienza potresti certamente capire quanti procs più vecchi equivalgono a 1 proc più nuovi, ma i calcoli finiranno per dire che è più economico e veloce per acquistare una nuova CPU.


2
Ci sono un sacco di siti Web là fuori che lo fanno già, confrontando i benchmark della CPU di ciascun processore.
Michael Hampton

4
Non esatto, ma ecco il benchmark Passmark per Intel Xeon E5-2680 a 2,70 GHz vs Intel Xeon X7350 a 2,93 GHz
chue x

Il problema con un benchmark è che per sua stessa natura, non è ottimizzato per quel particolare processore. Non è male per una stima approssimativa, ma dovresti riscrivere e ricompilare con il miglior set di istruzioni per ciascuno. pochissimi strumenti sono scritti con qualcosa di diverso da "quante volte è possibile calcolare" x ".
Jim B,

1
@JimB, sì, ma la simulazione dei PO potrebbe anche non essere ottimizzata per una particolare CPU. (se lo è, mi sono perso, scusa)
David Balažic,

1
Probabilmente no, nel qual caso la simulazione è di fatto il benchmark a meno che il programma NON sia ricompilato. Un benchmark di terze parti sarebbe meno preciso.
Jim B,

32

Non voglio sembrare terribile sottolineando qualcosa che dovrebbe essere ovvio qui, ma stai confrontando un processore server di fascia alta dal 2014 con un processore server di fascia alta dal 2007 .

Non penso che ciò richieda molte più spiegazioni.

C'è un motivo per cui un HP ProLiant DL580 G5 è oggi disponibile in modo così economico . Erano grandi, lenti e mancano di molte funzionalità desiderabili nei server più moderni. Ho venduto il mio ultimo nel 2009 . È stato un brutto acquisto, e sarebbe meglio servirti con una CPU delle famiglie di CPU Nehalem o Westmere, se sei costretto ad acquistare apparecchiature usate.

Inoltre, i server acquistati sono molto inefficienti in termini di consumo energetico, quindi saranno costosi da utilizzare.


Sembra che i server fisici stiano funzionando in una modalità di risparmio energetico che riduce la velocità di clock della CPU. Ti consigliamo di accedere al BIOS (premere F9 all'avvio) e ripristinare le impostazioni di fabbrica del server ( chissà cos'altro è stato modificato dall'impostazione predefinita? )

inserisci qui la descrizione dell'immagine


7
@GlaucoCattaliniLins No.
ewwhite,

1
Potresti approfondire questo? Ho problemi a digerirlo. Ho la possibilità di cambiare per altri modelli, quindi voglio farlo bene se si tratta di questo. - Inizialmente pensavo che potesse essere la dimensione della cache dell'E5 (30 MB), ma poi sarebbe stata condivisa tra gli altri VPS.
Glauco Cattalini Lins,

11
@GlaucoCattaliniLins L'X7350 si basa sulla microarchitettura Core 2. In effetti, è paragonabile a un Core 2 Quad (quanto tempo è passato dall'ultima volta che ne hai sentito parlare?). È così vecchio che non supporta le istruzioni SSE4 +, AVX (2), FMA o AES, quindi se le tue simulazioni sono numeriche, subiscono una penalità> 2x proprio lì e la velocità di crittografia AES soffre ancora di più. Infine, Intel ha rilasciato 6 miglioramenti microarchitetturali dal Core 2 e con ognuno di essi aumenta la capacità della CPU di eseguire più istruzioni in parallelo o fuori servizio, la larghezza di banda della memoria.
Iwillnotexist Idonotexist,

10
@GlaucoCattaliniLins Al contrario, il tuo server VPS supporta FMA, quindi è almeno nuovo come la microarchitettura Haswell. L'istruzione FMA consente di eseguire una moltiplicazione e un'aggiunta due in uno e tutto in Haswell (decodificatori di istruzioni, buffer di riordino, predittori di rami, larghezza di banda di memoria, ALU) è stato messo a punto in modo che gli FMA a doppio vettore possano essere alimentati . Haswell può quindi sostenere, in un singolo ciclo di clock: 1) Due operazioni vettoriali a 8 elementi del modulo float d = a + b*c, 2) Due carichi a 32 byte (i ae b) e 3) un archivio a 32 byte (i d). È incredibilmente ben sintonizzato.
Iwillnotexist Idonotexist,

2
@IwillnotexistIdonotexist: quasi certamente non si è compilato per ogni macchina separatamente con -march=native, quindi immagino che il suo codice stia usando SSE2 solo su entrambi i sistemi. Immagino che la larghezza di banda della memoria sia probabilmente un collo di bottiglia, esp. se il suo kernel non ha il supporto NUMA o i modelli di allocazione della sua sim non sono compatibili con NUMA. Questo è cosa, quad core quad core, con controller di memoria dual channel su ciascun socket?
Peter Cordes,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.