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

21

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 référence, mais disons que la copie d'une grande quantité de données (fichiers) à l'intérieur de la machine virtuelle d'un répertoire à l'autre va beaucoup plus vite lorsque nous basculons le modèle de processeur de "-cpu qemu32" vers "-cpu Nehalem ". Les fichiers qui ont pris environ 2: 40h à copier copient maintenant dans les 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 pourrait 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 hôtes KVM sont équipés de la même manière (exactement le même matériel).

Alors, que recommandent les administrateurs KVM expérimentés? Existe-t-il une règle d'or ou même une matrice, comme "ce modèle est le meilleur pour cet OS 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.

Valentin
la source
Pourquoi s'embêter avec le commutateur -cpu? Laissez-le simplement de côté.
psusi
1
Pourquoi ne pas vous en préoccuper? Afaik cela pourrait apporter des améliorations de performances.
Valentin
S'il doit intervenir et émuler des choses, cela va nuire aux performances. Essayez sans.
psusi
2
Je viens de découvrir que libvirt ajoute automatiquement le paramètre "-host qemu32", car nous ne le définissons pas.
Valentin
3
@psusi: Je viens de le tester aujourd'hui ... lorsque je quitte le commutateur -cpu, les performances sont aussi bonnes que j'ai choisi le meilleur modèle de processeur possible.
Valentin

Réponses:

13

C'est assez simple vraiment. Pour les clusters homogènes et les configurations à hôte unique, utilisez lehost option. 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]

Dyasny
la source
Merci dyasny, j'espérais que vous répondriez et me fourniriez une sorte de "règle d'or"!
Valentin
11

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

Ne perdez plus de temps à peaufiner 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 de 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

Gregory MOUSSAT
la source
Merci pour l'astuce. Oui, VirtIO devrait être activé sans aucun doute, mais nous rencontrons quelques problèmes avec l'invité Windows 2003 qui doivent être résolus en premier. En plus de cela, je veux avoir des éclaircissements sur le sujet du modèle de CPU.
Valentin
C'est une des raisons pour lesquelles j'utilise Hyper-V. Depuis 2008, cela signifie AUCUNE INSTALLATION et cela signifie que tous les pilotes pour Hyper-V sont maintenus avec Windows Update. Les problèmes de compatibilité sont mortels.
TomTom
@TomTom Hyper-V n'est pas le seul hyperviseur certifié pour exécuter Windows. Et la certification dans ce contexte signifie SVVP / WHQL.
dyasny
1
Non, mais c'est le seul qui fonctionne dès le départ car il a les pilotes déjà installés;) De plus, je pense que XEN comme ils piggiback sur les pilotes Hyper-V. Ne pas avoir à maintenir un autre élément mis à jour en externe est une très bonne chose. Peu m'importe s'ils sont signés - le point est que je n'ai pas besoin de regarder un autre fournisseur, car tout passe par la mise à jour de Windows. Je SOUHAITE juste que MS ouvre Windows Update pour des logiciels tiers;)
TomTom
1
Comme je suis certain que vous avez entendu parler de modèles de slipstreaming et de machines virtuelles, je ne vais pas (presque) les mentionner :) Mon problème avec Hyper-V est le support extrêmement médiocre des invités Linux.
dyasny
8

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, cela ne fait pas vraiment cela ... le processeur est exposé quoi qu'il arrive, mais ce qui est signalé au système d'exploitation sera modifié par l' -cpuindicateur.

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 risquez de déplacer suffisamment de choses pour créer un problème, vous pouvez trouver tous les ensembles 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.

La plupart du temps, cependant, 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.

Jeff Ferland
la source
4
Il utilise KVM, qui a besoin de ces extensions de virtualisation et ne fait pas d'émulation do; même s'il est basé sur qemu
Javier
1
Toujours +1 vote de ma part pour les efforts et la recommandation d'utiliser -cpu host!
Valentin
3

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.

-cpu host
est une bonne option mais pas la plus efficace, car elle peut activer des options pouvant être émulées que votre processeur ne prend pas en charge, le système invité peut être légèrement ralenti à chaque fois qu'il essaie d'utiliser l'une de ces fonctionnalités qui doit être émulée .

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

Joe Huss
la source
1
Au départ, je pensais que cette réponse faisait référence à la prise en charge des instructions, par exemple la prise en charge SSE qui pouvait être émulée. Mais bien sûr, cela n'a pas de sens car vous exécutez en mode KVM ou TCG et pas un mélange des deux. Donc je suppose que l'émulation à laquelle il est fait référence ici pourrait être des choses comme x2apic où il n'y a pas de support h / w mais le noyau peut le simuler. Je ne mentionne cela que pour essayer de clarifier ce qui précède, car cela m'avait d'abord confus.
Neil McGill
-2

CentOS 6.7 me donne des performances KVM + Spice correctes sur Dell R910. Je pense qu'une fois que vous aurez essayé, vous ne reviendrez à rien d'autre (sérieusement)!

Marc Cyr
la source