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