Pourquoi mon ordinateur 16 x 2.93 GHz à cœur nu est-il moins performant qu'un VPS doté de 2 x 2,5 GHz?

34

J'ai écrit un logiciel multithread qui effectue un grand nombre de simulations par jour. C’est une tâche très gourmande en ressources processeur, et j’exécutais ce programme sur des services cloud, généralement sur des configurations telles que 1 Go par cœur.

Je suis en cours d'exécution CentOS 6.7, et /proc/cpuinfome donne que mes quatre cœurs de VPS sont 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:

Avec la hausse des taux de change, mon VPS a commencé à être plus cher, et je suis arrivé à une "bonne affaire" sur des serveurs nus en métal.

J'ai acheté quatre HP DL580 G5 , avec quatre Intel Xeon X7350 chacun. Fondamentalement, chaque machine dispose de 16 x 2,93 GHz et de 16 Go, pour garder des choses comme mon 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:

Essentiellement, cela semblait beaucoup, car je pouvais arrêter d'utiliser des VPS pour effectuer ces travaux par lots. Maintenant c'est le truc bizarre ...

  1. Sur les VPS, j'ai utilisé 1,25 fil par noyau, tout comme je l'ai fait sur du métal nu. (Le thread supplémentaire 0.25 doit compenser le temps d'inactivité causé par l'utilisation du réseau.)
  2. Sur mon VPS, en utilisant au total 44 x 2,5 GHz, je reçois près de 900 simulations par minute.
  3. Sur mon DL580, en utilisant au total 64 x 2,93 GHz, je n’obtiens que 300 simulations par minute.

Je comprends que le DL580 a un processeur plus ancien. Mais si j'exécute un thread par cœur et que le serveur bare metal a un cœur plus rapide, pourquoi fonctionne-t-il moins bien que mon VPS?

Je n'ai aucun échange de mémoire qui se passe dans aucun des serveurs.

TOP dit que mes processeurs fonctionnent à 100%. Je reçois une charge moyenne de 18 (5 sur VPS).

Est-ce que ça va être comme ça, ou est-ce que je manque quelque chose?

Exécuter lscpu me donne 1,6 GHz sur mon serveur bare metal. Cela a été vu sur le /proc/cpuinfoaussi.

Cette information est-elle correcte ou est-elle liée à une gestion de l'alimentation incorrecte?

[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
la source
32
Parce que les processeurs de huit ans font beaucoup moins par cycle d'horloge que les processeurs actuels.
Michael Hampton
3
Vous voudrez réinitialiser les paramètres de votre BIOS par défaut. Ces serveurs sonnent comme ayant une configuration non optimale. Voir mon édition ci-dessous.
ewwhite
Vous devriez essayer de ne lancer qu'un seul thread par cœur. Si le coeur est lent, une charge élevée peut signifier que le processeur passe beaucoup de temps à changer de tâche et fait moins de travail.
Nemo
Vous pouvez rechercher sur Internet des "tests de performances" pour trouver des comparaisons de performances. Ma ressource préférée est CPUBenchmark.net .
6
Regardez aussi la différence de taille de cache. Les erreurs de cache peuvent être terribles.
Acelent

Réponses:

44

Les progrès des processeurs, la vitesse d'horloge et les calculs IPC peuvent rendre presque impossible la comparaison raisonnable de CPU vieux de dix ans à ceux modernes. Non seulement les instructions vont-elles varier d’un cycle à l’autre, mais les nouveaux processeurs ont des jeux d’instructions dédiés aux calculs complexes (Intel a ajouté AES-NI comme exemple), la vitesse d’horloge n’est plus un comparateur raisonnable, à cause de ces facteurs (ai-je mentionné multi-core vs hyperthreading ...). Avec suffisamment de temps et de patience, vous pourrez certainement déterminer le nombre de procs anciens équivalant à un procus plus récent, mais les calculs finiront par indiquer qu'il est moins cher et plus rapide d'acheter un nouveau processeur.

Jim B
la source
2
De nombreux sites Web le font déjà en comparant les points de repère du processeur de chaque processeur.
Michael Hampton
4
Pas exact, mais voici le repère Passmark pour Intel Xeon E5-2680 @ 2.70GHz vs Intel Xeon X7350 @ 2.93GHz
x
Le problème avec un repère est que, de par sa nature même, il n'est pas optimisé pour ce processeur particulier. Ce n’est pas mauvais pour une estimation approximative, mais vous devrez réécrire et recompiler avec le meilleur jeu d’instructions pour chacun. très peu d'outils sont écrits avec autre chose que "combien de fois peut-on calculer" x "
Jim B
1
@ JimB, oui, mais la simulation des OP peut également ne pas être optimisée pour un processeur particulier. (si c'est le cas, je l'ai manqué, désolé)
David Balažic
1
Probablement non, auquel cas la simulation est de facto la référence sauf si le programme est recompilé. Un point de repère tiers serait moins précis.
Jim B
32

Je ne veux pas paraître terrible en soulignant quelque chose qui devrait être évident ici, mais vous comparez un processeur de serveur haut de gamme de 2014 à un processeur de serveur haut de gamme de 2007 .

Je ne pense pas que cela nécessite beaucoup plus d'explications.

Ce n'est pas pour rien qu'un HP ProLiant DL580 G5 est disponible aujourd'hui . Ils étaient volumineux, lents et manquaient de nombreuses fonctionnalités souhaitables sur les serveurs plus modernes. J'ai vendu mon dernier en 2009 . C'était un mauvais achat et vous seriez mieux servi avec un processeur des familles de processeurs Nehalem ou Westmere, si vous êtes obligé d'acheter de l'équipement usagé.

De plus, les serveurs que vous avez achetés sont très inefficaces en termes de consommation d’énergie et leur exploitation sera donc coûteuse.


Il semble que vos serveurs physiques fonctionnent dans un mode d'économie d'énergie qui réduit la vitesse d'horloge de votre CPU. Vous voudrez aller dans le BIOS (appuyez sur F9 au démarrage) et réinitialiser le serveur aux paramètres d'usine ( qui sait quoi d'autre a été modifié par défaut? )

entrez la description de l'image ici

ewwhite
la source
7
@GlaucoCattaliniLins N °
ewwhite
1
Pouvez-vous développer sur ce sujet? J'ai du mal à le digérer. J'ai la possibilité de changer pour d'autres modèles, donc je veux bien faire les choses si on en arrive là. - Au début, je pensais qu'il pourrait s'agir de la taille du cache de l'E5 (30 Mo), mais ensuite, cela serait partagé entre d'autres VPS.
Glauco Cattalini Lins
11
@GlaucoCattaliniLins Le X7350 est basé sur la microarchitecture Core 2. En fait, il est comparable à un Core 2 Quad (depuis combien de temps avez-vous entendu parler de cela?). Il est si ancien qu'il ne prend pas en charge les instructions SSE4 +, AVX (2), FMA ou AES. Si vos simulations sont numériques, elles prennent une pénalité> 2x, et la vitesse de cryptage AES en souffre encore plus. Enfin, Intel a publié 6 améliorations microarchitecturales depuis le Core 2, et chacune d’elles augmente la capacité du processeur à exécuter davantage d’instructions en parallèle ou dans le désordre, la bande passante mémoire.
Iwillnotexist Idonotexist
10
@GlaucoCattaliniLins En revanche, votre serveur VPS prend en charge FMA. Il est donc au moins aussi récent que la microarchitecture Haswell. L’instruction FMA permet de multiplier et d’additionner deux-en-un, et tout dans Haswell (décodeurs d’instruction, tampon de réorganisation, prédicteurs de branche, largeur de bande mémoire, ALU) a été réglé de sorte que les FMA à double vecteur puissent être conservés. . Haswell peut donc supporter, en un seul cycle d'horloge: 1) Deux opérations vectorielles de la forme à 8 éléments float d = a + b*c, 2) Deux charges de 32 octets (le aet b) et 3) une mémoire de 32 octets (le d). C'est incroyablement bien réglé.
Iwillnotexist Idonotexist
2
@IwillnotexistIdonotexist: il n'a presque certainement pas compilé pour chaque machine séparément -march=native, alors je suppose que son code utilise uniquement SSE2 sur l'un ou l'autre système. Je suppose que la bande passante mémoire est probablement un goulot d'étranglement, en particulier. si son noyau ne prend pas en charge NUMA, ou si les schémas d'allocation de son sim ne sont pas compatibles avec NUMA. C’est quoi, quadruple de socket, avec des contrôleurs de mémoire à double canal sur chaque socket?
Peter Cordes