iPerf Trafficgenerator in einer VMWare virtuellen Maschine beschleunigen
Um einen konstanten Datenstrom zu erzeugen, nutzen wir auf Arbeit gern den Trafficgenerator iPerf, weil es diesen praktisch auf allen Systemen eine Implementierung gibt und hohe Durchsatzraten deswegen nicht nur zwischen PCs sondern auch zu mobilen Endgeräten getestet werden können.
Ab und an nutze ich iPerf auch aus einer VMWare virtuellen Maschine mit Windows 7 x64 Betriebssystem heraus. Das hat bisher auch immer großartig funktioniert und ich konnte Spitzengeschwindigkeiten von bis zu 980Mbps erreichen. Gestern jedoch plötzlich nicht mehr. Die Datenrate war nicht stabil und so hoch wie gewünscht war sie längst nicht. Dabei verlangte ich dem System gar nicht viel ab. Ich startete mit einem simplen UDP Traffic von 150Mbit:
iperf -c <Zielrechner> -u -b150M -i2 -t1000
Die erreichte Datenrate lag bei unter 30MB. Erst nach zahlreichen Optimierungen sowohl auf (virtueller) Hard- aber auch auf Softwareebene erreichte ich mein Ziel. Ich möchte hier meine Ansätze dokumentieren, vielleicht helfen diese ja auch euch, wenn es mal hakt.
VMWare Network-Interface verändern
Meine VM emulierte zunächst eine Intel 82545EM Gigabit Ethernet Netzwerkkarte (Typ e1000
). Deren Hardwareemuluation ist jedoch mittlerweile veraltet und sollte durch einen neueren Adaptertyp ersetzt werden. Ich war mir auch sicher den Typ des Interfaces in irgendeiner VMWare Workstation Version über die UI ändern zu können, aber offensichtlich ist diese Möglichkeit mittlerweile dem vSphere Server vorbehalten. Doch natürlich kann man noch immer die Konfigurationsdateien (*.vmx) direkt bearbeiten und dort alle Vorkommen von „e1000
“ durch z.B. „vmxnet3
“ ersetzen, denn vmxnet3
ist die aktuellste Entwicklung und implementiert viele Hardwareoffloading-Mechanismen, die einen höheren Datendurchsatz ermöglichen. Eine Übersicht der möglichen Interfacetypen gibt es direkt in der VMWare KB.
Hardwarevirtualisierung anschalten
Warum diese Funktion bei vielen Rechnern im BIOS/UEFI im Auslieferungszustand ausgeschaltet ist, bleibt mir ein Rätsel. Auf jeden Fall sollte man einmal nachsehen, ob ein entsprechender Punkt im BIOS/UEFI verfügbar ist und aktiviert werden kann, damit VMWare nicht auf seine Softwareemulation bestimmter Hardwarebausteine zurückgreifen muss, die zwar gut, aber nicht so schnell wie eine native Hardwarevirtualsierung arbeiten.
iPerf optimieren
iPerf selbst bietet die meisten Stellschrauben bei der Optimierung des Datendurchsatzes. Besonders die Parameter -l, -P und -i helfen weiter.
- -i gibt an in welchen Zeitintervallen iPerf auf der Konsole eine Statusmeldung ausgibt. Besonders bei kleinen Werten (1-3) verbraucht dies erstaunlich viel CPU Power und kann die Datenrate senken. Überlegt also gut, ob ihr die Ausgabe überhaupt benötigt.
- -P ermöglicht das starten mehrerer paralleler Sende-Threads. Jeder der n-Threads versucht die im Parameter -b angegebene Datenrate an den Zielhost zu senden. Arbeitet in der VM also ein virtueller Prozessorkern bei 100% Last, könnte man versuchen, die Sendeleistung zu verringern und stattdessen die Anzahl der Threads erhöhen, um so alle verfügbaren Prozessorkerne auszulasten.
- -l gibt im Falle von UDP Paketen die Sende und Empfangspuffergröße und liegt von Haus aus bei 8K. Das ist etwas wenig und konnte in meinen Tests auf bis zu 63K erhöht werden, was dem maximalen Durchsatz sehr zu Gute kam. Natürlich muss auf Serverseite der Empfangspuffer gleichermaßen erhöht werden.
Windows optimieren
Sollte iperf
auf einem Windows-System laufen, dann kann man Prozessor-hungrige Dienste wie die Firewall, Windows Defender, Windows Update und auch die Windowssuche kurzfristig deaktivieren.
net stop WinDefend net stop MpsSvc net stop wuauserv net stop WSearch
Auch ein Blick in die Netzwerkeinstellungen von Windows lohnt sich. Seit Windows 7 sind diese von Haus aus zwar recht gut, aber einzelne Optimierungen helfen oftmals, um das letzte Quäntchen herauszuholen. Dazu verwende ich am liebsten den TCPOptimizer von SpeedGuide.net. Natürlich kann man jede Einstellung auch direkt über die Konsole oder die Registry vornehmen, aber der TCPOptimizer ist übersichtlicher und kann auch alle Werte schnell wieder auf „Standard“ zurücksetzen. Das vorgeschlagene Backup der Einstellungen empfehle ich auf jeden Fall, falls man sich mal „veroptimiert“, was leicht passieren kann.
Ohne etwas Hintergrundwissen über die vielen Optionen sollte man jedoch keinesfalls mit der Optimierung beginnen, groß ist die Wahrscheinlichkeit, dass man nachher schlechter dasteht als zuvor. Auch der eingebauten Automatik würde ich nicht soviel Vertrauen schenken. Lest euch vor einem Eingriff lieber die Anleitung durch. Im obigen iPerf Beispiel schaltete ich jedoch Direct Cache Access und NetDMA explizit an.