お薦め ページ


メニュー

ハワイ島 遊覧飛行ツアー

ハワイ島 B&B・ホテル

ハワイ島 不動産情報

ハワイ島 情報・観光ガイド

ブログ(Blog)

その他

関連サイト

: 日付別 アーカイブ :

2007年6月10日

2007年6月10日

Apache の AcceptFilter ディレクティブ

昨日のブログで、Apache 2.2.x が吐き出す 「[warn] (2)No such file or directory: Failed to enable the 'httpready' Accept Filter」 というエラーへの対処方法について調査したが、 今日のブログで、もう少し根本原因ついて調査してみたいと思う。

いつものごとく、いろいろググっていたら、 (FreeBSD) apache-2.2.xの「httpd -DNOHTTPACCEPT」って何だ? 〜 accf_http というページに出くわした。このページで非常に詳しく解説してあったので、その内容に基づいて、調査を進めてゆく。

まず、上記のエラーは アパッチの 「AcceptFilter ディレクティブ」 に関係があるそうだ。 マニュアルを引用させていただくと、
Listen しているソケットに対して、 OS が固有に持っているプロトコルについての最適化を 有効にするディレクティブです。 大前提となる条件は、データが受信されるか HTTP リクエスト全体がバッファされるかするまで、 カーネルがサーバプロセスに ソケットを送らないようになっている、 ということです。 現在サポートされているのは、 FreeBSD の Accept Filter と Linux のプリミティブな TCP_DEFER_ACCEPT のみです。
とある。 そして、FreeBSD のデフォルト値は :
AcceptFilter http httpready 
AcceptFilter https dataready
である、と記述されている。 ここでやっと エラーの中にある「httpready」というキーワードがみつかった。 さらに
httpready Accept Filter は HTTP リクエスト全体を、 カーネルレベルでバッファリングします。 リクエスト全体を受信し終わると、 その後サーバプロセスにそれを送ります。 詳細については accf_http(9) を参照してください。 HTTPS のリクエストは暗号化されているので accf_data(9) フィルタのみが使用されます。
と説明されている。

それでは FreeBSDマニュアルの 「accept_filter 「入力接続フィルタ」」 をみてみる。 その解説には、
accept フィルタは、カーネルが入力接続を前処理することを、 アプリケーションが要求することを可能にします。 accept フィルタは、SO_ACCEPTFILTER の optname で渡すことで、setsockopt(2) システムコールを介して要求されます。
とある。このように、accept_filter は カーネルが入力接続を前処理するために 汎用的なしくみを提供している。 その中でも、特に HTTP に関して バッファリングを行っているのが accf_http「ある完全な HTTP リクエストの到着までの間の入力接続バッファ」 のようだ。これを有効にすると、HTTPのリクエストが全て揃うまで、カーネル側でパケットをバッファリングしておく。 リクエストの全てが揃った段階でアプリケーションサイド(この場合はApache)へパケットを受け渡すことにより、 カーネルとアプリケーション間の無駄なタスク切り替えを少なくすることができ、 結果的にCPUの利用効率を向上されることができるようだ。

以上のことから、 「[warn] (2)No such file or directory: Failed to enable the 'httpready' Accept Filter」 エラーの原因を考えてみる。 前述の通り、2.1.5 以降の Apache では、システムが FreeBSDだと、 デフォルトでAcceptFilterが有効となってしまうようだ。 一方、FreeBSDを普通にインストールすると、accf_http.ko がカーネルにロードされていない。 よって、FreeBSDに Apache 2.1.5 以降 をインストールすると、 このエラーに遭遇する、と考えられる。

このことから、もう一つの解決方法が考えられるが、それについては、 明日のブログとしよう。

【参考リンク】

カテゴリー: Apache     22:41 | コメント (0) | トラックバック (0)

 
ハワイ島での遊覧飛行ツアーとB&Bのスペシャリスト、スカイメリカ
Copyright © 2003,2009 Skymerica Corp. All rights reserved.