UDP-Verbindung zu langsam



  • Hallo zusammen,
    ich habe ein Problem mit der Netzwerk-Performance.
    Und zwar habe ich zwei Rechner, welche direkt über Gigabit-Ethernet miteinander verbunden sind. Ich möchte nun eine Anwendung schreiben, welche auf diese Performance zugreifen kann.
    Nun habe ich zum Test auf beiden Maschinen mal Linux und mal WindowsXP installiert, und habe mit Iperf die Performance zwischen den beiden gemessen.
    Das verrückte: TCP ist schneller als UDP?

    1. Linux als Client:

    UDP: 651 Mbits/sec (0.24% Daten-Verlust)

    TCP: 706 Mbits/sec

    2. WindowsXP als Client:

    UDP: 111 Mbits/sec (0.049% Daten-Verlust)

    TCP: 248 Mbits/sec

    Übertragung zwischen 2 Windows-Rechnern:

    UDP: 108 Mbits/sec (0.0086% Daten-Verlust)

    TCP: 418 Mbits/sec

    Wie ist das möglich? Normalerweise sollte UDP schneller sein. Und wie kann ich das ändern?

    Vielen Dank vorab

    Gruss Christian



  • HEHE, da sieht man wieder dass windows mi TCP/UDP nicht umgehen kann...



  • irgendwas firewallmäßiges im spiel? interessanterweise dauert das untersuchen von verbindungslosem traffic länger. aber das problem liegt wohl eher wo anders - nur so ne vermutung.

    grüße, mm



  • Bei den Windows-Rechnern sind auf jeden Fall die Firewalls unten. Beim Linux-System habe ich die Debian-Standard-Einstellungen. Aber aufgrund der Tatsache, daß die beiden sich verbinden können zeigt eigentlich deutlich daß die Firewall kein Hindernis ist.



  • kein hindernis für einen erfolgreichen datentransfer, jedoch wird jedes udp-paket untersucht. bei tcp verkehr geht das prinzipiell einfacher. ich kenne aber den linux paketfilter nicht wirklich und weiß daher nicht wie er intern arbeitet.

    grüße, mm



  • mezzo mix schrieb:

    kein hindernis für einen erfolgreichen datentransfer, jedoch wird jedes udp-paket untersucht.
    grüße, mm

    Stimmt das kann sein, aber das größte Problem ist ja dass UDP zwischen Windows zu Windows so langsam ist, und hier ist definitiv die Firewall auf beiden Seiten aus.

    Gruss Christian



  • Der Unterschied Windows <-> Linux muss nicht daher kommen dass Windows so langsam ist. Ich hab' zwischen 2 Windows PCs auch extrem unterschiedliche Transferraten, je nachdem in welche Richtung die Daten fliessen. Liegt u.U. an der Netzwerkkarte bzw. deren Treibern. Oft kann man da auch noch was drehen, Anzahl der Sende-/Empfangspuffer raufdrehen etc.

    Wäre interessant ob Windows immer noch langsamer ist wenn du die Netzwerkkarten tauscht, bzw. überhaupt gleich die ganze Hardware (so dass Windows dann auf der Hardware läuft wo du vorher Linux laufen hattest und umgekehrt).

    Sonst könnte es noch sein dass Iperf mit UDP langsamer ist, weil es irgendwas falsch macht oder einfach nur schlecht programmiert ist 🙂

    Und: wie sehen denn die Transferraten Linux <-> Linux aus?



  • Hallo, ich bin gerade erst wieder dazu gekommen mich mit dem Thema weiter zu beschäftigen. Also ich benutze die gleiche Hardware unter Linux wie unter Windows, dran liegt es nicht. Unter Linux habe ich fast immer die maximale Geschwindigkeit. Unter Windows konnte ich noch eine erhebliche Steigerung erreichen, als ich den TCP-Cache erhöht habe. Das ging mit einem Eintrag in die Registry (Tcp1323Opts), hat aber trotzdem nicht die Performance von Linux.
    Für UDP habe ich überhaupt keine Möglichkeit gesehen, wie man hier den Cache höher setzen kann. UDP kricht weiter bei 150MBit hinterher.

    Kennt jemand eine Möglichkeit, wie man den UDP-Cache hochschrauben kann?

    Gruss Christian



  • columbus schrieb:

    Das verrückte: TCP ist schneller als UDP?

    bei kleinen Datenmengen ist UDP sicherlich schneller als TCP, da bei tcp ein großer overhead aufgrund des three-way handshakes auftritt. Wie sich das ganze bei großen Datenmengen verhält, ist aber nicht gesagt.



  • hihi.
    TCP cache.
    ja, wenns sowas denn geben würde 🙂
    also.
    da es keinen "UDP cache" gibt kann man den auch nicht "hochschrauben".



  • Ja klar gibt sowas nicht. Die Datenpackete werden als Ethernetframes direkt an die Anwendung weitergereicht. Deswegen muss sich ja jeder Programmierer der eine Netzwerk-Anwendung schreibt erst mal darum kümmern aus den Ethernetframes die Nutzdaten rauszulesen.

    http://rdweb.cns.vt.edu/public/notes/win2k-tcpip.htm

    Gruss Christian



  • columbus, du hast leider garkeine ahnung von netzwerktechnik, tcp und udp.
    daher werde ich das auch nicht weiter mit dir diskutieren, sorry.



  • Man sieht, wie viele Mythen über den Windows-Stack existieren.
    Ja, allerdings kann man den Buffer für UDP erhöhen.

    setsockopt( socket, SOL_SOCKET, SO_RCVBUF, (char *)&udpBufSize, sizeof(udpBufSize) );
    

    Wir haben ähnliche Versuche mit Windows UDP gemacht und Datenraten bis zu 940-950MBit/s erreicht. Der Buffer hilft in dem Fall, den Packetverlust zu minimieren.

    Schöne Grüße



  • mezzo mix schrieb:

    interessanterweise dauert das untersuchen von verbindungslosem traffic länger.
    [...]
    bei tcp verkehr geht das prinzipiell einfacher.

    hast du dazu 'ne quelle? oder sind das persönliche erfahrungen?


Anmelden zum Antworten