「Accept Filter」の版間の差分
(→関連項目) |
|||
行1: | 行1: | ||
− | [[Accept Filter]] とは、カーネル内でリクエストをバッファリングし、アプリケーションとOSのスイッチングを減らし、負荷を減らす機能を提供します。HTTPのアプリケーション用のhttpready Accept Filterの場合は、HTTPリクエスト全体をカーネルでバッファリングし、HTTPリクエスト全体が到達するまで[[ | + | [[Accept Filter]] とは、カーネル内でリクエストをバッファリングし、アプリケーションとOSのスイッチングを減らし、負荷を減らす機能を提供します。HTTPのアプリケーション用のhttpready Accept Filterの場合は、HTTPリクエスト全体をカーネルでバッファリングし、HTTPリクエスト全体が到達するまで[[ウェブサーバ]]にデータを渡さなず、カーネルとアプリケーションのスイッチングを減らすための機能を提供します。 |
'''読み方''' | '''読み方''' | ||
行9: | 行9: | ||
[[Accept Filter]]は、[[Apache]]で使用されています。 | [[Accept Filter]]は、[[Apache]]で使用されています。 | ||
− | ソケットプログラミングのアプリケーションは、サーバ側は accept | + | ソケットプログラミングのアプリケーションは、サーバ側は accept システムコールでクライアントの接続を待ちます。[[ウェブサーバ]]の場合、acceptを返ったら、クライアントのHTTPリクエスト全体をreadシステムコールなどで読み込みます。データがすべて到達するまで、何度もreadを呼びます。 |
− | httpread [[Accept Filter]] (accf_http)を使用した場合、クライアントの接続を受けても acceptは返りません。HTTPのGETリクエストの場合、HTTPリクエスト全体が[[カーネル]]よりバッファリングされます。HTTPリクエスト全体が到達したら(\n\nが到達するまで) | + | httpread [[Accept Filter]] (accf_http)を使用した場合、クライアントの接続を受けても acceptは返りません。HTTPのGETリクエストの場合、HTTPリクエスト全体が[[カーネル]]よりバッファリングされます。HTTPリクエスト全体が到達したら(\n\nが到達するまで)、はじめてacceptが返ります。acceptが返されたら、[[ウェブサーバ]]は、クライアントのデータをreadしますが、すでにデータが到達しているため、一度のreadでデータを読むことができます。 |
接続が来るたびに、acceptを返し、なかなか、データが到達しないと効率的にプロセスがクライアントを処理できません。また、簡単にDoS状態に陥りやすくなります。なかなかデータ総てが到達しないというのは、HTTPリクエストのサイズが大きい場合や通信経路が細い、もしくは混雑しているなどの場合です。 | 接続が来るたびに、acceptを返し、なかなか、データが到達しないと効率的にプロセスがクライアントを処理できません。また、簡単にDoS状態に陥りやすくなります。なかなかデータ総てが到達しないというのは、HTTPリクエストのサイズが大きい場合や通信経路が細い、もしくは混雑しているなどの場合です。 | ||
行26: | 行26: | ||
accf_http_load="YES" | accf_http_load="YES" | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
== 使い方 == | == 使い方 == | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
sudo kldload accf_http | sudo kldload accf_http | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
== 関連項目 == | == 関連項目 == | ||
{{accept filter}} | {{accept filter}} | ||
{{kernel}} | {{kernel}} | ||
− | |||
<!-- vim: fileencoding=utf-8 filetype=mediawiki | <!-- vim: fileencoding=utf-8 filetype=mediawiki | ||
--> | --> |
2015年5月31日 (日) 00:57時点における版
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
関連項目
- Accept Filter
- accf_data
- accf_dns
- accf_http
- カーネル (kernel)
- カスタムカーネル
- コンフィグレーションファイル
- make world
- Accept Filter
- freebsd-update
- カーネルモジュール
- kldxref
- DTrace
- ktrace/kdump