{"id":3943,"date":"2014-02-13T06:42:17","date_gmt":"2014-02-13T05:42:17","guid":{"rendered":"https:\/\/www.kolja-engelmann.de\/blog\/?p=3943"},"modified":"2014-02-13T06:42:17","modified_gmt":"2014-02-13T05:42:17","slug":"iperf-trafficgenerator-in-einer-vmware-virtuellen-maschine-beschleunigen","status":"publish","type":"post","link":"https:\/\/www.kolja-engelmann.de\/blog\/2014\/02\/iperf-trafficgenerator-in-einer-vmware-virtuellen-maschine-beschleunigen\/","title":{"rendered":"iPerf Trafficgenerator in einer VMWare virtuellen Maschine beschleunigen"},"content":{"rendered":"<p>Um einen konstanten Datenstrom zu erzeugen, nutzen wir auf Arbeit gern den Trafficgenerator <a href=\"http:\/\/iperf.fr\/\" target=\"_blank\">iPerf<\/a>, weil es diesen praktisch auf allen Systemen eine Implementierung gibt und hohe Durchsatzraten deswegen nicht nur zwischen PCs sondern auch zu mobilen Endger\u00e4ten getestet werden k\u00f6nnen.<\/p>\n<p>Ab und an nutze ich iPerf auch aus einer VMWare virtuellen Maschine mit Windows 7 x64 Betriebssystem heraus. Das hat bisher auch immer gro\u00dfartig funktioniert und ich konnte Spitzengeschwindigkeiten von bis zu 980Mbps erreichen. Gestern jedoch pl\u00f6tzlich nicht mehr. Die Datenrate war nicht stabil und so hoch wie gew\u00fcnscht war sie l\u00e4ngst nicht. Dabei verlangte ich dem System gar nicht viel ab. Ich startete mit einem simplen UDP Traffic von 150Mbit:<\/p>\n<pre class=\"lang:default decode:true\">iperf -c &lt;Zielrechner&gt; -u -b150M -i2 -t1000<\/pre>\n<p>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\u00f6chte hier meine Ans\u00e4tze dokumentieren, vielleicht helfen diese ja auch euch, wenn es mal hakt.<\/p>\n<h3>VMWare Network-Interface ver\u00e4ndern<\/h3>\n<p>Meine VM emulierte zun\u00e4chst eine Intel 82545EM Gigabit Ethernet Netzwerkkarte (Typ <code>e1000<\/code>). 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 \u00fcber die UI \u00e4ndern zu k\u00f6nnen, aber offensichtlich ist diese M\u00f6glichkeit mittlerweile dem vSphere Server vorbehalten. Doch nat\u00fcrlich kann man noch immer die Konfigurationsdateien (*.vmx) direkt bearbeiten und dort alle Vorkommen von &#8222;<code>e1000<\/code>&#8220; durch z.B. &#8222;<code>vmxnet3<\/code>&#8220; ersetzen, denn <code>vmxnet3<\/code> ist die aktuellste Entwicklung und implementiert viele Hardwareoffloading-Mechanismen, die einen h\u00f6heren Datendurchsatz erm\u00f6glichen. Eine <a href=\"http:\/\/kb.vmware.com\/selfservice\/microsites\/search.do?language=en_US&amp;cmd=displayKC&amp;externalId=1001805\" target=\"_blank\">\u00dcbersicht der m\u00f6glichen Interfacetypen<\/a> gibt es direkt in der VMWare KB.<\/p>\n<h3>Hardwarevirtualisierung anschalten<\/h3>\n<p>Warum diese Funktion bei vielen Rechnern im BIOS\/UEFI im Auslieferungszustand ausgeschaltet ist, bleibt mir ein R\u00e4tsel. Auf jeden Fall sollte man einmal nachsehen, ob ein entsprechender Punkt im BIOS\/UEFI verf\u00fcgbar ist und aktiviert werden kann, damit VMWare nicht auf seine Softwareemulation bestimmter Hardwarebausteine zur\u00fcckgreifen muss, die zwar gut, aber nicht so schnell wie eine native Hardwarevirtualsierung arbeiten.<\/p>\n<h3>iPerf optimieren<\/h3>\n<p>iPerf selbst bietet die meisten Stellschrauben bei der Optimierung des Datendurchsatzes. Besonders die <a href=\"http:\/\/iperf.fr\/#tuningudp\" target=\"_blank\">Parameter<\/a> -l, -P und -i helfen weiter.<\/p>\n<ul>\n<li>-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. \u00dcberlegt also gut, ob ihr die Ausgabe \u00fcberhaupt ben\u00f6tigt.<\/li>\n<li>-P erm\u00f6glicht 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\u00f6nnte man versuchen, die Sendeleistung zu verringern und stattdessen die Anzahl der Threads erh\u00f6hen, um so alle verf\u00fcgbaren Prozessorkerne auszulasten.<\/li>\n<li>-l gibt im Falle von UDP Paketen die Sende und Empfangspuffergr\u00f6\u00dfe und liegt von Haus aus bei 8K. Das ist etwas wenig und konnte in meinen Tests auf bis zu 63K erh\u00f6ht werden, was dem maximalen Durchsatz sehr zu Gute kam. Nat\u00fcrlich muss auf Serverseite der Empfangspuffer gleicherma\u00dfen erh\u00f6ht werden.<\/li>\n<\/ul>\n<h3>Windows optimieren<\/h3>\n<p>Sollte <code>iperf<\/code> auf einem Windows-System laufen, dann kann man Prozessor-hungrige Dienste wie die Firewall, Windows Defender, Windows Update und auch die Windowssuche kurzfristig deaktivieren.<\/p>\n<pre class=\"lang:default decode:true\">net stop WinDefend\r\nnet stop MpsSvc\r\nnet stop wuauserv\r\nnet stop WSearch<\/pre>\n<p>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\u00e4ntchen herauszuholen. Dazu verwende ich am liebsten den <a href=\"http:\/\/www.speedguide.net\/downloads.php\" target=\"_blank\">TCPOptimizer von SpeedGuide.net<\/a>. Nat\u00fcrlich kann man jede Einstellung auch direkt \u00fcber die Konsole oder die Registry vornehmen, aber der TCPOptimizer ist \u00fcbersichtlicher und kann auch alle Werte schnell wieder auf &#8222;Standard&#8220; zur\u00fccksetzen. Das vorgeschlagene Backup der Einstellungen empfehle ich auf jeden Fall, falls man sich mal &#8222;veroptimiert&#8220;, was leicht passieren kann.<\/p>\n<div id=\"attachment_3946\" style=\"width: 510px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.kolja-engelmann.de\/blog\/wp-content\/uploads\/2014\/02\/tcp-optimizer-screenshot.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3946\" class=\"size-large wp-image-3946\" alt=\"Screenshot der Oberfl\u00e4che des TCPOptimizers von Speedguide.net\" src=\"https:\/\/www.kolja-engelmann.de\/blog\/wp-content\/uploads\/2014\/02\/tcp-optimizer-screenshot-500x444.png\" width=\"500\" height=\"444\" srcset=\"https:\/\/www.kolja-engelmann.de\/blog\/wp-content\/uploads\/2014\/02\/tcp-optimizer-screenshot-500x444.png 500w, https:\/\/www.kolja-engelmann.de\/blog\/wp-content\/uploads\/2014\/02\/tcp-optimizer-screenshot-300x266.png 300w, https:\/\/www.kolja-engelmann.de\/blog\/wp-content\/uploads\/2014\/02\/tcp-optimizer-screenshot.png 565w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/a><p id=\"caption-attachment-3946\" class=\"wp-caption-text\">Screenshot der Oberfl\u00e4che des TCPOptimizers von Speedguide.net<\/p><\/div>\n<p>Ohne etwas Hintergrundwissen \u00fcber die vielen Optionen sollte man jedoch keinesfalls mit der Optimierung beginnen, gro\u00df ist die Wahrscheinlichkeit, dass man nachher schlechter dasteht als zuvor. Auch der eingebauten Automatik w\u00fcrde ich nicht soviel Vertrauen schenken. Lest euch vor einem Eingriff lieber die <a href=\"http:\/\/www.speedguide.net\/tcpoptimizer.php\" target=\"_blank\">Anleitung<\/a> durch. Im obigen iPerf Beispiel schaltete ich jedoch <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/windows\/hardware\/ff546436(v=vs.85).aspx\" target=\"_blank\">Direct Cache Access<\/a> und <a href=\"http:\/\/technet.microsoft.com\/de-de\/library\/gg162716(v=ws.10).aspx\" target=\"_blank\">NetDMA<\/a> explizit an.<\/p>","protected":false},"excerpt":{"rendered":"<p>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&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":3944,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[122,101],"class_list":["post-3943","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-allgemein","tag-iperf","tag-vmware"],"jetpack_featured_media_url":"https:\/\/www.kolja-engelmann.de\/blog\/wp-content\/uploads\/2014\/02\/iperf-icon.png","jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.kolja-engelmann.de\/blog\/wp-json\/wp\/v2\/posts\/3943","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kolja-engelmann.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kolja-engelmann.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kolja-engelmann.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kolja-engelmann.de\/blog\/wp-json\/wp\/v2\/comments?post=3943"}],"version-history":[{"count":0,"href":"https:\/\/www.kolja-engelmann.de\/blog\/wp-json\/wp\/v2\/posts\/3943\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kolja-engelmann.de\/blog\/wp-json\/wp\/v2\/media\/3944"}],"wp:attachment":[{"href":"https:\/\/www.kolja-engelmann.de\/blog\/wp-json\/wp\/v2\/media?parent=3943"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kolja-engelmann.de\/blog\/wp-json\/wp\/v2\/categories?post=3943"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kolja-engelmann.de\/blog\/wp-json\/wp\/v2\/tags?post=3943"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}