La performance sous VMWare : généralité (article 1/4)

vmwareDe nos jours, il est fréquent de réaliser des tests de performance sur des machines virtuelles (VM).

Souvent, on réalise une campagne de test de performance sans prendre en compte la spécificité de la virtualisation en considérant que finalement la virtualisation est transparente.

Dans certains cas, il est nécessaire d'aller plus loin dans la performance de la virtualisation. Nous allons traiter ce thème en 4 parties:

  1. Généralités
  2. Les optimisations proposées par VMWare
  3. Comment dimensionner une VM
  4. Les métriques spécifiques à la virtualisation à surveiller durant un test de charge

Généralités - Concept

OS VMWare

La virtualisation des plateformes x86 a commencé dans les années 90. A partir des années 2000, la virtualisation a été industrialisée. De nos jours, de nombreuses sociétés et institutions publiques (plus de 250 000) ont adopté la virtualisation. La virtualisation est donc maintenant une technologie mature et maîtrisée.

La virtualisation permet de faire fonctionner plusieurs systèmes d’exploitation sur une même machine.

Concrètement, l’ESX attribue une quantité de ressources (CPU, RAM, Espace Disque, Réseau) à chaque système d’exploitation virtualisé en fonction de la configuration qui lui aura été indiquée.

Pour bien comprendre ce qu'est VMWare, voici la différence entre un serveur physique et un serveur virtualisé :
1

On observe deux différences principales :

  • Il y a une couche supplémentaire : le système d'exploitation de virtualisation. Cet OS permet de gérer l'interface entre la machine virtuelle et le matériel physique. Il gère le démarrage, l'arrêt et la gestion des ressources matérielles des machines virtuelles. Cet OS est assez léger
  • La partie CPU RAM Réseau est séparée de la partie Stockage.

 

La virtualisation consiste donc à exécuter différentes machines sur une seule machine.

Architecture de VMWare

Voici l'architecture VMWare :
2

Réservation de ressource

Après un bref aperçu de l'architecture d'un cluster d'ESX, nous allons voir comment sont attribués les différents type de ressources.

CPU

Notion Processeur/ Core / Hyperthreading:

  • Processeur : unité de traitement avec son propre cache, unité de calcul et ses données
  • Core : Unité de traitement qui partage le cache, les données avec un autre core
  • Hyperthreading : Créer deux unités de calcul sur une même unité de calcul de manière logiciel / émulé. Permet de gagner en efficacité de temps de traitement en particulier sur les application multi-threadées. Cela ne permet pas de doubler les ressources mais mieux exploiter les ressources oisives (attente d'informations etc.).

La gestion de la CPU se réalise selon deux paramètres :

  • Nombre de VCPU
  • Quantité GHz

Le nombre de VCPU indique le nombre de cœurs que la machine virtuelle pourra utiliser simultanément sur l'ESX.

La quantité de VCPU est fixé au démarrage de la machine virtuelle, cela ne peut pas être modifié à la volée. Avoir plusieurs CPU permet à la machine virtuelle d'exécuter le code sur plusieurs CPU physiques.

La quantité de GHz permet de définir la quantité de calcul maximal par seconde.

La CPU est donc gérer par 5 paramètres :

  • GHz Réservé : GHz minimum garantie au total (tous les cœurs inclus)
  • GHZ Max :GHz maximum total utilisable (tous les cœurs inclus)
  • vCPU réservé: Nombre de vCPU réservé
  • vCPU max : Nombre de vCPU maximum utilisable
  • Ratio / Pondération : en cas de concurrence de demande de ressources CPU, le ratio permet d'avantager ou de désavantager tel ou tel machine. Par défaut, trois valeurs prédéfinis : 0,5 , 1 et 2. Ces valeurs peuvent être personnalisées.

Exemple :
Nous avons un ESX composé de 4 cœurs à 2GHz

Paramétrages :

VM1 VM2 VM3
MHz Réservé 2000 1000 1000
MHz Max 4000 4000 4000
VCPU réservé 1 0 0
VCPU max 2 2 2
Ratio / pondération 2 1 2

Cas 1 :

La VM 1 est saturée
Les autres VM utilisent 400 MHz

3

Utilisation CPU

Explication :
La VM1 est saturé et est limité à 4000 MHz. La VM1 utilise donc 4000 MHz. Pour la VM2 et la VM3, ils utilisent 400MHz. Il y a suffisamment de ressources. La VM2 et la VM3 peuvent donc utiliser ces ressources.

Cas 2 :

La VM 1, 2 et 3 sont saturées.

4

Utilisation CPU

Explication :
Les 3 VM sont saturés. 2000 MHz est réservé par la VM1, 1000 MHz est réservé pour la VM2, 1000 MHz est réservé pour la VM3. Il reste donc 4000MHz à répartir sur les 3VM en prenant en compte les pondérations attribuées à chaque VM (2, 1 et 2).

4000 MHz à distribuer ==> 4000 / (2+1+2) = 800 MHz par point de pondération
VM1= 2000 + 2 x 800 = 3600 MHz
VM2= 1000 + 1 x 800 = 1800 MHz
VM3= 1000 + 2 x 800 = 2600 MHz

Cas 3 :

La VM 2 et 3 sont saturées
La VM 1 utilise 400 MHz

5

Utilisation CPU

Explication :
La VM1 utilise 400 MHz,
La VM2 pourrait donc utiliser 2533 MHz et la VM3 5066 MHz (pondération) mais la VM3 est limité à 4000 MHz. La VM2 peut donc utiliser plus de ressources.

RAM

La mémoire RAM permet de stocker temporairement des informations en attendant son utilisation pour le processeur.

Dans un ESX, il y a 3 types de mémoires :

  • La mémoire réservée à la console de virtualisation de manière globale
  • La mémoire réservée à chaque machine pour sa gestion

Cette mémoire permet de gérer la correspondance entre la mémoire virtuelle de la machine virtuelle et la mémoire physique de l'ESX. Cette correspondance induit un léger temps supplémentaire lors de l'accès à la mémoire et une utilisation mémoire supplémentaire.

VMWare fournit un tableau sur la mémoire supplémentaire à prévoir en fonction des capacités de la machine virtuelle choisie :

Mémoire

(Mo)

1 VCPU 2 VCPU 3 VCPU 4 VCPU 5 VCPU 6 VCPU 7 VCPU 8 VCPU

256

113.17 159.43 200.53 241.62 293.15 334.27 375.38 416.50

512

116.68 164.96 206.07 247.17 302.75 343.88 385.02 426.15

1024

123.73 176.05 217.18 258.30 322.00 363.17 404.34 445.52

2048

137.81 198.20 239.37 280.53 360.46 401.70 442.94 484.18

4096

165.98 242.51 283.75 324.99 437.37 478.75 520.14 561.52

8192

222.30 331.12 372.52 413.91 591.20 632.86 674.53 716.19

16384

334.96 508.34 550.05 591.76 900.44 942.98 985.52 1028.07

32768

560.27 863.41 906.06 948.71 1515.75 1559.42 1603.09 1646.76

65536

1011.21 1572.29 1616.19 1660.09 2746.38 2792.30 2838.22 2884.14

131072

1912.48 2990.05 3036.46 3082.88 5220.24 5273.18 5326.11 5379.05

262144

3714.99 5830.60 5884.53 5938.46 10142.83 10204.79 10266.74 10328.69
  • La mémoire utilisable par les machines virtuelles

C'est la mémoire réellement utilisable par la machine virtuelle. Elle est définissable par 3 paramètres :

  • RAM réservée: RAM réservée
  • RAM max : Quantité de RAM maximum utilisable
  • Ratio / Pondération : en cas de concurrence de demande de ressources RAM, le ratio permet d'avantager ou de désavantager tel ou tel machine. Par défaut, trois valeurs prédéfinis : 0,5 , 1 et 2. Ces valeurs peuvent être personnalisées.

Attention : si l'ESX n'a plus de mémoire RAM disponible et si il a tout essayé pour optimiser l'utilisation de la mémoire, il va « swapper » sans que cela se voit depuis par l'OS des VM et donc diminuer considérablement les performances des VM.

La gestion des ressources RAM est semblable à celle de la CPU :

Exemple :
Nous avons un ESX composé de 8 Go de RAM

Paramétrages :

VM1 VM2 VM3
Mo Réservé 2000 1000 1000
Mo Max 4000 4000 4000
Ratio / pondération 2 1 2

Cas 1 :

La VM 1 utilise l'intégralité de la mémoire RAM
Les autres VM utilisent 400 Mo de RAM

6

Utilisation CPU

Explication :
La VM1 utilise l'intégralité de la RAM et est limité à 4000 Mo de RAM. La VM1 utilise donc 4000 Mo de RAM. Pour la VM2 et la VM3, ils utilisent 400 Mo de RAM chacun. Il y a suffisamment de ressources. La VM2 et la VM3 peuvent donc utiliser ces ressources.

Cas 2 :

La VM 1, 2 et 3 utilisent l'intégralité de la RAM.

7

Utilisation CPU

Explication :
Les 3 VM utilisent l'intégralité de la RAM. 2000 Mo est réservé par la VM1, 1000 Mo est réservé pour la VM2, 1000 Mo est réservé pour la VM3. Il reste donc 4000 Mo à répartir sur les 3VM en prenant en compte les pondérations attribuées à chaque VM (2, 1 et 2).
4000 Mo à distribuer ==> 4000 / (2+1+2) = 800 Mo par point de pondération
VM1= 2000 + 2 x 800 = 3600 Mo
VM2= 1000 + 1 x 800 = 1800 Mo
VM3= 1000 + 2 x 800 = 2600 Mo

Cas 3 :

La VM 1 utilise 400 Mo
La VM 2 et 3 sont saturées

8

Utilisation CPU

Explication :
La VM1 utilise 400 Mo,
La VM2 pourrait donc utiliser 2533 Mo et la VM3 5066 Mo (pondération) mais la VM3 est limité à 4000 Mo. La VM2 peut donc utiliser plus de ressources.

Disque (poids)

L'affectation des ressources disques est globalement définie par 2 paramètres :

  • L'espace disque max
  • Le nombre de IOPS (opérations d'E/S par seconde)

L'espace disque

Lors de la création de l'espace disque virtuel pour une VM, il y a deux options :

  • Création d'un fichier équivalent à la taille demandé. Par exemple, un disque de 8 Go prendra 8 Go sur le datastore. L'avantage est que la ressource est réservée. L'inconvénient, 8 Go d'espace disque est consommé sur le datastore alors qu'il est vide sur la VM. Donc perte d'espace disque.

9

  • Création d'un fichier dans la taille changera dynamiquement : Par exemple, un disque virtuel de 8 Go qui contient 1Go ne prendre qu'1 Go sur le datastore. L'avantage : gain de place d'espace disque. Inconvénient, il faut bien surveiller l'espace disque sur le datastore pour éviter la pénurie de place.

10

 

Nombre d'opération d'Entrée/Sortie par seconde (IOPS)

Lorsqu'une machine a besoin d'accéder à une information sur l'espace de stockage, la machine demande au disque (Entrée) l'information et le disque fourni la donnée en retour (Sortie). Le disque répond par paquet d'informations. Si la donnée est supérieure à la taille du paquet, alors le disque répond en plusieurs paquets. Chaque disque peut envoyer un certain nombre de paquets par seconde, appelé IOPS (Input Output Per Second). L'IOPS d'un disque varie en fonction de :

  • Ses performances
  • Si c'est une action de lecture ou d'écriture
  • De la manière séquentielle ou aléatoire de la lecture/écriture de l'information.

11

Voici les capacités moyennes (source : wikipedia) :

Device

Type

IOPS

Remarque

7,200 rpm SATA drives HDD ~75-100 IOPS
10,000 rpm SATA drives HDD ~125-150 IOPS
10,000 rpm SAS drives HDD ~140 IOPS
15,000 rpm SAS drives HDD ~175-210 IOPS
Dépend de la marque SSD 400 à 9 608 000 IOPS Cela dépend fortement des marques et de modèle de SSD. Un SSD classique tourne autour de 85 000 IOPS en lecture aléatoire et 90 000 IOPS en lecture continue

La taille du paquet transférée dépend de la taille et la localisation des morceaux du fichier à récupérer sur le disque-dur. Cela explique pourquoi transférer un fichier de 1Go est plus rapide que de transférer 1 000 000 de fichiers de 1Ko. Cette taille de paquet est générale comprise entre 4 Ko et 512 Ko. La vitesse de transfère dépend donc de la taille du paquet et le nombre d'IOPS.

Vitesse de transfert = Taille du paquet x IOPS

Pour revenir à notre ESX, nous pouvons limiter le nombre d'IOPS à chaque disque virtuel. Par défaut, le disque virtuel n'a pas de limitation. En cas de conflit d'accès à la ressource, chaque disque virtuel a une priorité équivalente.

Lorsqu'une limitation est définie à un disque virtuel, cette limitation n'a lieu que si l'ESX détecte des conflits à l'accès de la ressource. L'ESX considère que l'accès à la ressource est conflictuelle quand la latence de la ressource dépasse un seuil défini (50 milllisecondes par défaut, valeur modifiable).

Attention, la limitation d'IOPS se défini pour chaque disque virtuel. Si une VM a plusieurs disques virtuels, il faut penser à imposer la limitation sur chaque disque.

Réseau

Les performances des réseaux sont définis par deux paramètres :

  • Partage de ressources (Pondération) : bas / normal / haut / personnalisé. Ce paramètre permet de définir la priorité entre différentes machines qui souhaitent utiliser les ressources machines.
  • Débit en Mbits : débit de la carte réseau virtuel de la VM. La VM ne peut dont pas dépasser ce débit

3 réponses à to “La performance sous VMWare : généralité (article 1/4)”

  • Seb:

    Merci pour ces informations très utiles 🙂

  • moms:

    trés bonne explication mais pourquoi cas n°3 La VM2 pourrait donc utiliser 2533 MHz et la VM3 5066 MHz (pondération) quel est le calcul effectué? mais la VM3 est limité à 4000 MHz. La VM2 peut donc utiliser plus de ressources

    • thibault.vandenbroek:

      L’ordre de traitement est:

      • Valeur minimum
      • Valeur maximum
      • Pondération
      • Valeur demandée

      VM1: Valeur minimum = 2000 MHz, valeur demandée 400 MHz ==> Ressource accordée
      VM2: Valeur minimum = 1000 MHz, valeur maximum: 4000 MHz, valeur demandée= Maximum ==> Valeur entre 1000 et 4000 MHz dépendant des ressources disponibles sur l’ESX.
      VM3: Valeur minimum = 1000 MHz, valeur maximum: 4000 MHz, valeur demandée= Maximum ==> Valeur entre 1000 et 4000 MHz dépendant des ressources disponibles sur l’ESX.

      Les VM2 et VM3 demandent chacun un maximum de ressources CPU. Il y a donc conflit de ressources. Pour résoudre ce problème de conflit, nous allons utiliser le paramètre de pondération:
      VM3 a droit à deux fois plus de ressources que la VM2 donc (8000 MHz – 400 MHz)*2/3= 5066 MHz. Or la VM3 ne peut pas dépasser 4000 MHz donc VM3= 4000MHz. La VM2 peut donc prendre le reste de ressource: 8000MHz – 4000 MHz – 400 MHz = 3600 MHz.

      Résultats:
      VM1: 400 MHz
      VM2: 3600 MHz
      VM3: 4000 MHz

Laisser un commentaire

Merci d'effectuer cette opération simple pour valider le commentaire *

Mots-clés
RSS Feed