Hajime Okada
okada****@yes*****
2007年 11月 22日 (木) 18:07:58 JST
岡田です。 お疲れ様です。 西門さん、はじめまして。 >> (2)l7vsdとSNMPエージェント機能の間はTCPを用いたプロセス間通信とする > > もし、l7vsdとSNMPエージェントは同じサーバーで起動すれば、 > Unix SocketはTCPより効率のがいいと思います。 UnixSocketとTCPの効率についてテストプログラムを作成し、クロック数を計測しました。 テストプログラムを添付します。 (UDPのテストプログラムも作成し計測しています) テスト結果では、UnixSocket/TCPの効率は、プロセスレベルではあまり変わらないと思います。 > しかも、SNMPのベースは > UDPですから、l7vsdとSNMPエージェントを起動するサーバーは別々場合は > UDPを用いたプロセス間通信とするのがぴったりと思います。 SNMP部分にnet-SNMP Libraryを使うため、UDPでの実装を意識しなくても良いかと思います。 プロセス間通信ではMIB情報で必要なデータのほかに、エージェントプロセスへの指示メッセージも送受信するため、プロセス間でデータの到着と順序を保証したいためTCPが良いのではないでしょうか。 送受信の効率を考えた場合、テスト結果ではUnixSocket/UDP/TCPそれぞれの送受信のプロセスレベルでの効率はあまり変わりません。 UDPの場合、データ保証のコードも考慮に入れる必要があると思います。 この場合、シングルスレッドで動作するUltraMonkey-L7では、データ保証のコードのためにパフォーマンスが悪くなるのではないでしょうか。 私は、UltraMonkey-L7の負担を減らすことを考えて、データ保証をシステム側で行うTCPを使う方が良いかと考えています。 宜しくお願いします。 テストプログラムの結果 (A)PF_UNIX 条件:non-blocking データが無い場合のrecv() 2349 clocks データが到着した場合のrecv() 12042 clocks "hello world"をsendto() 42021 clocks (B)AF_INET/UDP 条件:non-blocking データが無い場合のrecv() 3051 clocks データが到着した場合のrecv() 4824 clocks "hello world"をsendto() 55422 clocks (C)AF_INET/TCP 条件:non-blocking recv() 11124 clocks 注)この場合はデータがきたときのみ反応するようにした "hello world"をsend() 38079 clocks -- /*================================ Hajime Okada / 岡田 創 okada****@yes***** ================================*/ -------------- next part -------------- テキスト形式以外の添付ファイルを保管しました... ファイル名: cost_test.tar.gz 型: application/gzip サイズ: 1613 バイト 説明: 無し Download