Apache a sendfile

Dalibor Straka dast na panelnet.cz
Pátek Červen 1 03:50:32 CEST 2007


On Wed, May 30, 2007 at 10:32:17PM +0200, Martin `MJ' Mares wrote:
> Ahoj!
> 
> > Tak furt lepsi 600MB kusy nez 190K kusy, ne?
> 
> To zajiste ano :-)  Ale lepsi 190K kusy nez nepouzivat sendfile() :-)
> 
> > Ale jinak mas pravdu, za stazeni DVD image Fedory 6 nabere jak proftpd,
> > tak jeden potomek Apache asi vterinu CPU time, takze to neni tak strasne.
> > Je otazka, jestli se ten buffer nebude nejak zmensovat pri vzrustu
> > tlaku ve virtualni pameti.
> 
> Ja myslim, ze je to obycejny send buffer od TCP, takze by se mel ridit
> podle /proc/sys/net/ipv4/tcp_wmem.
> 
Zajimave tvrzeni,

napsal jsem si kousek kodu s blokujicim write():
Cely kod sedi na http://dada.panelnet.cz/download/blockwrite.c

    fhost = myconnect("10.38.66.58", 4321);
	if (!fhost)
		return 1;
	while(1) {
		wr = write(fhost,buf, sizeof (buf));
		printf("Write: %d KiB, (w is %d)\n", sizeof (int)*(counter+=wr), wr);
	}

Na druhe strane jsem napsal "nc -l -p4321 >/dev/null" a hnedle na nej
udelal Ctrl-Z. Pak jsem spustil muj ./blockwrite a nasel hodnotu, kdy
se buffery preplni. Pri komunikaci 2.6.21 -> 2.4.34 dosel write
k hodnote "Write: 475136 Byte".

Muj notebook lili (2.6.21) ma:
dast na lili:~/src/testiky$ cat /proc/sys/net/ipv4/tcp_[rw]mem
4096    87380   3600384
4096    16384   3600384
protistrana dark (2.6.34) ma:
dast na dark:~$ cat /proc/sys/net/ipv4/tcp_[rw]mem 
4096    87380   174760
4096    16384   131072

Kdyz jsem jako protistranu pouzil sebe sama pres eth0, buffery se
zaplnily pri "Write: 688128 Byte".

Z dokumentace na Documentation/networking/ip-sysctl.txt nejsem moc
moudry. Mohl by mi nekdo osvetlit, ktery dalsi buffer jsem zanedbal?
-- Dalibor Straka



Další informace o konferenci Linux