FreeBSD 2.X についての FAQ (よくある質問とその答え) : ネットワーキング : IPFWのオーバーヘッドはどのくらいでしょうか?
Previous: すべてのネットワークの操作に対して ``Permission denied'' というメッセージが表示されるのですが.
Next: サービス要求を他のマシンにリダイレクトするには?

10.19. IPFWのオーバーヘッドはどのくらいでしょうか?

この答えはあなたのrule setとprocessorのスピードによって ほとんど決まります. Ethernetに対して少しのrule setだけを使っ ているほどんどの場合には, その影響は無視できる程度です. 実 際の測定値を見ないと満足できない方々のために, 実際の測定結 果をお見せしましょう.

次の測定は486-66上で2.2.5-STABLEを使用しておこなわれました. IPFWは変更が加えられて, ip_fw_chkルーチン内でかかる時間を 測定して1000パケット毎に結果をconsoleに表示するようになっています.

それぞれ1000ずつのruleが入っている2つのrule setでテストが おこなわれました. ひとつ目のsetは最悪のケースを見るために

        ipfw add deny tcp from any to any 55555
      

というruleを繰り返したものです.

このsetを用いますと, (port番号によって) packetが全てのruleにマッチ しない事が最終的に決まるまでに, IPFWのpacketをチェックするルーチン のほとんど全てが実行されますので, 最悪のケースとなります. この ruleを999個繰り返した後にallow ip from any to anyが 書かれています.

2つ目のsetは, なるべく早くチェックが終了するように書かれたものです:

        ipfw add deny ip from 1.2.3.4 to 1.2.3.4
      

このruleではsource側のIPアドレスがマッチしないのでチェックは すぐに終了します. 上のsetとおなじように, 1000個目のruleは allow ip from any to anyです.

1つ目のsetでは, packetあたりのoverheadはだいたい2.703ms/packet, 言いかえると1つのruleあたり2.7マイクロ秒です. したがってこのruleに おけるpacketを処理する時間の理論的な限界は1秒あたり約370 packetです. 10MbpsのEthernetで1500 byte以下のpacketサイズを仮定すると, 55.5%の バンド幅までしか使えない事になります.

2つ目のsetでは, それぞれのpacketはだいたい1.172msで処理されて いますので1つのruleあたり1.2マイクロ秒となります. packetの 処理時間の理論的な限界はだいたい1秒あたり853 packetとなりますので 10Mbps Ethernetのバンド幅を使い切ることができます.

このテストでのruleの数は多過ぎますので, 実際に使用している際の 結果を反映している訳ではありません. これらは上に示した数値を出す ためだけに用いられたものです. 実際に効率の良いrule setを作るために は, 次のような事を考えておけばよいでしょう.


FreeBSD 2.X についての FAQ (よくある質問とその答え) : ネットワーキング : IPFWのオーバーヘッドはどのくらいでしょうか?
Previous: すべてのネットワークの操作に対して ``Permission denied'' というメッセージが表示されるのですが.
Next: サービス要求を他のマシンにリダイレクトするには?