[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Upload begrenzen



On Thu, Jan 31, 2008 at 01:48:46PM +0100, Jürgen Hamel wrote:
> Hallo, beim Einsatz meines Programmes (CUON) in verschiedenen
> Firmen kommt es zu einem Problem. Das Programm sendet und empfängt
> Daten über DSL. Bei hoher Last kommt es oft vor, das das DSL
> einfriert. Test haben folgendes ergeben:
> Ist der Upload zu hoch, friert der download komplett ein, das
> heißt, wenn ein client größere Daten sendet, steigt der Upload auf
> 100% z.B. für 3 Minuten, der Download (und auch andere Uploads von
> anderen Clients) sinkt auf 0. 
> Ich habe das mit scp (Option -l für limit ) getestet und alles
> läuft super weiter, wenn ich den Upload auf 80% beschränke. 
> Da fast alles über einen Debian-Server läuft, möchte ich euch
> fragen, ob es eine einfache Möglichkeit gibt, den Netzwerkverkehr
> zur Default-Route zu begrenzen Also nur den Upload zum DSL-Router
> einschränken. 

Den Download könntest du auch nicht vernünftig beschränken. Aber den
Upload kannst du gut kontrollieren. Und das Problem hier ist, dass die
Bestätigungspakete für die Übertragung zu weit hinten in deiner
TCP-Warteschlange stecken und zu lange brauchen, bis sie "dran" sind. Du
müsstest dafür sorgen, dass mittels Begrenzung die Warteschlange
möglichst nicht vollläuft. -> Shaping.

Ich habe mir bei ein halbwegs simples Shaping auf Basis von tcng
(http://tcng.sourceforge.net/) laufen. Die meisten anderen
Shaping-Lösungen sind in der Tat höllisch kompliziert. Damit habe ich
den ausgehenden (egress) Traffic auf 90% der Upstream-Bandbreite
festgenagelt und damit werden auch Downloads nicht mehr gestört. Uploads
haben besonders Terminal-Sitzungen natürlich heftig gestört (teilweise
Latenzen um die 5 Sekunden bei SSH-Sitzungen).

Beispiel hier:

=======================================
#include "fields.tc"
dev ppp0
{
    egress
    {
         class ( <$bulk> )  if tcp_sport == 80 tcp_sport == 25;
         class ( <$interactive> )  if tcp_sport == 22;
         class ( <$dns> )  if tcp_sport == 53;
         class ( <$other> )    if 1;

         htb ()
         {
              /* ausgehenden Traffic runtershapen */
              class ( rate 350kbps, ceil 350kbps )
              {
                      $bulk = class ( rate 100kbps, ceil 300kbps ) { sfq; } ;
                      $interactive = class ( rate 10kbps, ceil 300kbps ) { sfq; } ;
                      $dns = class ( rate 10kbps, ceil 300kbps ) { sfq; } ;
                      $other = class ( rate 100kbps, ceil 300kbps ) { sfq; } ;
              }
         }
    }
}
=======================================

Daraus bastel ich mir mit "tcng -r ..." eine Shell-Datei, die das
Traffic-Shaping einstellt.

Gruß,
 Christoph
-- 
email@christoph-haas.de  www.workaround.org   JID: chrish@jabber.workaround.org
gpg key: 79CC6586         fingerprint: 9B26F48E6F2B0A3F7E33E6B7095E77C579CC6586


Reply to: