2008年4月24日木曜日

netflow の exporter その 4

その 5 はその後で...測定せず多々感覚的だけど、いったん自分の中ではオチをつけよう。

きっかけは....良くある話かわからないけどアカウンティングを取ることができないルータ、スイッチでアカウントを取りたかったと。でインターフェースのミラーをして、キャプチャするんだけど送信、受信で 2つのインターフェースの面倒を見なくちゃイカンと。100Mbit 全二重に流れるパケットをロス少なく (古い) nprobe とぷらっとホームさんの OpenMicroServer で取ろう。ってトコ。

新しい nprobe も購入してみたが netflow の v9 や VLAN MPLS などが不要であれば古いものでも、まぁ。加えて正確なフローというより、どこと、どこの、どのポート使った通信が多いか。程度がわかれば十分だし。

MMAPed な libpcap (って言うのかな?) と PF_RING な libpcap では、PF_RING の方が少し良さげ。ただしデバイスに NULL あるいは any を指定することができず、カーネルパッチも必要。また pcap_hoge を pfring_hoge で実装しているのだけど、何となく pcap_loop に重きを置いて、他が足りない感アリ。

PF_RING で二つのインターフェースを一つの (nprobe) プロセスで面倒見ようとこんなパッチ眺めながら epollで実装してみたが、一つのインターフェースで二つプロセス稼働させた方が全く良い。PF_RING のカーネルパッチ眺めると epoll ではなく poll の方が良い? 試しておらず。

むーん。と悩んだ結果....ifenslave で二つのインターフェースをバンディングして、これをデバイスと指定することで良しとした。ring.ko をロードする時に受信のみとするのと ethtool の -G で デバイスの rx ring を大きめに設定してみる。

で結果は 100M全二重はチト辛い。上下合わせてピーク 150M程度のトラヒックで /proc/net/pf_ring/<プロセスID>-<デバイス名>- みたいなエントリを覗くと 6〜7% ロスしてる。

何とかできるか...と無い知恵を絞って画策してみたが nprobe の商用サイト? で販売している筐体 nBox のスペック眺めたところ、OpenMicroServer では難かしいカモ。と弱気になったところで...オチ。

0 件のコメント: