Accueil > ESXi > Est-ce que l’EVC diminue les performances?
Jan/1624

Bien que l’EVC (Enhanced vMotion Compatibility) existe depuis longtemps (ESX 3.5), il y a encore beaucoup de personnes ne l’utilisent pas par peur de dégradation des performances. Mythe ou réalité, j’ai voulu en avoir le coeur net, d’où l’objet de ce post.

Pour rappel l’EVC est un fonction au niveau d’un cluster vSphere qui permet de cacher certaines fonctionnalités des processeurs et ainsi pour faire des vMotion sans problème de compatibilité processeurs. Sans EVC, il n’est pas possible de déplacer des VMs entre des hôtes ayant des génerations différentes de processeur. On définit donc mode EVC pour fixer le baseline du niveau d’instruction minimum disponible à travers le cluster, les autres instructions serons masquées. En complément un FAQ sur EVC et la compatibilité CPU (KB1005764) et aussi les modes de compatibilité EVC en fonction de processeurs et des versions vSphere (KB1003212).

EVCbaseline

Nature de l’environnement des tests de performance avec/sans EVC:

  • une VM Windows 2012 R2 standard avec 4 vCPUs (4 sockets x 1 core) et 4 Go vRAM avec un ensemble d’outils de benchmark installé.
  • pas de DRS pour que la machine reste toujours sur le même hôte / pas d’autre VM sur le hôte.
  • l’hyperviseur en ESXi 6.0.0 (build 2494585) avec 2 processeur Intel Xeon E5-2680-v2 (Ivy Bridge) 10 coeurs @ 2.8 GHz, HT activé, Power Management policy Balanced.

Les outils d’information et de benchmark suivants ont été utilisés:

  • CPU-Z 1.74 pour collecter un grand d’information sur les processeurs vu par l’OS. Cela permet notamment de voir les jeux d’instructions disponibles.
  • PassMark PerformanceTest 8.0 est un outil permettant de tester les performances de différents composant hardware d’une machine. En plus du test général, il est intéressant de prendre le score pour le CPU qui est souvent un score de référence pour comparer les performances entre différents processeurs et génération. Un score (au global et pour le CPU) est meilleur.
  • Super PI 1.1 Single-threaded Benchmark est un outil qui calcul un certain nombre décimal du chiffre PI, il permet de tester la puissance de calcul pure d’un vCPU. Un temps de calcul plus faible est meilleur, le calcul à 1Million de décimale est retenu comme valeur de référence.
  • Prime95 28.7 est un outil de stress/test performance CPU et le caches (L1/L2/L3) à travers tous les coeurs pour les saturer de calcul d’instruction entier et à virgule flottante. Un nombre d’itération par second élevé est meilleur, la valeur valeur avec la plus grosse charge est retenue (taille de FFT 8192K avec 4 workers sur 4 CPUs).
  • NovaBench 3.0.4 system benchmark software est un autre outil de benchmark du hardware d’une machine. Le score CPU le plus élevé est meilleur.
  • Maxon CineBench R15.0 the cinema 4D benchmark permet de tester les performances pour du calcul de rendu graphique. Un score élevé est meilleur.
  • SunSpider 1.0.2 javascript benchmark (dans IE11) pour teste des performance pour du javascript, version remplacé depuis par le suivant (Jetstream). Un temps court est meilleur.
  • JetStream 1.1 (dans IE11) pour tester un ensemble de Javascript dans un navigateur pour les performances des applications web. Un score élevé est meilleur.

Il faut relativiser les résultats ou certain mode EVC sont meilleur que sans EVC car en fait en répétant les tests je n’obtenais pas la même valeur, j’ai conservé la meilleur valeur sur 3 itérations. Cette variation peut s’expliquer car 2 paramètres que j’ai découvert après analyse des résultats: la gestion d’énergie en mode Balanced (et non High Performance) et les coeurs Hyperthreadés que j’aurais du désactiver. Je n’ai pas recommencer tous les tests avec ces corrections car malgrés les variations on voit quand même la tendances dans le tableau ci-dessous:

EVC (Merom) EVC (Penryn) EVC (Nehalem) EVC (Westmere) EVC (Sandy Bridge) EVC (Ivy Bridge) EVC Off
CPU-Z instructions MMX, SSE, SSE2, SSE3, SSSE3, EM64T MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, EM64T MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, EM64T MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, EM64T, AES MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, EM64T, AES, AVX MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, EM64T, AES, AVX MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, EM64T, AES, AVX
PassMark Rating 581.5 590.4 596.7 596.8 595 593.7 594.9
PassMark CPU Mark 6598 6796 6834 6643 6733 6788 6742
SuperPI

1M

13.297 sec 13.406 sec 13.344 sec 13.407 sec 13.344 sec 13.313 sec 13.265 sec
Prime95

8192K FFT, 4 CPUs, 4 workers

36.27 iter/sec 37.21 iter/sec 36.87 iter/sec 37.97 iter/sec 57.35 iter/sec 57.35 iter/sec 57.31 iter/sec
NovaBench

CPU test

420 437 418 427 420 418 420
CineBench CPU 431 cb 447 cb 432 cb 446 cb 431 cb 447 cb 452 cb
SunSpider Total 123.4 ms 114.1 ms  109.5 ms 114.5 ms  113.8 ms 109.2 ms 109.3 ms
JetStream geometric mean 94.929 111.90  112.07  109.49  112.82  115.71 116.97

Le graphique ci-dessous représente la dégradation de performance relative par rapport aux résultats natifs (sans EVC activé):

EVC-perf-comparaison

Et voici les screenshots pour illustrer les tests effectués entre les 2 extremes:

EVC mode Merom EVC off
EVCon-CPUZ EVCoff-CPUZ
EVCon-PassMark-rating EVCoff-PassMark-rating
EVCon-PT-summary EVCoff-PT-summary
EVCon-PT-CPUmark EVCoff-PT-CPUmark
EVCon-SuperPI EVCoff-SuperPI
EVCon-Primer95 EVCoff-Prime95
EVCon-NovaBench EVCoff-NovaBench
EVCon-CineBench EVCoff-CineBench
EVCon-SunSpider EVCoff-SunSpider
EVCon-JetStream EVCoff-JetStream

Ces tests m’ont aussi permis de valider, comme vous le savez surement, qu’éteindre tous les VMs d’un cluster pour activer l’EVC (screenshot de gauche), mais qu’ensuite le passage vers un mode EVC supérieur se fait à chaud sans coupure des VMs (screenshot de droite). Il faut en revanche un redémarrage individuel des VMs pour qu’elles prennent en compte la modification. Comme on peut le voir si dessous:

EVCmode-Meron-VMon  EVCmode-upgradePenryn

En synthèse, on peut parler de réalité de baisse de performance dans les pires cas (avec Prime95 et pour les plus anciennes générations de processeurs). Cependant, si l’on se place dans un contexte réel où l’activation se fait sur la génération actuel de processeur et sur la durée des machines on pourra éventuellement supporté jusqu’à la génération N-2 ou N-3, on constate ici que la dégradation de performances est négligable face à la flexibilité que celà apporte, l’EVC devrait toujours être activé par défaut sur chaque nouveau cluster.

En effet, avec l’EVC on pourra rajouter des machines avec des générations de processeurs plus récentes dans un cluster quelques années plus tard, sans être obligé de construire un nouveau cluster et ainsi un nouveau silo de ressources. Et quand des anciennes machines de génération inférieur qui les cluster pour obsolécence, on peut augmenter à chaud le niveau de l’EVC.

  1. Olivier Cahagne
    04/02/2016 à 10:32 | #1

    Super intéressants ces tests! Je regardais Prime 95, qui a aussi implémenté AVX2 dispo dans les CPUs « post Ivy Bridge », Haswell. Ce serait intéressant de voir si un gap similaire en perf existe.
    Un autre test à faire: soft de crypto pour voir l’impact d’AES, très utiliser par des softs VPN (et peut-être Load-Balancer, offload SSL ou encore cryptage disque)

    • 04/02/2016 à 19:46 | #2

      Merci pour ce retour. En effet ces 2 tests seraient intéressants mais je n’avait pas de Haswell sous la main et pour AES, j’y ai pensé au moment de la rédaction de l’article mais c’était presque 1 mois après les tests.