Warum arbeitet mein Bare-Metal-Computer mit 16 x 2,93 GHz-Kernen schlechter als ein VPS-Computer mit 4 x 2,5 GHz-Kernen?

34

Ich habe eine Multithread-Software geschrieben, die täglich eine Reihe von Simulationen ausführt. Dies ist eine sehr CPU-intensive Aufgabe, und ich habe dieses Programm auf Cloud-Diensten ausgeführt, normalerweise mit Konfigurationen wie 1 GB pro Kern.

Ich lasse CentOS 6.7 laufen und /proc/cpuinfogebe an, dass meine vier VPS-Kerne 2,5 GHz sind.

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:

Mit steigenden Wechselkursen wurde mein VPS immer teurer und ich bin zu einem "großen Teil" an gebrauchten Bare-Metal-Servern gekommen.

Ich habe vier HP DL580 G5 mit jeweils vier Intel Xeon X7350 gekauft. Grundsätzlich verfügt jede Maschine über 16 x 2,93 GHz-Kerne und 16 GB, um Dinge wie meine VPS- Cloud beizubehalten .

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:

Im Grunde schien es sehr viel zu sein, da ich die Verwendung von VPS für diese Batch-Arbeiten einstellen konnte. Jetzt ist es das seltsame Zeug ...

  1. Auf den VPS habe ich 1,25 Threads pro Core ausgeführt, genau wie auf dem Bare Metal. (Der zusätzliche 0,25-Thread dient zum Ausgleich der durch die Netzwerknutzung verursachten Leerlaufzeiten.)
  2. Auf meinem VPS mit insgesamt 44 x 2,5 GHz-Kernen erhalte ich fast 900 Simulationen pro Minute.
  3. Auf meinem DL580 mit insgesamt 64 x 2,93 GHz-Kernen erhalte ich nur 300 Simulationen pro Minute.

Ich verstehe, dass der DL580 einen älteren Prozessor hat. Wenn ich jedoch einen Thread pro Kern ausführe und der Bare-Metal-Server über einen schnelleren Kern verfügt, warum ist die Leistung dann schlechter als bei meinem VPS?

Auf keinem der Server findet ein Speicheraustausch statt.

TOP sagt, meine Prozessoren laufen zu 100%. Ich bekomme eine durchschnittliche Belastung von 18 (5 auf VPS).

Wird das so sein, oder vermisse ich etwas?

Das Ausführen von lscpu gibt mir 1,6 GHz auf meinem Bare-Metal-Server. Dies war auch auf der /proc/cpuinfozu sehen.

Sind diese Informationen korrekt oder hängen sie mit einer falschen Energieverwaltung zusammen?

[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
Glauco Cattalini Lins
quelle
32
Da acht Jahre alte Prozessoren pro Taktzyklus weit weniger leisten als aktuelle Prozessoren.
Michael Hampton
3
Sie möchten Ihre BIOS-Einstellungen auf die Standardeinstellungen zurücksetzen. Diese Server scheinen ebenfalls eine nicht optimale Konfiguration zu haben. Siehe meine Bearbeitung unten.
ewwhite
Sie sollten versuchen, nur 1 Thread pro Kern auszuführen. Wenn der Kern langsam ist, kann eine hohe Last bedeuten, dass die CPU viel Zeit mit dem Umschalten von Aufgaben verbringt und weniger erledigt wird.
Nemo
Sie können im Internet nach "CPU-Benchmarks" suchen, um Leistungsvergleiche zu finden. Meine Lieblingsressource ist CPUBenchmark.net .
6
Schauen Sie sich auch den Unterschied in der Cache-Größe an. Cache-Fehler können schrecklich sein.
aktueller

Antworten:

44

Dank der Weiterentwicklung des Prozessors, der Taktfrequenz und der IPC-Berechnungen ist es fast unmöglich, jahrzehntelange alte CPUs mit modernen CPUs zu vergleichen. Die Anweisungen pro Zyklus werden nicht nur variieren, sondern neuere Prozessoren verfügen auch über Anweisungssätze für komplexe Berechnungen (Intel hat AES-NI als Beispiel hinzugefügt). Aufgrund dieser Faktoren ist die Taktrate kein vernünftiger Vergleich mehr (habe ich erwähnt) Multi-Core vs Hyperthreading ...). Mit genügend Zeit und Geduld könnten Sie sicher herausfinden, wie viele ältere Procs einem neueren Proc entsprechen, aber die Berechnungen werden am Ende besagen, dass es billiger und schneller ist, eine neue CPU zu kaufen.

Jim B
quelle
2
Es gibt eine Reihe von Websites, die dies bereits tun, indem sie die CPU-Benchmarks der einzelnen Prozessoren vergleichen.
Michael Hampton
4
Nicht genau, aber hier ist der Passmark-Benchmark für Intel Xeon E5-2680 @ 2.70GHz gegen Intel Xeon X7350 @ 2.93GHz
Chue x
Das Problem bei einem Benchmark ist, dass er von Natur aus nicht für diesen bestimmten Prozessor optimiert ist. Es ist nicht schlecht für eine grobe Schätzung, aber Sie müssten den jeweils besten Befehlssatz neu schreiben und kompilieren. Sehr wenige Tools sind mit etwas anderem als "Wie oft kann" x "berechnet werden.
Jim B
1
@JimB, ja, aber die OPs-Simulation ist möglicherweise auch nicht für eine bestimmte CPU optimiert. (wenn es so ist, habe ich es verpasst, sorry)
David Balažic
1
Wahrscheinlich nein. In diesem Fall ist die Simulation de facto der Benchmark, sofern das Programm nicht neu kompiliert wird. Ein Drittanbieter-Benchmark wäre weniger genau.
Jim B
32

Ich möchte nicht schrecklich klingen, indem ich etwas betone, das hier offensichtlich sein sollte, aber Sie vergleichen einen High-End-Serverprozessor aus dem Jahr 2014 mit einem High-End-Serverprozessor aus dem Jahr 2007 .

Ich denke nicht, dass dies viel mehr Erklärung erfordert.

Es gibt einen Grund, warum ein HP ProLiant DL580 G5 heute so günstig erhältlich ist . Sie waren groß, langsam und es fehlten viele Funktionen, die für modernere Server wünschenswert sind. Ich habe meinen letzten im Jahr 2009 verkauft . Es war ein schlechter Kauf, und Sie sollten eine CPU aus der Nehalem- oder Westmere-CPU-Familie einsetzen, wenn Sie gezwungen sind, gebrauchte Geräte zu kaufen.

Darüber hinaus sind die von Ihnen gekauften Server in Bezug auf den Stromverbrauch sehr ineffizient und daher teuer in der Bedienung.


Es scheint, als ob Ihre physischen Server in einem Energiesparmodus ausgeführt werden, der die CPU-Taktrate verringert. Sie möchten das BIOS aufrufen (beim Booten F9 drücken) und den Server auf die werkseitigen Standardeinstellungen zurücksetzen ( wer weiß, was sonst noch an den Standardeinstellungen geändert wurde? )

Bildbeschreibung hier eingeben

ewwhite
quelle
7
@ GlaucoCattaliniLins Nr.
ewwhite
1
Könnten Sie das näher erläutern? Ich habe Probleme, es zu verdauen. Ich habe die Möglichkeit, für andere Modelle zu wechseln, also möchte ich es richtig machen, wenn es darum geht. - Zuerst dachte ich, es könnte die Cache-Größe des E5 (30 MB) sein, aber dann würde es unter anderen VPS geteilt.
Glauco Cattalini Lins
11
@GlaucoCattaliniLins Der X7350 basiert auf der Core 2-Mikroarchitektur. Tatsächlich ist es vergleichbar mit einem Core 2 Quad (Wie lange ist es her, dass Sie zuletzt davon gehört haben?). Es ist so alt, dass es keine SSE4 + -, AVX (2) -, FMA- oder AES-Befehle unterstützt. Wenn Ihre Simulationen also numerisch sind, werden sie gleich zweimal bestraft, und die AES-Kryptogeschwindigkeit leidet darunter noch mehr. Schließlich hat Intel seit Core 2 sechs Verbesserungen der Mikroarchitektur veröffentlicht und mit jeder Verbesserung die Fähigkeit der CPU, mehr Befehle parallel auszuführen oder die Speicherbandbreite zu erhöhen.
Ich werde nicht existieren Idonotexist
10
@GlaucoCattaliniLins Im Gegensatz dazu unterstützt Ihr VPS-Server FMA und ist daher mindestens so neu wie die Haswell-Mikroarchitektur. Der FMA-Befehl ermöglicht eine Multiplikation und Addition von zwei in einem, und alles in Haswell (Befehlsdecoder, Neuordnungspuffer, Verzweigungsvorhersager, Speicherbandbreite, ALUs) wurde so abgestimmt, dass die Doppelvektor-FMAs weiterhin gespeist werden können . Haswell kann somit in einem einzigen Taktzyklus aufrechterhalten : 1) Zwei 8-Element-Vektoroperationen der Form float d = a + b*c, 2) Zwei 32-Byte-Ladevorgänge (das aund b) und 3) einen 32-Byte-Speicher (das d). Es ist erstaunlich gut abgestimmt.
Ich werde nicht existieren Idonotexist
2
@IwillnotexistIdonotexist: Er hat mit ziemlicher Sicherheit nicht für jede Maschine einzeln kompiliert -march=native, daher würde ich annehmen, dass sein Code auf beiden Systemen nur SSE2 verwendet. Ich denke, die Speicherbandbreite ist wahrscheinlich ein Engpass. Wenn sein Kernel keine NUMA-Unterstützung hat oder die Zuweisungsmuster seiner Sims nicht NUMA-freundlich sind. Das ist was, Quad-Socket-Quad-Core, mit Dual-Channel-Speichercontrollern an jedem Sockel?
Peter Cordes