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%.
kvm_trace
pour voir comment le nombre deIO_Exits
changements 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.Réponses:
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
"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."bla"
n'est pas le facteur limitant Comme les"monitoring"
performances d' E / S amélioré sans modification"bla"
Facteur supplémentaire
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
rsync
car 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
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.
la source