From hiro1967 @ mti.biglobe.ne.jp Thu May 31 00:40:49 2007 From: hiro1967 @ mti.biglobe.ne.jp (Hirotaka Sasaki) Date: Thu, 31 May 2007 00:40:49 +0900 Subject: [Ultramonkey-l7-develop 23] Re: =?iso-2022-jp?b?VWx0cmFNb25rZXktTDcbJEIkTiQzJGwkKyRpJE4bKEI=?= =?iso-2022-jp?b?GyRCMytILyRLJEQkJCRGGyhC?= In-Reply-To: <46563F37.9070005@yes.nttcom.ne.jp> References: <46563F37.9070005@yes.nttcom.ne.jp> Message-ID: <20070531004049.4c713596.hiro1967@mti.biglobe.ne.jp> 中居さん 佐々木です。お疲れ様です。 今更ですが、epollの検証について、 勉強のために教えて下さい。 (Q1) クライアントのsend()前後を計測していますが、これは、 ・複数スレッドから同時に、比較的大きな64Kバイトのデータ を送信。 ・サーバ側の受信処理がおいつかず、TCPバッファにデータが たまる。 ・TCPバッファに空きができるまで、send()がブロック。 ・TCPバッファに書き込めたということは、サーバ側で処理し たということだから、それが、select/epollの処理性能 と考える。 と解釈されば良いのでしょうか? (Q2) クライアント側のスレッド数(コネクション数)はいくつでしょ うか? (パラメータの1000がそうですか?) また、コネクション数の違いより、どれくらいの差異があった でしょうか? (Q3) 1回のselect/epollで、通知されたイベント数は、何個ぐら いでしょうか? (Q4) epollとselectで、スレッドによって、処理時間のバラツキは あったでしょうか? (最大と最小は、どれくらいでしょうか?) お忙しいところ恐れいりますが、 時間のある時で良いので、教えてください。 宜しくお願いします。 On Fri, 25 May 2007 10:43:19 +0900 中居憲久 wrote: > [実験] > 上記考察より、以下の実験を行ってみました。 > > 1)epollとselectの速度比較 > > サーバ側はepollとselectの2種類を作成する。 > サーバ側のプログラムは接続しているコネクションからデー > タを読み出すのみ(そのまま捨てる)。クライアント側はepollとselectとも共 > 通で指定分のthreadをcreateし、各threadはサーバに接続を行い、 > pthread_wait()で待ちの状態に入る。親threadは子threadが全てpthread_wait > ()に入った段階で、 ptthread_cond_broadcast()を投げて一斉にサーバに対し > て64kのデータを送信して終了する。各threadがpthread_wait()から抜けた状 > 態の時間とsend()から戻ってきた時間を合算してベンチとする。 Connection > を別時間とすることで純粋にsend()する時間を計測する。socketは > nonblockingに設定。なお、計測はRDTSC命令を使い分解度をクロックとしてあ > る。 > > > 結果 > > epollを使用したサーバの場合 > [root @ um01 client]# ./testClient 1000 > Time : 22782330 > [root @ um01 client]# ./testClient 1000 > Time : 22991643 > [root @ um01 client]# ./testClient 1000 > Time : 21260133 > > 平均クロック(平均時間):22344702 (0.006982719sec) > > selectを使用したサーバの場合 > [root @ um01 client]# ./testClient 1000 > Time : 28468971 > [root @ um01 client]# ./testClient 1000 > Time : 30799269 > [root @ um01 client]# ./testClient 1000 > Time : 30726819 > 平均クロック(平均時間):29998353 (0.009374485sec) > > おおよそ30%の性能改善が見られる。 > > 2)epollをETで使用した場合にepoll_ctl()でイベントを再登録すると > きのコスト > > これは上記サーバプログラムでepoll_ctl()の前後で時間計 > 測をした。 > 結果:平均クロック数:14419.53(=4.5nsec) > > -- Hirotaka Sasaki