web-dev-qa-db-fra.com

KVM: Quelles fonctionnalités du processeur améliorent le fonctionnement des machines virtuelles?

Nous utilisons Ubuntu 12.04 avec les paramètres suivants:

  • Dell R910
  • Noyau 3.2.0-25-générique # 40-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux
  • kvm 1:84 + dfsg-0ubuntu16 + 1.0 + noroms + 0ubuntu13
  • qemu-kvm 1.0 + noroms-0ubuntu13
  • qemu-common 1.0 + noroms-0ubuntu13
  • qemu-kvm 1.0 + noroms-0ubuntu13
  • 4 x CPU Intel (R) Xeon (R) E7- 4870 à 2,40 GHz (chacun avec 10 cœurs physiques, HT et Intel VT activés)
  • Les invités Windows n'ont actuellement pas de VirtIO, mais cela va bientôt changer

Nous exécutons plusieurs invités Windows sur cette machine, l'un d'eux est Windows 2003 32 bits, un autre Windows 2008 (64 bits). Nous sommes actuellement aux prises avec des problèmes de performances et avons joué avec les modèles de CPU.

Nous utilisons généralement "qemu-system-x86_64 pour notre invité Windows 32 bits, par exemple:

/usr/bin/qemu-system-x86_64 -S -M pc-1.0 -cpu qemu32 -enable-kvm -m 4096 -smp 4,sockets=4,cores=1,threads=1 [...] 

La performance de cet invité s'est avérée un peu faible. Nous n'avons pas encore exécuté de benchmark, mais disons que la copie d'une grande quantité de données (fichiers) à l'intérieur du VM d'un répertoire à l'autre va beaucoup plus vite lorsque nous basculons le modèle de CPU de " -cpu qemu32 "à" -cpu Nehalem ". Les fichiers qui ont pris environ 2: 40h à copier maintenant copient en 40 minutes. Bien sûr, ce n'est pas un test de haute qualité et il y a beaucoup de place pour une tentative plus professionnelle. Mais c'est un indicateur clair que le choix du modèle de processeur correct peut affecter considérablement les performances de l'invité.

Maintenant, je suis devenu curieux et j'ai couru:

qemu-x86_64 -cpu ?
x86           [n270]
x86         [athlon]
x86       [pentium3]
x86       [pentium2]
x86        [pentium]
x86            [486]
x86        [coreduo]
x86          [kvm32]
x86         [qemu32]
x86          [kvm64]
x86       [core2duo]
x86         [phenom]
x86         [qemu64]

Et:

kvm -cpu ?model
 x86       Opteron_G3  AMD Opteron 23xx (Gen 3 Class Opteron)
 x86       Opteron_G2  AMD Opteron 22xx (Gen 2 Class Opteron)
 x86       Opteron_G1  AMD Opteron 240 (Gen 1 Class Opteron)
 x86          Nehalem  Intel Core i7 9xx (Nehalem Class Core i7)
 x86           Penryn  Intel Core 2 Duo P9xxx (Penryn Class Core 2)
 x86           Conroe  Intel Celeron_4x0 (Conroe/Merom Class Core 2)
 x86           [n270]  Intel(R) Atom(TM) CPU N270   @ 1.60GHz
 x86         [athlon]  QEMU Virtual CPU version 1.0
 x86       [pentium3]
 x86       [pentium2]
 x86        [pentium]
 x86            [486]
 x86        [coreduo]  Genuine Intel(R) CPU           T2600  @ 2.16GHz
 x86          [kvm32]  Common 32-bit KVM processor
 x86         [qemu32]  QEMU Virtual CPU version 1.0
 x86          [kvm64]  Common KVM processor
 x86       [core2duo]  Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz
 x86         [phenom]  AMD Phenom(tm) 9550 Quad-Core Processor
 x86         [qemu64]  QEMU Virtual CPU version 1.0

Avec toutes ces différentes versions, c'est un peu difficile à deviner. "Nehalem" semble être le plus performant de cette liste. Maintenant, je me demande comment savoir quel modèle de processeur est le meilleur pour mon invité? En naviguant sur Internet, j'ai trouvé les ressources suivantes:

Quand j'ai lu ces sites correctement, ils prétendent que "-cpu Host" pourrait apporter les meilleures performances. Je n'ai pas encore de soucis concernant la migration, car les deux KVM sont équipés de la même manière (exactement le même matériel).

Alors, qu'est-ce que les administrateurs expérimentés KVM recommandent? Y a-t-il une règle d'or ou même une matrice, comme "ce modèle est le meilleur pour ce système d'exploitation invité"?

Mes excuses si je pouvais trouver ces informations par moi-même - j'ai effectué diverses recherches sur Google et parcouru de nombreux sites Web. Je n'ai pas pu trouver quelque chose qui réponde à ma question.

21
Valentin

C'est assez simple vraiment. Pour les clusters homogènes et les configurations à hôte unique, utilisez l'option Host. Pour les clusters mixtes, utilisez la version de processeur la plus basse disponible, donc si un hôte est Penryn et l'autre Nehalem, utilisez Penryn sur les deux.

Si vous utilisez RHEV ou oVirt, cela est déjà intégré. VMWare l'a appelé "EVC" et le positionne comme une fonctionnalité énorme.

Pour en revenir aux performances, vous avez certainement besoin de virtio partout où vous pouvez le mettre. Et si vous rencontrez toujours des goulots d'étranglement en matière de performances, ceux-ci peuvent généralement être résolus au cas par cas, selon l'endroit où ils se produisent.

[offtop] Sur votre choix de distribution j'ai déjà commenté dans un autre fil [/ offtop]

13
dyasny

Les invités Windows n'ont actuellement pas de VirtIO

Ne perdez plus de temps à modifier quoi que ce soit.
Installez les pilotes virtIO et revenez. La différence est si énorme que toute amélioration que vous pouvez trouver maintenant n'aura aucun sens avec virtIO.

Juste un exemple avec l'un de nos serveurs:
- sans virtIO, un W2k3 peut gérer environ 10 utilisateurs Terminal Server
- avec virtIO, la même machine avec le même système d'exploitation gère actuellement 120 à 125 utilisateurs avec peu de ralentissement. Et nous avons ajouté une autre machine virtuelle pour exécuter SQL Server sur le même ordinateur physique

11
Gregory MOUSSAT

Qemu ne fonctionne pas de la même manière que de nombreux autres hyperviseurs. Pour commencer, il peut fournir une émulation complète. Cela signifie que vous pouvez exécuter du code x86 sur un processeur ARM, par exemple. En mode KVM, lorsque vous l'utilisez, il ne fonctionne pas réellement faites cela ... le processeur est exposé quoi qu'il arrive, mais ce qui est rapporté au système d'exploitation sera modifié par le -cpu drapeau.

Si vous voulez des vitesses plus rapides, c'est un point de départ pour essayer d'adapter au mieux les capacités du processeur virtuel à votre processeur réel. Cela réduira les cas où des opcodes sous-optimaux sont appelés pour exécuter des tâches, et réduira également les opcodes qui ne sont pas possibles sur votre matériel en cours de conversion en autre chose en premier. Étant donné que votre modèle de processeur Xeon est sorti début 2011, il prend probablement en charge la plupart du temps en ligne avec la série Core i7. Pour cela, je dirais que l'architecture Nehalem est votre meilleure émulation.

Citant l'un de vos liens ( Tuning KVM ):

Pour transmettre toutes les fonctionnalités du processeur hôte disponibles à l'invité, utilisez le commutateur de ligne de commande

 qemu -cpu Host

si vous souhaitez conserver la compatibilité, vous pouvez exposer certaines fonctionnalités à votre invité. Si tous vos hôtes ont ces fonctionnalités, la compatibilité est conservée:

 qemu -cpu qemu64,+ssse3,+sse4.1,+sse4.2,+x2apic

Ainsi, si vous pensez que vous pouvez finir par déplacer suffisamment les choses pour créer un problème, vous pouvez trouver tous les jeux d'instructions pris en charge que vous pensez que tout processeur que vous avez actuellement ou que vous pourriez avoir à l'avenir prend en charge et les énumère.

Cependant, la plupart du temps, vous voulez vous en tenir à -cpu Host. La spécification d'un processeur avec moins d'indicateurs disponibles signifie que les applications éviteront d'utiliser des fonctionnalités qui pourraient les rendre plus rapides.

8
Jeff Ferland

Vous obtenez l'option "-cpu Host" confuse. Cette option n'active PAS uniquement toutes les fonctionnalités du processeur spécifiques à votre système hôte, elle active TOUTES les fonctionnalités prises en charge par votre processeur et toutes celles qui peuvent être émulées même si votre processeur ne les prend pas en charge.

-hôte CPU
. être émulé.

Source: http://wiki.qemu.org/Features/CPUModels

3
Joe Huss