Re: Dziwy ?

Autor: Rafal Maszkowski (rzm_at_rymunda.torun.pdi.net)
Data: Tue 17 Jun 1997 - 12:11:32 MET DST


Jaroslaw Lis <lis_at_papuga.ict.pwr.wroc.pl> wrote:
> On 16 Jun 97 06:09:28 GMT, dybol_at_phys.amu.edu.pl (Piotr A Dybczynski)
> >Mam do sciagniecia z USA kilkaset megabajtow danych naukowych.[...]
> >Na poczatku sciagalem jedna paczke, gdy skonczylo sie druga itd.
> >Ale gdy ktoregos dnia transfer wzrosl do 5.5 KB/s (przed 7:00
> >u nas) zaryzykowalem i zainicjowalem drugi transfer jednoczesnie.
> >I co?! I dla dwoch jednoczesnie sciaganych zbiorow trasfer byl nawet
> >jeszcze troszke wiekszy zamiast polowy, ktorej sie spodziewalem.
> >I BYLY TO FAKTYCZNE PREDKOSCI, W TYM SAMYM CZASIE SCIAGNALEM DWA RAZY TYLE
> >CO PRZEDTEM. Po chwili uruchomilem wiec jednoczesne sciaganie siedmiu
> >zbiorow I TO SAMO!
> Wzglednie normalne. Pliki sa wysylane w pakietach, po okolo 500-1500B.
> Tyle ze strona nadawcza wysyla naraz kilka pakietow, po czym czeka na
> potwierdzenie przynajmniej pierwszego. Problem w tym, ze potwierdzenie
> nie nadejdzie wczesniej niz po ~1 sekundzie - tyle sie te pakiety
> przepychaja po laczach i satelitach. Innymi slowy - wysylajacy w
> pewnym momencie czeka na potwierdzenie, a lacze jest puste.
> drugi transfer pliku miesci sie w tych chwilach.
> Dokladniej, to nadawca wysyla nie iles tam pakietow, co odbiorca za
> kazdym potwierdzeniem wysyla ile ma bajtow wolnego bufora. A bufor ma
> 'TCP Window' bajtow poczatkowo. Typowa wartosc to 8192B.
> Tylko - gdzie sie to zmienia pod Linuxem? I w G95?
> Bo w trumpecie bez problemow :-).

Fragment tcpblasta z przykladami:

        { unsigned int bufsize, size;
                /* get/setsockopt doesn't return any error really for SO_SNDBUF,
                   at least on Linux, it limits the buffer only [256..65536] */
                if (getsockopt(f, SOL_SOCKET, SO_SNDBUF, &bufsize, &size)==-1)
                        printf("tcp/udpblast getsockopt: %s", strerror(errno));
                printf("read SO_SNDBUF = %d\n", bufsize);
                if (setbufsize!=-1) {
                        if (setsockopt(f, SOL_SOCKET, SO_SNDBUF, &setbufsize, sizeof(setbufsize))==-1)
                                printf("tcp/udpblast setsockopt: %s", strerror(errno));
                        if (getsockopt(f, SOL_SOCKET, SO_SNDBUF, &bufsize, &size)==-1)
                                printf("tcp/udpblast getsockopt: %s", strerror(errno));
                        printf("set SO_SNDBUF = %d\n", bufsize);
                }
        }

Default ustawia sie przy kompilacji. W 2.1 pewnie bedzie sie to robic
przez /proc, chyba ze juz jest w /proc/sys/net/core .

> Ze zwiekszeniem radze nie przesadzac - daje kiepskie rezultaty przy
> obciazonych laczach - pakiety sie gubia.

Zwiekszenie bufora nie zwieksza wielkosci pakietu jezeli pakiet i tak
juz jest wielkosci MTU, wiec nie powinno robic roznicy.

R.

-- 
Rafal Maszkowski rzm_at_torun.pdi.net           http://www.torun.pdi.net/~rzm
Opinia publiczna powinna byc zaalarmowana swoim nieistnieniem - St. J. Lec


To archiwum zostało wygenerowane przez hypermail 2.1.7 : Wed 19 May 2004 - 16:04:11 MET DST