「Accept Filter」の版間の差分

提供: FreeBSD入門
移動: 案内検索
(関連項目)
行1: 行1:
[[Accept Filter]] とは、カーネル内でリクエストをバッファリングし、アプリケーションとOSのスイッチングを減らし、負荷を減らす機能を提供します。HTTPのアプリケーション用のhttpready Accept Filterの場合は、HTTPリクエスト全体をカーネルでバッファリングし、HTTPリクエスト全体が到達するまで[[Webサーバ]]にデータを渡さなず、カーネルとアプリケーションのスイッチングを減らすための機能を提供します。
+
[[Accept Filter]] とは、カーネル内でリクエストをバッファリングし、アプリケーションとOSのスイッチングを減らし、負荷を減らす機能を提供します。HTTPのアプリケーション用のhttpready Accept Filterの場合は、HTTPリクエスト全体をカーネルでバッファリングし、HTTPリクエスト全体が到達するまで[[ウェブサーバ]]にデータを渡さなず、カーネルとアプリケーションのスイッチングを減らすための機能を提供します。
  
 
'''読み方'''
 
'''読み方'''
行9: 行9:
 
[[Accept Filter]]は、[[Apache]]で使用されています。
 
[[Accept Filter]]は、[[Apache]]で使用されています。
  
ソケットプログラミングのアプリケーションは、サーバ側は accept システムコールでクライアントの接続を待ちます。Webサーバの場合、acceptを返ったら、クライアントのHTTPリクエスト全体をreadシステムコールなどで読み込みます。データがすべて到達するまで、何度もreadを呼びます。
+
ソケットプログラミングのアプリケーションは、サーバ側は accept システムコールでクライアントの接続を待ちます。[[ウェブサーバ]]の場合、acceptを返ったら、クライアントのHTTPリクエスト全体をreadシステムコールなどで読み込みます。データがすべて到達するまで、何度もreadを呼びます。
  
httpread [[Accept Filter]] (accf_http)を使用した場合、クライアントの接続を受けても acceptは返りません。HTTPのGETリクエストの場合、HTTPリクエスト全体が[[カーネル]]よりバッファリングされます。HTTPリクエスト全体が到達したら(\n\nが到達するまで)、はじめてacceptが返ります。acceptが返されたら、Webサーバは、クライアントのデータをreadしますが、すでにデータが到達しているため、一度のreadでデータを読むことができます。
+
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

関連項目