Warum ist meine Übertragung langsamer als FileZilla ?
-
Hallo,
ja, ich weiß der Titel ist erst etwas verwirrend aber:
Wenn ich mir mit FileZilla eine DAtei von meinem Server auf meinen PC downloade (100 mbit LAN), dann schafft es FileZilla irgendwie 99% meiner Netzwerkkarte auszulasten. (Diese Zahl habe ich dem TaskManager entnommen) Wenn ich aber
eine Datei mit meinem Programm verschicke (C++/Sockets), dann erreiche ich nur eine maximale Auslastung von vlt. 70-80 %... Ich habe gelesen, dass es durchaus normal ist, dass die Netzwerkkarte oft nicht 100% erreicht, aber FileZilla schafft das ja anscheinend auch ?! Also....
Ich verstehe das auch grade deshalb nicht:
Ich habe ansich, die schnellste Variante programmiert, die mit Sockets möglich ist, zumindest glaube ich, dass es die schnellste ist (Falls nicht, bitte korregieren)Ich habe eine TCP Socket Connection zwischen 2 PC's im Lan.
Der Server führt die blockierende Funktion recv() in eine Schleife durch, bis ein bestimmter befehl reinkommt.
Der Client führt send() mit 8096 byteblöcken durch, ebenfalls in einer Schleife..
Bis eben eine Datei übertragen ist...So, nun verstehe ich nicht, wie FileZilla das mit knapp 100% bei mir schafft, aber mein Programm nur mit "lächerlichen" 85%. Ich meine, was macht denn FileZilla anders ?
Gruß Socket
-
Da FileZilla ja ein OpenSource Projekt ist, würde ich mal vorschlagen, du schaust dir dessen Code einfach mal an.
-
mach mal die blöcke größer
-
Hi,
an welche Größe denkst du so ? Ich meine, kann man beliebig große Blöcke verschicken ? Hat die Netzwerkkarte denn nicht irgendwann einen Puffer der voll ist oder so ?Gruß Socket
-
Hey, könnte es was bringen die Optionen "SO_RCVBUF" bzw. "SO_SNDBUF" zu ändern ?
Bei Windoof ist ja 8192 jeweils Standard... Würde es einen Geschwindigkeitsvorteil bringen diese Werte ggf. auf 64 kb hochzuschrauben ?
Oder waren dass die Blockgrößen, von denen du geredet hasT ?
-
Ok, anscheinend hattet ihr Recht. Mit größerem Puffer gehts um einiges schneller, aber auch nicht 99% ... Ich erreiche nun knapp 95 %... Und auch FileZilla erreicht nicht 99%. das steht zwar in meinem Taskmanager, aber wenn ich im Programm schaue, wieviel tatsächlich übertragen wird, dann sehe ich lediglich 10.6 mb/s Was auf ca 86 % schliesst. Ich nehme an, dass bei FTP wohl noch ein 2ter Socket Daten transportiert!
-
Es ist so gut wie unmöglich, eine Netzwerkkarte zu 100% auszulasten, also mit einer 100Mbit Netzwerkkarte 12 MB/s zu verschicken. 10-11 MB/s ist das maximum, was man ohne Laborbedingungen rausholen kann.