Frage Warum arbeitet mein Bare-Metal 16x 2.93GHz Kern Computer schlechter als ein VPS mit 4x 2.5GHz Kernen?


Ich habe ein Stück Multi-Thread-Software geschrieben, die jeden Tag eine Menge Simulationen macht. Dies ist eine sehr CPU-intensive Aufgabe, und ich habe dieses Programm auf Cloud-Diensten ausgeführt, normalerweise auf Konfigurationen wie 1 GB pro Kern.

ich renne CentOS 6.7, und /proc/cpuinfo gibt mir, 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 einem Anstieg der Wechselkurse begann mein VPS teurer zu werden, und ich kam zu einem "großen Deal" auf gebrauchten Bare-Metal-Servern.

Ich habe vier gekauft HP DL580 G5mit jeweils vier Intel Xeon X7350. Grundsätzlich hat jede Maschine 16x 2.93GHz Kerne und 16GB, um Dinge wie meine zu halten VPS Wolke.

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 eine große Sache zu sein, da ich aufhören konnte, VPS zu verwenden, um diese Stapelarbeiten durchzuführen. Jetzt ist es das komische Zeug ...

  1. Auf den VPS habe ich 1,25 Thread pro Kern ausgeführt, genau wie ich es auf dem Bare Metal gemacht habe. (Der zusätzliche 0,25-Thread soll Leerlaufzeiten kompensieren, die durch die Netzwerknutzung verursacht werden.)
  2. Auf meinem VPS, mit insgesamt 44x 2,5 GHz Kernen, erhalte ich fast 900 Simulationen pro Minute.
  3. Auf meinem DL580 mit insgesamt 64x 2.93GHz Kernen bekomme ich nur 300 Simulationen pro Minute.

Ich verstehe, dass der DL580 einen älteren Prozessor hat. Aber wenn ich einen Thread pro Kern betreibe und der Bare-Metal-Server einen schnelleren Kern hat, warum schneidet er dann schlechter ab als mein VPS?

Ich habe keinen Speicheraustausch in irgendeinem der Server.

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

Wird das so sein, oder fehlt mir etwas?

Laufen lscpu gibt mir 1,6 GHz auf meinem Bare-Metal-Server. Dies wurde auf der /proc/cpuinfo auch.

Sind diese Informationen korrekt oder ist sie mit einer falschen Stromverwaltung verbunden?

[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

33
2017-11-28 14:36


Ursprung


Weil acht Jahre alte Prozessoren weniger pro Taktzyklus als gegenwärtige Prozessoren tun. - Michael Hampton♦
Sie sollten Ihre BIOS-Einstellungen auf die Standardeinstellungen zurücksetzen. Diese Server klingen, als hätten sie auch eine nicht optimale Konfiguration. Siehe meine Bearbeitung unten. - ewwhite
Sie sollten versuchen, nur 1 Thread pro Kern auszuführen. Wenn der Kern langsam ist, kann eine hohe Auslastung bedeuten, dass die CPU viel Zeit für das Wechseln von Aufgaben benötigt und weniger erledigt wird. - Nemo
Sie können im Internet nach "CPU-Benchmarks" suchen, um Leistungsvergleiche zu finden. Meine Lieblingsquelle ist diese CPUBenchmark.net.
Werfen Sie auch einen Blick auf den Größenunterschied der Caches. Cache-Misses können schrecklich sein. - acelent


Antworten:


Prozessorfortschritte, Taktgeschwindigkeit und IPC-Berechnungen können es fast unmöglich machen, jahrzehntelange CPUs mit modernen zu vergleichen. Nicht nur die Anweisungen pro Zyklus variieren, sondern neuere Prozessoren haben Befehlssätze für komplexe Berechnungen (Intel hat AES-NI als Beispiel hinzugefügt), Taktfrequenz ist nicht mehr ein vernünftiger Komparator, aufgrund dieser Faktoren (habe ich erwähnt Multi-Core vs Hyperthreading ...). Mit genügend Zeit und Geduld können Sie sicherlich herausfinden, wie viele ältere Procs 1 neuer Proc entsprechen, aber die Berechnungen werden am Ende sagen, dass es billiger und schneller ist, eine neue CPU zu kaufen.


43
2017-11-28 16:21



Es gibt eine Reihe von Websites, die dies bereits tun, indem Sie CPU-Benchmarks für jeden Prozessor vergleichen. - Michael Hampton♦
Nicht genau, aber hier ist der Passmark Benchmark für Intel Xeon E5-2680 @ 2,70 GHz vs Intel Xeon X7350 @ 2.93GHz - chue x
Das Problem mit einem Benchmark ist, dass es von Natur aus nicht für den jeweiligen Prozessor optimiert ist. Es ist nicht schlecht für eine grobe Schätzung, aber Sie müssten neu schreiben und mit dem besten Befehlssatz für jeden neu kompilieren. sehr wenige Werkzeuge werden mit etwas anderem geschrieben als "wie viele Male kann" x "berechnet werden. - Jim B
@ JimB, ja, aber die OP-Simulation ist möglicherweise auch nicht für eine bestimmte CPU optimiert. (wenn es ist, habe ich es verpasst, tut mir leid) - David Balažic
Wahrscheinlich nein, in diesem Fall ist die Simulation de facto der Benchmark, es sei denn, das Programm wird neu kompiliert. Ein Drittanbieter-Benchmark wäre weniger genau. - Jim B


Ich möchte nicht schrecklich klingen, indem ich etwas hervorhebe sollte sei hier offensichtlich, aber du vergleichst ein High-End-Server-Prozessor von 2014 zu einem High-End-Server-Prozessor von 2007.

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

Es gibt einen Grund, warum HP ProLiant DL580 G5 ist verfügbar so billig heute. Sie waren groß, langsam und enthielten viele Funktionen, die in modernen Servern wünschenswert sind. Ich habe meine verkauft letzte im Jahr 2009. Es war ein schlechter Kauf, und Sie wären besser mit einer CPU aus den Nehalem- oder Westmere-CPU-Familien bedient, 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, so dass sie kostspielig sind.


Es scheint, als ob Ihre physischen Server in einem Stromsparmodus betrieben werden, der die CPU-Taktrate herabsetzt. Sie sollten ins BIOS gehen (drücken Sie F9 beim Booten) und setzen Sie den Server auf die Werkseinstellungen zurück (Wer weiß, was sonst vom Standard geändert wurde?)

enter image description here


32
2017-11-28 14:46



@GlaucoCattaliniLins Nr. - ewwhite
Können Sie das näher ausführen? Ich habe Probleme, es zu verdauen. Ich habe die Möglichkeit, für andere Modelle zu ändern, also möchte ich es richtig machen, wenn es dazu kommt. - Zuerst dachte ich, es könnte die Cache-Größe des E5 (30MB) sein, aber dann würde es unter anderen VPS geteilt werden. - Glauco Cattalini Lins
@GlaucoCattaliniLins Das X7350 basiert auf der Core 2 Mikroarchitektur. In der Tat ist es vergleichbar mit a Kern 2 Quad (Wie lange ist es her, dass du das zuletzt gehört hast?). Es ist so alt, dass es SSE4 +, AVX (2), FMA oder AES-Anweisungen nicht unterstützt. Wenn Ihre Simulationen numerisch sind, nehmen sie eine> 2x Strafe genau dort, und die AES-Krypto-Geschwindigkeit leidet noch mehr. Schließlich hat Intel 6 Mikroarchitekturverbesserungen seit Core 2 veröffentlicht, und mit jedem einzelnen erhöht die CPU die Fähigkeit, mehr Befehle parallel oder außer Betrieb zu betreiben, die Speicherbandbreite. - Iwillnotexist Idonotexist
@GlaucoCattaliniLins Im Gegensatz dazu unterstützt Ihr VPS-Server FMA, also ist es mindestens so neu wie die Haswell-Mikroarchitektur. Der FMA-Befehl ermöglicht es, eine Multiplikation und Addition zu zweit durchzuführen, und alles in Haswell (die Befehlsdecodierer, Umordnungspuffer, Verzweigungsvorhersager, Speicherbandbreite, ALUs) wurde abgestimmt, so dass die Doppelvektor-FMAs weitergespeist werden können . Haswell kann also erhalten, in einem einzigen Taktzyklus: 1) Zwei 8-Element-Vektoroperationen des Formulars float d = a + b*c, 2) Zwei 32-Byte-Lasten (die a und b) und 3) ein 32-Byte-Speicher (die d). Es ist erstaunlich gut abgestimmt. - Iwillnotexist Idonotexist
@IwillnotexistIdonotexist: Er hat fast sicher nicht für jede Maschine separat mit kompiliert -march=nativeIch denke, sein Code verwendet nur SSE2 auf beiden Systemen. Ich denke, Speicherbandbreite ist wahrscheinlich ein Engpass, vor allem. wenn sein Kernel keine NUMA-Unterstützung hat oder die Zuweisungsmuster seiner Sim nicht NUMA-freundlich sind. Dies ist, Quad-Sockel-Quad-Core, mit Dual-Channel-Speicher-Controller auf jeder Steckdose? - Peter Cordes