Windows limitiert Bandbreite auf 1/7?
-
Hallo,
ich habe hier ein Problem, das ich nicht zum ersten Mal beobachte und das ich auch nach stundenlangem Suchen im Web nicht lösen konnte. Mit anderen Worten: Ihr seid meine letzte Hoffnung...Ich habe einige Anwendungen (selbstprogrammierte und andere, u.a. VLC media player), die gelegentlich große Datenmengen in Echtzeit durchs LAN streamen (sollen). Alle diese Programme leiden an dem Problem, dass Windows sie offenbar in der Geschwindigkeit limitiert. Ich bin hier in einem 100 MBit/s-Netzwerk, jedoch bekommen meine Programme davon nicht mehr als einen Bruchteil ab (momentan 1/7). Auch dann nicht, wenn das betroffene Programm das einzige ist, welches gerade das Netzwerk beansprucht. Das Kopieren von Dateien im Netzwerk (Ordnerfreigabe im Windows-Explorer) klappt dagegen mit voller Geschwindigkeit.
Hier mal ein Screenshot des Taskmanagers (gibt es hier eigentlich kein IMG-Tag?):
http://img69.imageshack.us/img69/850/taskmgrnetzwerklimit.pngWeiß jemand, wie man dieses Limit abschalten kann, bzw. wodurch es verursacht wird? Ich habe das Problem mit Windows XP, Vista und 7.
Ich wäre wirklich sehr dankbar, wenn mir jemand helfen könnte.
-
Irgendeine andere aktive Komponente (aktiv im Sinne von "intelligenter als ein Kabel", nicht "sendet gerade Daten") dazwischen, und wenn ja, ist es ohne der immernoch so?
Für mich klingt das so, als würde irgendein QoS-Dienst dafür sorgen wollen, dass nicht die ganze Bandbreite belegt wird
-
Hallo zwutz,
vielen Dank für die schnelle Antwort. Das einzige "Intelligente", was dazwischen war, ist ein 5-Port-Switch. Ich habe ihn testweise mal weggenommen und die zwei Computer, zwischen denen gestreamt werden soll, direkt mit einem Crossover-Kabel verbunden. Zwar war dadurch jetzt mehr Bandbreite möglich (die Verbindung lief jetzt mit 1 GBit/s statt 100 MBit/s), jedoch wurde bei ca. 57 MBit/s (also 5,7% statt vorher 14%) wieder limitiert.Der Windows-Dateitransfer war - wie schon zuvor - nicht betroffen und nutzte 70% der Bandbreite (hier scheint mir die Festplatte der Flaschenhals zu sein).
weitere Ideen?
-
Bist du dir denn ganz sicher, dass da nicht einfach die Datenrate des Videos limitiert? (Vielleicht braucht der VLC einfach nicht mehr Bandbreite, weil das Video keine so hohe Datenrate hat. 57Mbit/s sind schon verflucht viel.)
-
Ja, da bin ich mir sicher. Ich habe das Video extra für den Test umkodiert, so dass es knapp 100 MBit/s hat. Außerdem gibt es auf der Empfängerseite Tonaussetzer und das Bild läuft zu langsam, also kommt offensichtlich nicht alles an.
Der sendende VLC player bekommt offenbar auch mit, dass er nicht so schnell senden kann, wie er möchte und puffert alles, was er nicht schnell genug los wird im Arbeitsspeicher. Der Speicherverbrauch steigt dadurch die ganze Zeit an, solange ich den Stream laufen lasse. Wenn ich dann auf der Senderseite Stopp drücke, werden die im Puffer befindlichen Daten noch zuende übertragen (und der Speicherverbrauch von VLC sinkt wieder).
-
Ich habe das gerade mal mit einem von mir geschriebenen Programm verglichen. Dieses ist zwar vor Urzeiten entstanden (und ziemlich naiv programmiert, alles geschiet synchron etc.), aber ich bin mir doch recht sicher, dass es nicht anderes macht als Daten durch die Leitung zu pressen. Trotzdem lastet Windows die Leitung etwa drei mal mehr aus. Schon interessant..
Edit: Ich kann das Programm auch einfach drei mal starten, dann steigt die Netzwerkauslastung auch linear mit.
-
Danke cooky, mit deinem Post hast du mich inspiriert.
Ich habe nun auch ein Programm geschrieben, das nichts anderes tut, als ein Paket nach dem anderen über die Leitung zu schieben bzw. zu empfangen, wahlweise UDP oder TCP. Erst lieferte es die gleichen ernüchternden Ergebnisse wie meine anderen Programme.
Doch dann
kam ich auf die Idee, mal die Paketgröße (auf Senderseite) zu variieren... Warum bin ich da nicht vorher drauf gekommen?? *Kopf -> Tischplatte*
Egal, jedenfalls macht die Paketgröße weit mehr aus, als ich bisher angenommen hatte. Ich habe das Programm dann mal so modifiziert, dass es 15 mal jeweils 100 MByte verschickt und zwar mit verschiedenen Paketgrößen. Die Unterschiede finde ich irgendwie schon beeindruckend. Ich habe die TCP-Geschwindigkeit mal mit dem Taskmanager visualisieren lassen und mit Paint die entsprechenden Paketgrößen dazu geschrieben:
http://img20.imageshack.us/img20/7431/winsocktcpthroughput.pngBei Paketgrößen bis 7 Bytes war bei mir die CPU der Flaschenhals. Was ich mir allerdings nicht ganz erklären kann, ist warum die Übertragungsrate bei einer packetsize von 63 Bytes wieder etwas einbricht
Diesen Einbruch habe ich in jeder meiner 5 Messungen beobachten können.
Als Fazit kann man jedenfalls sagen, dass man alle Paketgrößen unter 10 kB vergessen kann, wenn es um hohe Übertragungsraten geht.Ich bedanke mich an dieser Stelle nochmal bei allen, die mir geantwortet haben
Euch allen einen guten Rutsch ins Jahr 2013!
-
Windows macht send coalescing über Nagle's algorithm und delayed ACK. Bei Interesse ggf. selbst nachlesen.
Da die beiden nicht wirklich optimal arbeiten, und schon gar nicht mit kurzen dicken Leitungen, muss man also selbst aufpassen dass man ausreichend grosse Stücke verschickt.
Sonst werden die rausgehenden TCP/IP Pakete zu klein, und da pro Paket ein fixer Overhead von N Byte dazukommt, bedeutet dass dann natürlich miesen Throughput.
Warum VLC zu doof dazu ist das "richtig" zu machen weiss ich aber nicht - eigentlich hätte ich angenommen dass VLC brauchbaren Netzwerkcode hat.