KVM / Qemu, Ubuntu: Warum verbessern mehr Gast-CPUs die Festplatten-E / A schnell?

9

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.

Valentin
quelle
2
Verwenden Sie ein speziell entwickeltes Benchmarking-Tool wie iozone oder bonnie ++ , um andere Variablen zu entfernen .
ewwhite
Es wäre interessant, wie die tatsächlichen CPU-Auslastungen aussehen ... ist etwas CPU-gebundenes, das an einem versteckten Ort eingeführt wurde (rsync plus wahrscheinlich ssh ist sicherlich bis zu einem gewissen Grad, also werden die Netzwerktreiber auf diese Weise eingeführt, und dd könnte unerwartete CPU-gebundene Dinge tun ...), oder warten die Dinge tatsächlich suboptimal aufeinander, weil weniger Ausführungsthreads verfügbar sind?
Rackandboneman
3
Führen Sie aus, um kvm_tracezu sehen, wie sich die Anzahl der IO_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.
Dyasny
@ ewwhite: Ja, professionelle Tests durchzuführen wäre eine gute Wahl. Ich möchte jedoch zuerst verstehen, warum dieses E / A-Verhalten auftritt. @ rachandboneman: Als ich das letzte Mal nachgesehen habe, hatten die 4 CPUs einen sehr hohen Wartewert (ca. 70-80%). @dyasny: Danke, das werde ich versuchen. Wie kann ich überprüfen, ob die Datenebene aktiviert ist / aktuell verwendet wird?
Valentin
Die Datenebene ist vorerst experimentell, und ich bin mir ziemlich sicher, dass Fedora die erste Distribution sein wird, die sie aufnimmt. pl.digipedia.org/usenet/thread/11769/28329
dyasny

Antworten:

9

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

  1. Bei allen Tests ist die Host-E / A-Bandbreite (Festplattenbandbreite) nicht maximal. Wenn VM ( "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.
  2. "bla"ist nicht der begrenzende Faktor Da sich die "monitoring"E / A-Leistung ohne Änderungen an verbessert hat"bla"
  3. Die CPU ist die Hauptfabrik für Leistungssteigerung (im OP-Fall), da E / A nicht der Flaschenhals ist und OP keine Änderungen der Speichergröße erwähnt. Aber warum? Oder wie?

Zusätzlicher Faktor

  1. Das Schreiben dauert länger als das Lesen. Dies gilt für VM und Host. Einfach ausgedrückt: VM wartet, bis der Host das Lesen und Schreiben beendet hat.

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, rsyncda 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

Innerhalb von KVM wird jede VCPU einem Linux-Prozess zugeordnet, der wiederum Hardware-Unterstützung verwendet, um den für die Virtualisierung erforderlichen "Rauch und Spiegel" zu erstellen. Daher ist eine VCPU nur ein weiterer Prozess für das CFS und auch für cgroups, der es Linux als Ressourcenmanager ermöglicht, die Zuweisung von Ressourcen zu verwalten - normalerweise proportional, um die Zuweisung von Einschränkungen festzulegen. cgroups gelten auch für Speicher, Netzwerk und E / A. Gruppen von Prozessen können Teil einer Planungsgruppe sein, um Anforderungen an die Ressourcenzuweisung auf hierarchische Gruppen von Prozessen anzuwenden.

Kurz gesagt, mehr CPU = mehr CPU-Zeit = mehr E / A-Zeitschlitz in einem bestimmten Zeitraum.

John Siu
quelle
Vielen Dank, dass Sie diese Antwort geschrieben haben. "Mehr vCPUs bedeuten mehr Verarbeitungszeit für E / A" ist die Erklärung, nach der ich gesucht habe. Das Kopfgeld wert!
Valentin