Accept Filter

提供: FreeBSD入門
2015年9月27日 (日) 18:36時点におけるDaemon (トーク | 投稿記録)による版

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索
スポンサーリンク

Accept Filter とは、カーネル内でリクエストをバッファリングし、アプリケーションとOSのスイッチングを減らし、負荷を減らす機能を提供します。HTTPのアプリケーション用のhttpready Accept Filterの場合は、HTTPリクエスト全体をカーネルでバッファリングし、HTTPリクエスト全体が到達するまでウェブサーバにデータを渡さなず、カーネルとアプリケーションのスイッチングを減らすための機能を提供します。

読み方

Accept Filter
あくせぷと ふぃるたー

概要

Accept Filterは、Apacheで使用されています。

ソケットプログラミングのアプリケーションは、サーバ側は accept システムコールでクライアントの接続を待ちます。ウェブサーバの場合、acceptを返ったら、クライアントのHTTPリクエスト全体をreadシステムコールなどで読み込みます。データがすべて到達するまで、何度もreadを呼びます。

httpread Accept Filter (accf_http)を使用した場合、クライアントの接続を受けても acceptは返りません。HTTPのGETリクエストの場合、HTTPリクエスト全体がカーネルよりバッファリングされます。HTTPリクエスト全体が到達したら(\n\nが到達するまで)、はじめてacceptが返ります。acceptが返されたら、ウェブサーバは、クライアントのデータを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

関連項目




スポンサーリンク