Accept Filters

From: Hroi Sigurdsson (none@hroi--ngdc.net.lh.bsd-dk.dk)
Date: Wed 25 Sep 2002 - 09:46:25 CEST


Date: Wed, 25 Sep 2002 09:46:25 +0200
From: Hroi Sigurdsson <none@hroi--ngdc.net.lh.bsd-dk.dk>
To: bsd-dk@bsd-dk.dk
Subject: Accept Filters

Hej BSD-DK.

Bare lige en anekdote om hvor lækkert FreeBSD er :).

Jeg har et setup med tre maskiner som serverer 250 Mbit trafik i
peakperioder. Her er tale om 1300 optagede sessioner på alle tre
maskiner: 3900 samtidige downloads.

Brugerne kommer fra over hele verden, så hvert enkelt hit kan tage lang
tid at servicere (TCP syn syn-ack ack, HTTP GET request, HTTP svar, TCP
fin ack fin ack).
TCP handshake og termination tager kernel sig af, men så snart der er
lavet handshake skal Apache stå og vente på at klienten sender en GET
request med headere. Denne tid kan godt være lang og normalt vil der
være en hel del Apache processer som bare står og venter på en GET
request. I FreeBSD er der en feature kaldet Accept Filters, som gør at
kernen først returnerer når der er data klar til at læse på en socket,
Apache skal altså ikke stå og vente. Der er et specialiseret accept
filter som endda først returnerer så snart der er et helt HTTP request
klar til at blive læst. Dette giver også en lille beskyttelse mod DoS
angreb mod Apache hvor der bare laves en masse connections uden at lave
en forespørgsel.

Uden at bruge HTTP accept filter stod loadet på en af maskinerne på
omkring 100 og var meget sløv at arbejde med! Efter at have loadet
accf_http kernel modulet og genstartet Apache faldt load til 2-3 stykker
og interaktiv performance var i top, når man logger ind på maskinen
bemærker man ikke belastningnen det fjerneste.

Accept filters rule! :)

Til andre BSD'er og unixes skulle lingerd opnå noget af det samme.

-- 
Hroi Sigurdsson                                hroi@ngdc.net
NetGroup A/S                             http://www.ngdc.net



This archive was generated by hypermail 2b30 : Wed 15 Nov 2006 - 18:24:23 CET