Wir haben einen Heartbeat / DRBD / Pacemaker / KVM / Qemu / libvirt-Cluster, der aus zwei Knoten besteht. Auf jedem Knoten wird Ubuntu 12.04 64 Bit mit den folgenden Paketen / Versionen ausgeführt:
- Kernel 3.2.0-32-generic # 51-Ubuntu SMP
- DRBD 8.3.11
- qemu-kvm 1.0 + noroms-0ubuntu14.3
- libvirt 0.9.13
- Schrittmacher 1.1.7
- Herzschlag 3.0.5
Die virtuellen Gäste führen Ubuntu 10.04 64 Bit und Ubuntu 12.04 64 Bit aus. Wir verwenden eine libvirt-Funktion, um die Funktionen der Host-CPUs an die virtuellen Gäste weiterzugeben, um die beste CPU-Leistung zu erzielen.
Hier ist ein allgemeines Setup für diesen Cluster:
- VM "Monitoring" hat 4 vCPUs
- VM "Monitoring" verwendet ide als Festplattenschnittstelle (wir wechseln derzeit aus offensichtlichen Gründen zu VirtIO).
Wir haben kürzlich einige einfache Tests durchgeführt. Ich weiß, dass sie nicht professionell sind und keine hohen Standards erreichen, aber sie zeigen bereits einen starken Trend:
Knoten A führt VM "bla" aus Knoten B führt VM "Überwachung" aus
Wenn wir eine Datei von VM "bla" zu VM "Monitoring" synchronisieren, erreichen wir nur 12 MB / s. Wenn wir ein einfaches dd if = / dev / null von = / tmp / blubb innerhalb der VM- "Überwachung" durchführen, erreichen wir ungefähr 30 MB / s.
Dann haben wir der VM- "Überwachung" 4 weitere vCPUs hinzugefügt und sie neu zusammengestellt. Die VM- "Überwachung" verfügt jetzt über 8 vCPUs. Wir haben die Tests mit den folgenden Ergebnissen erneut ausgeführt: Wenn wir eine Datei von VM "bla" zu VM "Monitoring" synchronisieren, erreichen wir jetzt 36 MB / s. Wenn wir ein einfaches dd if = / dev / null von = / tmp / blubb innerhalb der VM- "Überwachung" ausführen, erreichen wir jetzt ungefähr 61 MB / s.
Für mich ist dieser Effekt ziemlich überraschend. Wie kommt es, dass das Hinzufügen weiterer virtueller CPUs für diesen virtuellen Gast automatisch mehr Festplattenleistung innerhalb der VM bedeutet?
Ich habe keine Erklärung dafür und würde mich sehr über Ihre Beiträge freuen. Ich möchte verstehen, was diese Leistungssteigerung verursacht, da ich dieses Verhalten zu 100% reproduzieren kann.
kvm_trace
zu sehen, wie sich die Anzahl derIO_Exits
Änderungen ändert, wenn Sie die CPU-Nummern ändern. Ich würde vermuten, dass Sie IDE verwenden, die mit den Gast-CPUs geplant wird. Mit virtio sollte die Leistung konsistent sein, und wenn sich die Datenebene in Qemu befindet, wird sie drastisch gesteigert. Eine andere Vermutung kann die Tatsache sein, dass Sie eine Distribution verwenden, die für einen fehlerhaften Virtualisierungsstapel bekannt ist.Antworten:
Ich werde eine sehr grobe Idee / Erklärung geben.
In einer OP-Situation sollte neben der Messung innerhalb der VM auch der Host betrachtet werden.
In diesem Fall können wir davon ausgehen, dass die folgenden Punkte korrekt sind
"monitoring"
) E / A zunimmt, werden mehr CPUs zugewiesen. Wenn die Host-E / A bereits maximal ausgelastet war, sollte es keinen Leistungsgewinn für die E / A geben."bla"
ist nicht der begrenzende Faktor Da sich die"monitoring"
E / A-Leistung ohne Änderungen an verbessert hat"bla"
Zusätzlicher Faktor
Was passiert, wenn mehr CPU zugewiesen wird
"monitoring"
?Wenn
"monitoring"
mehr CPUs zugewiesen ist, es Gewinn mehr Rechenleistung, sondern es auch Gewinn Verarbeitungszeit für I / O.Dies hat nichts damit zu tun,
rsync
da es sich um ein einzelnes Thread-Programm handelt.Es ist die E / A-Schicht, die die erhöhte CPU-Leistung oder genauer die erhöhte Verarbeitungszeit nutzt.
Wenn
"monitoring"
während des Tests ein CPU-Überwachungsprogramm (z. B. oben) verwendet wird, wird nicht eines angezeigt, sondern die gesamte CPU-Auslastung steigt, und auch% wa. % wa ist die Wartezeit für E / A.Diese Leistungssteigerung tritt nur auf, wenn Ihre Host-E / A nicht maximal ist. aus.
Ich kann die CPU-Planung auf der KVM-Site nicht finden, aber in diesem Blog wird erwähnt, dass KVM CFS und cgroups verwendet. Das folgende Zitat folgt
Kurz gesagt, mehr CPU = mehr CPU-Zeit = mehr E / A-Zeitschlitz in einem bestimmten Zeitraum.
quelle