Virtualisierung: I/O Last senken mit KVM/libvirt
Linux/OpenSource, ubuntuusers.de Dezember 11th, 2011Das Thema Virtualisierung geht einher mit neuen Anforderungen an die Ressourcen des Host Systems. Da zwar die CPU Leistung kontinuierlich zunimmt (Anzahl Kerne, Leistung/Stromverbrauch) und auch RAM Speicher immer günstiger wird, jedoch die Leistung der Festplatten nicht zunimmt, ergeben sich neue Probleme: Selbst mit schnell drehenden Platten und RAID Verbund wirkt sich die erhöhte Last durch mehrere virtualisierte Maschinen auf einem „Blech“ deutlich aus, da die Leistung – gemessen an der Anzahl der I/O Operationen pro Zeiteinheit – nicht mit gewachsen ist. Durch mehrere virtualisierte Systeme verändert sich auch das Zugriffsprofil: Selbst lineares Lesen jedes einzelnen Systems für sich sieht für die Festplatten eher wie ein Zufallsmuster aus, da mehrere Systeme parallel arbeiten. Ein Weg zur Erhöhung der I/O Operationen pro Sekunde ist starkes Caching oder Einsatz von SSD Festplatten (die wieder eigene Probleme haben).
Für den Einsatz unter Linux hat sich KVM als Standard für Virtualisierung durchgesetzt, ergänzt um Abstraktionsschichten wie libvirt. Vor allem bei den derzeit angebotenen dedicated Servern lohnt sich die Nutzung als Virtualisierungshost, da dies die Management-Möglichkeiten deutlich verbessert werden und die Flexibilität erhöht wird. Bei dieser Konstellation wird in der Regel die lokale Platte/Platten als Storage verwendet, mit den oben angeführten Einschränkungen. Was noch dazu kommt: Virtualisiert man die Festplatten „direkt“, stellt diese also als IDE oder SCSI Device zur Verfügung, kommt deutlicher Overhead dazu. Der lässt sich nicht vermeiden, wenn man Windows oder ein Betriebssystem virtualisiert, das keine Paravirtualisierung unterstützt.
Paravirtualisierung liegt dann vor, wenn das virtualisierte System etwas davon weiß, in welcher Umgebung es läuft, und entsprechend kooperativ ist. Mit Linux ist das kein Problem, unter anderem durch die Vorarbeiten die fuer die Xen Virtualisierung erfolgt ist. Daher sollte man nicht als „ide“ sondern „virtio“ als Schnittstelle für Gäste verwenden, die das unterstützen, um geringere Last und höhere Performance zu erzielen.
Bei diesem Bild kann man sich ganz gut einen Eindruck davon machen, wie sich diese relativ kleine Änderung ausgewirkt hat:
Die Umstellung von bestehenden Gastsystemen sieht dabei wie folgt aus:
- Im Gast stellt man in der /etc/fstab die Devices von „hdX“ auf „vdX“ um, das „X“ wird dabei durch den jeweiligen Buchstaben ersetzt, z.B. „hda“ durch „vda“
- Der Bootloader (bei Ubuntu in der Regel grub) sollte von UUID booten, nicht von einem device, dies kann man in der
/boot/grub/menu.lst
nachsehen - Nun fährt man den Gast herunter, und editiert die Konfiguration auf dem Host, bspw. mittels „virsh edit“
- Zu ersetzen sind die Eintraege
<target dev='hdX' bus='ide'/>
durch jeweils<target dev='vdX' bus='virtio'/>
- Anschließend kann der Gast wieder gestartet werden
Ab einer gewissen Größenordnung ist natürlich die einzig gangbare Lösung ein separates Storage System.
Neue Kommentare