VirtualBox Performance ausreizen (Win Host, Linux Guest) - Tipps included, wer hat noch mehr?
-
Ich habe am Wochenende die Anforderung gehabt, von einem alten Linux-Rechner 2 TB Daten von einem (Software-)RAID5 auf einen neuen Win7-Rechner zu kopieren. Ich möchte keine Diskussion über den Sinn von Software-RAIDs oder den Umstieg von Linux auf Windows, mir geht es darum, die gemachten Erfahrungen mit VirtualBox (wie es dazu kam, kommt gleich) zu teilen und hoffentlich von Euch weitere Erfahrungswerte zu bekommen.
Der alte Rechner hat sich selbst in Sachen Geschwindigkeit noch nie übertroffen, die vier Festplatten waren noch dazu über einen altmodischen 32-bit PCI Bus an einem billigst-Controller angeschlossen, da das Mainboard kein SATA hat. Schnell war klar, dass das Kopieren selbst über GBit-LAN (welches bei dem alten Rechner wiederum über einen altmodischen 32-bit PCI Bus an eine billigst-Netzwerkkarte angeschlossen war) zu lange brauchen würde, da ich auf die Daten nicht so lange verzichten konnte. Mit einer durchschnittlichen Datentransferrate von 12 MB/s hätte der Kopiervorgang 46 Stunden gedauert.
Ich kam also auf die Idee, die alten Platten über die reichlich vorhandenen Anschlüsse am neuen Mainboard unter Windows 7 auszulesen. Da das Software-RAID5 mit ext3 Dateisystem naturgemäß unter Windows einige Schwierigkeiten bereitete, wollte ich eine virtuelle Maschine mit Linux aufsetzen, die Festplatten dort als raw devices einbinden und das ganze über bridged Networking auf den Windows-Host ziehen.
Gesagt, getan. Bei VMWare Server musste ich feststellen, dass die doch recht alte frei verfügbare Version nicht in der Lage war, mir die Festplatten roh zur Verfügung zu stellen. VMWare Player schied aufgrund der Performance im Vergleich zu VirtualBox auch recht schnell aus. Das Booten des installierten Ubuntu 11.04 Konsolensystems mit Samba dauerte auf dem Player rund eine Minute, VirtualBox zeigt mir nach 15 Sekunden das Login-Prompt.
Also beschränkten sich meine weiteren Tests auf VirtualBox. Das Ziel, lediglich die Daten zu kopieren, war längst aus den Augen verloren und ich wollte das Maximum an Leistung aus meinem "Server", der unter Windows 7 in einer Desktopanwendung virtualisiert war, herausholen.
Die VBox war zunächst mit Standardwerten konfiguriert, ihr wurde ein Kern und 512 MB RAM zugeteilt. Die Festplatten waren dem emulierten SATA-Controller (AHCI) zugeteilt. VT-d, nested paging und alle anderen offensichtlich vorteilhaften Optionen sind aktiv, VirtualBox Guest Treiber sind installiert.
Erste Tests brachten beim Kopieren aus der VBox auf ein lokales Laufwerk auf dem Host per Windows-Netzwerk Übertragungsraten von 30-40 MB/s zustande. Die CPU-Auslastung von smbd lag dabei bei rund 75%, der Rest wurde vom md5_raid geschluckt.
Zuerst vermutete ich, dass der emulierte Zugriff auf die Festplatten diese CPU-Auslastung verursachte, stellte dann aber fest, dass die Emulation der Netzwerkhardware die meiste Leistung schluckte. Ich änderte also die bereitgestellte Netzwerkkarte auf Paravirtualized (virtio). Hier muss ein spezieller Treiber auf der Guest-Seite laufen, der keine komplette Netzwerkhardware emuliert. Ich gebe zu, verstanden habe ich das Prinzip nicht so ganz, aber die Beschreibung im VirtualBox-Handbuch las sich gut. Zum Glück wird der virtio-Treiber von Ubuntu 11.04 out of the box unterstützt. Und siehe da, die Übertragungsraten stiegen auf 60-70 MB/s bei einer CPU-Auslastung von rund 40% smbd und 40% md5_raid.
An dieser Stelle habe ich das ganze vorerst beendet und die Daten kopiert. Dennoch würde mich interessieren, ob sich hier noch mehr rausholen lässt (das Kopieren von Win7 zu Win7 über ein echtes GBit-Kabel bringt 100-120 MB/s). Fallen jemandem von Euch noch potentielle Tweaks auf Seiten der Device-Anbindung, der emulierten Hardware (SCSI statt SATA?), des Software-RAID5 oder sonstiger Komponenten ein?
Ich betone, dass es sich hierbei um rein akademische Interessen handelt und dieser virtuelle Server nicht für den produktiven Einsatz gedacht ist.
-
Klingt an sich alles recht durchdacht und systematisch.
Hast du auch mal versucht, nicht über Samba zu kopieren? Ich habe es bis dato noch nie geschafft, da die Transferraten rauszuholen, die man mit Gigabit-LAN bekommen sollte. Die 60-70MB/s sind schon ein sehr guter Wert.
Probier vielleicht mal mit netcat oder socketpipe, was du über die Leitung komplett ohne IO-Last drüberbekommst und schau dir dann an, ob du nicht ohne Samba fast besser dran bist.