3 votes

Comment améliorer les performances E/S de Citrix XenServer ?

J'ai un Citrix XenServer 6.1 installé sur un serveur HP (1x Intel Xeon E5630 @ 2.53GHz (4 cores, 8 threads, RAM : 752MB pour dom0 et 55286MB pour les invités). Le serveur possède 2 disques scsi en miroir et est utilisé pour le dev/test.

L'hôte gère 5 invités que j'ai activés ou désactivés pendant les tests. La plupart des tests de performance ont donné de mauvais résultats. Mais j'aimerais régler Xen : par exemple, un "dd if=/dev/zero ..." donne 130MB/s sur l'hôte, mais seulement 75MB/s sur un invité isolé.

Si je lance un dd if=/dev/urandom sur un invité, le CPU est saturé et j'obtiens 7MB/s.

Via tune-vcpus J'ai réussi à donner 8 vCPUs à dom0 et j'ai obtenu moins de perfs. La valeur par défaut est de 4 vCPUs et j'aimerais donner à dom0 seulement 1 vCPU mais cela ne fonctionne pas.

Voici ce que j'ai essayé :

  • Editar /etc/sysconfig/tunes-vcpus > NR_DOMAIN0_VCPUS=1 et MAX_NR_DOMAIN0_VCPUS=1
  • /etc/init.d/tune-vcpus début min
  • redémarrer l'hôte

J'ai également essayé

/opt/xensource/libexec/xen-cmdline -set-dom0 blkbk.reqs=256

pour obtenir plus de performance du stockage, cela ne change rien.

J'ai activé la fonction Qos sur les VBD et j'ai donné la plus haute priorité à celui où je fais mes tests.

Après tout cela, je n'obtiens aucun gain de performance en matière d'E/S. Y a-t-il autre chose à faire ?

1voto

Godric Seer Points 349

Vous pouvez essayer de trouver une bonne valeur pour max_sectors_kb. Par défaut, elle est fixée à 512 ou 1024. Par exemple, vous pouvez le fixer à 128 et tester à nouveau (dom0 et domU).

echo 128 > /sys/block/[your blockdevice]/queue/max_sectors_kb 

Ce paramètre n'est pas permanent. Ajoutez une entrée dans le fichier /etc/rc.local pour le définir au démarrage.

Veuillez afficher vos résultats.

1voto

Il semble que vous fassiez spécifiquement référence au débit de stockage d'un invité. Il ne s'agit que d'une mesure parmi d'autres des performances. Le débit d'E/S est une fonction de largeur de bande y latence . Cela signifie que, pour obtenir un débit élevé, il faut minimiser la latence et maximiser la bande passante (c'est-à-dire faire circuler beaucoup de données à tout moment et répondre aux demandes de données le plus rapidement possible).

Lorsque vous êtes dans un environnement virtualisé, vous aurez inévitablement un temps de latence supplémentaire pour répondre à vos demandes. Cela signifie qu'il sera très difficile pour un domU d'atteindre le débit que vous voyez dans le dom0. Heureusement, cet impact est minimisé en permettant à plus de données de circuler à tout moment (soit en ayant de nombreuses machines virtuelles effectuant des E/S, soit en ayant des requêtes suffisamment importantes).

Compte tenu de votre matériel et des taux auxquels vous faites référence (~150 Mo/s), je serais très surpris si vous ne pouviez pas obtenir un débit similaire de la part d'un invité, compte tenu de votre système d'exploitation. dd a les bons paramètres.

Essayez ceci à partir de votre "dom0" et de votre "domU" (la commande ci-dessous écrira 500MB de données sur delete.me :

dd if=/dev/zero of=delete.me bs=1M count=500 oflag=direct

Les oflag=direct s'assurer que ces écritures contournent les caches de mémoire tampon des VM (dom0 et domU).

Consultez également le document suivant pour mieux comprendre comment XenServer 6.1.0 met en œuvre le stockage virtualisé et ses implications en termes de performances (y compris les conseils de réglage pour le nombre de vCPU et l'épinglage) :

http://support.citrix.com/article/CTX136861

1voto

Florian Heigl Points 1443

Une chose que vous pouvez essayer d'ajouter est de basculer l'ordonnanceur io dans la vm sur deadline, et de désactiver les fusions io à ce niveau. Cela devrait réduire la latence des entrées-sorties en général et pourrait mieux fonctionner avec la structure des anneaux d'entrées-sorties de Xen.

echo    1       >       /sys/block/$dev/queue/nomerges 

Mon raisonnement, et mon expérience, est que le code bloc de Linux n'est pas vraiment intelligent mais pense qu'il l'est. Il essaiera donc idéalement de fusionner toutes les demandes d'E/S en une seule avant de les transmettre au pilote du disque. Dans le cas de Xen, l'action suivante consistera à les séparer pour qu'elles tiennent dans le tampon circulaire. Elles se retrouvent alors dans dom0 et le pilote de disque est dans une bien meilleure position pour savoir ce qui doit être fusionné puisqu'il n'a pas besoin de prendre en compte les connaissances d'une seule VM pour l'alignement.

Si cela n'aide pas, annulez le changement, mais c'est ce que je ferais si toutes les autres solutions avaient déjà été essayées.

Peut-être votre serveur a-t-il été abandonné depuis longtemps, mais je pense que cela pourra encore aider quelqu'un d'autre.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X