libvirt 10.0: Schnellere Live-Migration von QEMU-VMs

Virtuelle Maschinen im Live-Betrieb umzuziehen, kostet Nerven und Zeit. Das neue libvirt 10.0 räumt jetzt mit der post-copy-Funktion einige Steine aus dem Weg.

In Pocket speichern vorlesen Druckansicht 2 Kommentare lesen

(Bild: iX)

Lesezeit: 3 Min.
Von
  • Michael Plura

Die neue Version 10.0 von libvirt bringt primär zusätzliche Funktionen für virtuelle Maschinen (VMs) und deren Migration unter QEMU. Für die Migration einer laufenden VM, also dem Verschieben von einem QEMU-Hypervisor auf einen anderen QEMU-Hypervisor im Betrieb, wurde mit libvirt 10.0 die post-copy-Funktion implementiert. Beim klassischen pre-copy wird der sich verändernde Live-Inhalt des Arbeitsspeichers der laufenden VM in mehreren Iterationen an das Ziel übertragen, bis die Speicher der alten und der neuen VM identisch sind. Erst dann wird der aktuelle Prozessorstatus übertragen und die VM auf dem neuen Host gestartet. Das kostet viel Bandbreite im Netz und damit Zeit.

post-copy beschleunigt VM-Migration

Bei der neuen post-copy-Migration wird die Übertragung des Speicherinhalts einer VM so lange aufgeschoben, bis ihr Prozessorstatus an den Ziel-Host gesendet wurde. Erst dann werden die Speicherinhalte übertragen, beginnend mit den Speicherseiten, die die neue VM lesen will. Insgesamt soll das neue Konzept für VMs die Gesamtmigrationszeit reduzieren und gleichzeitig die "Liveness" der VM während der Migration aufrechterhalten. Beide Host-Systeme müssen dazu das post-copy-preempt von libvirt 10.0 unterstützen.

libvirt 10.0 für QEMU bietet außerdem Unterstützung für das Mapping von I/O-Threads auf Virtqueues von VirtIO-BLK-Geräten sowie die automatische Auswahl/Bindung von VFIO-Treibern. Sobald einem Gast ein Gerät über VFIO mit <hostdev managed='yes'> zugewiesen wird, durchsucht libvirt 10.0 nun die modules.alias-Datei des laufenden Kernels nach der spezifischsten Übereinstimmung mit diesem Gerät und bindet statt vfio-pci eben diesen Treiber an das Gerät an.

Neu ist auch eine automatische Größenanpassung von virtuellen Laufwerken, die auf Blockgeräten basieren, auf die volle Größe des Gerätes. Die Beschreibung verwirrt etwas, denn diese Anpassung geschieht nicht etwa immer, sondern nach wie vor nur auf Wunsch des Anwenders. Man muss dann nicht mehr wie zuvor die maximale Größe des Blockgerätes herausfinden und übergeben, libvirt 10.0 erkennt diesen Wert aber nun selbst.

Ebenfalls vereinfacht wird die Migration von nicht gemeinsam genutztem Speicher auf Blockgeräten. Ein experimenteller Treiber für Hotplug/Unhotplug von PCI-Geräten steht unter libvirt 10.0 für erste Versuche zur Verfügung. Nicht mehr in das 10.0-Release geschafft hat es die Unterstützung von Clustern, um sie in der CPU-Topologie von Gästen abzubilden. Details zur neuen Version finden sich in den Release Notes.

(fo)