Schlechte Netzwerkleistung der virtuellen KVM-Maschine

Schlechte Netzwerkleistung der virtuellen KVM-Maschine

Ich betreibe eine virtuelle 32-Bit-Linux-Maschine auf KVM. Die Host-Maschine ist eine 64-Bit-Linux-Maschine, die mit einem LAN verbunden ist. Der Versuch, Dateien mit scp von der KVM-Maschine auf einen Server im LAN zu übertragen, führt zu einer miserablen Leistung, etwa 500 kB/s über Gigabit-Ethernet. Etwa 1 % der erwarteten Rate. Irgendwelche Vorschläge?

Antwort1

Erwägen Sie die Verwendungvirtio. Es ermöglicht eine direkte Verbindung zwischen der VM und dem Host, ohne dass (langsame) Hardware emuliert werden muss. Ich habe damit große Verbesserungen der Netzwerkleistung gemessen.

Beispielsweise können Sie das Virtio-Netzwerkgerät mit dem KVM-Befehlszeilenparameter „-net nic,model=virtio“ aktivieren.

Wenn Sie Virtio-Blockgeräte verwenden, beachten Sie bitte, dass die neuen Gerätenamen dann „vda1“ usw. lauten. Dies sollte jedoch kein Problem darstellen, da aktuelle Linux-Distributionen die Partitionen anhand ihrer UUIDs erkennen.

Antwort2

Möglicherweise liegt ein Problem mit der Disk-E/A-Leistung im Gast vor. Wenn Sie ein Disk-Image verwenden, können Sie mit wenigen Schritten eine bessere Leistung erzielen:

cacheZunächst müssen Sie mit den Optionen der Festplattenkonfiguration Ihres Gastes herumspielen .

Standardmäßig wird Writethrough-Caching für alle Blockgeräte verwendet. Dies bedeutet, dass der Host-Seitencache zum Lesen und Schreiben von Daten verwendet wird, aber nur dann eine Schreibbenachrichtigung an den Gast gesendet wird, wenn die Daten vom Speichersubsystem als geschrieben gemeldet wurden.

Das Writeback-Caching meldet Datenschreibvorgänge als abgeschlossen, sobald die Daten im Host-Seitencache vorhanden sind. Dies ist sicher, solange Sie Ihrem Host vertrauen. Wenn Ihr Host abstürzt oder die Stromversorgung unterbrochen wird, kann es beim Gast zu Datenbeschädigungen kommen. Bei Verwendung der Option -snapshot wird standardmäßig das Writeback-Caching verwendet.

Die Hostseite kann mit cache=none vollständig vermieden werden. Dadurch wird versucht, Disk-IO direkt im Gastspeicher auszuführen. QEMU kann dennoch eine interne Kopie der Daten erstellen.

Einige Blocktreiber funktionieren mit cache=writethrough schlecht, insbesondere qcow2. Wenn Leistung wichtiger ist als Korrektheit, sollte cache=writeback mit qcow2 verwendet werden. Wenn für ein qcow2-Disk-Image kein explizites Caching angegeben ist, wird standardmäßig cache=writeback verwendet. Für alle anderen Disk-Typen ist cache=writethrough die Standardeinstellung.

Dann müssen Sie auch mit der Aufzugsoption des Kernels herumspielen: Sie müssen elevator=noopIhrer Grub-Linux-Befehlszeile Folgendes anhängen:

# Edit your /etc/default/grub.conf (on Debian-based distribution)
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"

Eine bessere Erklärung hierzu finden Sie unter:http://lonesysadmin.net/2008/02/21/elevatornoop/; aber kurz gesagt: Sowohl der Linux-Kernel des Hosts als auch der Linux-Kernel des Gasts versuchen, die E/A zu optimieren, und das ist für den Gast tendenziell schlimmer als alles andere (der Gast sollte diese Aufgabe dem Host überlassen).

verwandte Informationen