Accept Filter
Accept Filter とは、カーネル内でリクエストをバッファリングし、アプリケーションとOSのスイッチングを減らし、負荷を減らす機能を提供します。HTTPのアプリケーション用のhttpready Accept Filterの場合は、HTTPリクエスト全体をカーネルでバッファリングし、HTTPリクエスト全体が到達するまでWebサーバにデータを渡さなず、カーネルとアプリケーションのスイッチングを減らすための機能を提供します。
読み方
- Accept Filter
- あくせぷと ふぃるたー
概要
ソケットプログラミングのアプリケーションは、サーバ側は accept システムコールでクライアントの接続を待ちます。Webサーバの場合、acceptを返ったら、クライアントのHTTPリクエスト全体をreadシステムコールなどで読み込みます。データがすべて到達するまで、何度もreadを呼びます。
httpread Accept Filter (accf_http)を使用した場合、クライアントの接続を受けても acceptは返りません。HTTPのGETリクエストの場合、HTTPリクエスト全体がカーネルよりバッファリングされます。HTTPリクエスト全体が到達したら(\n\nが到達するまで)、はじめてacceptが返ります。acceptが返されたら、Webサーバは、クライアントのデータをreadしますが、すでにデータが到達しているため、一度のreadでデータを読むことができます。
接続が来るたびに、acceptを返し、なかなか、データが到達しないと効率的にプロセスがクライアントを処理できません。また、簡単にDoS状態に陥りやすくなります。なかなかデータ総てが到達しないというのは、HTTPリクエストのサイズが大きい場合や通信経路が細い、もしくは混雑しているなどの場合です。
accfファミリ
- accf_data.ko
- accf_dns.ko
- accf_http.ko
インストール
設定
/boot/loader.conf
accf_http_load="YES"
使い方
sudo kldload accf_http
関連項目
- Accept Filter
- accf_data
- accf_dns
- accf_http
ツイート