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