KVM / Qemu, Ubuntu: Pourquoi plus de processeurs invités améliorent-ils rapidement les E / S disque?

9

Nous avons un cluster Heartbeat / DRBD / Pacemaker / KVM / Qemu / libvirt composé de deux nœuds. Chaque nœud exécute Ubuntu 12.04 64 bits avec les packages / versions suivants:

  • Kernel 3.2.0-32-generic # 51-Ubuntu SMP
  • DRBD 8.3.11
  • qemu-kvm 1.0 + noroms-0ubuntu14.3
  • libvirt 0.9.13
  • stimulateur cardiaque 1.1.7
  • rythme cardiaque 3.0.5

Les invités virtuels exécutent Ubuntu 10.04 64 bits et Ubuntu 12.04 64 bits. Nous utilisons une fonction libvirt pour transmettre les capacités des CPU hôtes aux invités virtuels afin d'obtenir les meilleures performances CPU.

Voici maintenant une configuration courante sur ce cluster:

  • La «surveillance» des VM a 4 vCPU
  • La «surveillance» des VM utilise ide comme interface de disque (nous passons actuellement à VirtIO pour des raisons évidentes)

Nous avons récemment effectué quelques tests simples. Je sais qu'ils ne sont pas professionnels et n'atteignent pas des normes élevées, mais ils montrent déjà une tendance forte:

Le nœud A exécute la machine virtuelle "bla" Le nœud B exécute la surveillance "VM"

Lorsque nous rsynchronisons un fichier de VM "bla" vers VM "monitoring", nous n'atteignons que 12 Mo / s. Lorsque nous effectuons un simple dd si = / dev / null de = / tmp / blubb à l'intérieur de la «surveillance» de la machine virtuelle, nous atteignons environ 30 Mo / s.

Ensuite, nous avons ajouté 4 vCPU supplémentaires à la «surveillance» de la machine virtuelle et l'avons redémarrée. La «surveillance» de la VM dispose désormais de 8 vCPU. Nous avons relancé les tests avec les résultats suivants: Lorsque nous resynchronisons un fichier de VM "bla" vers VM "monitoring", nous atteignons maintenant 36 Mo / s. Lorsque nous effectuons un simple dd if = / dev / null of = / tmp / blubb à l'intérieur de la «surveillance» de la machine virtuelle, nous atteignons maintenant environ 61 Mo / s.

Pour moi, cet effet est assez surprenant. Comment se fait-il qu'en ajoutant apparemment plus de CPU virtuels pour cet invité virtuel, cela signifie automatiquement plus de performances de disque à l'intérieur de la machine virtuelle?

Je n'ai pas d'explication à cela et j'apprécierais vraiment votre contribution. Je veux comprendre ce qui provoque cette augmentation des performances car je peux reproduire ce comportement à 100%.

Valentin
la source
2
Utilisez un outil d'analyse comparative spécialement conçu comme iozone ou bonnie ++ pour aider à éliminer d'autres variables.
ewwhite
Il serait intéressant de voir comment les charges CPU réelles ... ...), ou est - il en fait des choses sous - optimale en attente pour l'autre en raison de moins threads d'exécution disponibles?
rackandboneman
3
exécuter kvm_tracepour voir comment le nombre de IO_Exitschangements lorsque vous modifiez les numéros de CPU. Je suppose que c'est parce que vous utilisez IDE, qui est programmé avec les CPU invités. Avec virtio, les performances doivent être cohérentes, et lorsque le plan de données est en qemu, il obtiendra un coup de pouce drastique. Une autre supposition peut être le fait que vous utilisez une distribution connue pour une pile de virtualisation de buggy.
dyasny
@ ewwhite: Oui, l'exécution de tests professionnels serait un bon choix. Cependant, je veux d'abord comprendre pourquoi ce comportement d'E / S se produit. @ rachandboneman: Quand j'ai regardé la dernière fois, les 4 CPU avaient une valeur d'attente très élevée (environ 70-80%). @dyasny: Merci, je vais essayer ça. Comment puis-je vérifier que le plan de données est activé / actuellement utilisé?
Valentin
Le plan de données est expérimental pour l'instant, et je suis à peu près certain que la première distribution à le récupérer sera Fedora. pl.digipedia.org/usenet/thread/11769/28329
dyasny

Réponses:

9

Je vais donner une idée / explication très approximative.

En situation OP, outre la mesure dans la machine virtuelle, l'hôte doit également être examiné.

Dans ce cas, nous pouvons supposer que les éléments suivants sont corrects

  1. Dans tout le test, la bande passante d'E / S hôte (disque) n'est pas max out. Au fur "monitoring"et à mesure que les E / S VM ( ) augmentent, plus de CPU lui sont allouées. Si les E / S de l'hôte étaient déjà au maximum, il ne devrait pas y avoir de gain de performances d'E / S.
  2. "bla"n'est pas le facteur limitant Comme les "monitoring"performances d' E / S amélioré sans modification"bla"
  3. Le processeur est la principale usine de gain de performances (dans le cas OP), car les E / S ne sont pas le goulot de la bouteille, et OP ne mentionne aucun changement de taille de la mémoire. Mais pourquoi? Ou comment?

Facteur supplémentaire

  1. L'écriture prend plus de temps que la lecture. C'est la même chose pour la machine virtuelle et pour l'hôte. En termes extrêmement simples: la VM attend que l'hôte termine la lecture et l'écriture.

Que se passe-t-il lorsque plus de CPU sont attribuées "monitoring"?

Quand "monitoring"est alloué plus de CPU, il gagne plus de puissance de traitement, mais il gagne également plus de temps de traitement pour les E / S.

Cela n'a rien à voir rsynccar c'est un programme à un seul thread.

Il s'agit de la couche d'E / S utilisant la puissance CPU accrue, ou plus précisément, le temps de traitement accru.

Si le programme de surveillance du processeur (par exemple, top) est utilisé "monitoring"pendant le test, il n'en affichera pas un, mais toute l'utilisation du processeur augmentera, ainsi que% wa. % wa est le temps d'attente consacré aux E / S.

Cette augmentation des performances ne se produira que lorsque les E / S de votre hôte ne sont pas au maximum. en dehors.

Je ne trouve pas la planification du processeur sur le site KVM, mais il y a ce blog mentionnant que KVM utilise CFS et cgroups, voici la citation

Dans KVM, chaque processeur virtuel est mappé à un processus Linux qui à son tour utilise l'assistance matérielle pour créer la «fumée et les miroirs» nécessaires à la virtualisation. En tant que tel, un vcpu n'est qu'un autre processus pour le CFS et aussi pour les groupes de contrôle qui, en tant que gestionnaire de ressources, permet à Linux de gérer l'allocation des ressources - généralement proportionnellement afin de définir des allocations de contraintes. les groupes de contrôle s'appliquent également à la mémoire, au réseau et aux E / S. Des groupes de processus peuvent faire partie d'un groupe de planification pour appliquer des exigences d'allocation de ressources à des groupes hiérarchiques de processus.

En un mot, plus de cpu = plus de temps de cpu = plus d'intervalle de temps d'E / S dans une période de temps donnée.

John Siu
la source
Merci d'avoir écrit cette réponse. "Plus de processeurs virtuels signifient plus de temps de traitement pour les E / S" est l'explication que je cherchais. Vaut la générosité!
Valentin