netperfでネットワーク性能測定
unixbenchに続いてnetperfで性能測定。
使ったnetperfは2.4.5。これが以外にはまった。
sakuraのVPS(CentOS5.5)上に
$ wget ftp://ftp.netperf.org/netperf/netperf-2.4.5.tar.gz $ cp netperf-2.4.5.tar.gz /usr/local/src $ cd /usr/local/src $ tar xvzf netperf-2.4.5.tar.gz $ cd netperf-2.4.5 $ ./configure $ make $ make install
をインストール。その後、以下を実行。
$ /usr/local/bin/netserver
OK。クライアント側でも同様の設定を実行。
クライアントから
$ netperf -H XX.YY.ZZ.WW netperf: send_tcp_stream: data socket connect failed: No route to host
エラーが出る。これが色々と手ごわかった。
straceやtcpdumpを利用して検証したところ、最初12865ポートで接続しているのに途中から
ポート番号が変更になることが判明。
???
他のインストールしているサイトを見るとポート12865さえあけておけばOK、みたいな
ことが書かれているのにTimeoutやらNo route to hostで通信に失敗する。
ファイアウォールをOFFにすれば計測できることからファイアウォールが原因なのは間違いなかった。
悩みに悩んだところ、ようやく以下の記事を発見。
http://www.netperf.org/pipermail/netperf-talk/2010-August/000758.html
どうやらControl ConnectionとData Connectionが別で2つ通信用ポートが必要みたい。
最初Control Connection(12865)でサーバから接続に関する情報を受け取る。
DataConnectionでは、Control Connectionで通知された新しいポート番号でサーバに接続する。
つまり、
Client Server ------ ------ XXXXX → 12865 XXXXX ← 12865 //ここでServerのData Connectionのポートが通知される。 ・・・ ※上記がControl Connection。 ※Control Connectionで通知された新しいポート番号でDataConnectionとして接続を行う。 YYYYY → 12866 //任意の番号をセット可能。12866を設定したものとする。 YYYYY ← 12866 YYYYY → 12866 YYYYY ← 12866 XXXXXやYYYYYはクライアントの任意のポート番号を表す。
のような動きになる。
上記の動きをさせるためには、netperf側(クライアント側)で以下のコマンドを実行すること。
$ netperf -H XX.YY.ZZ.WW -p 12865 -- -P 12866 ※ "--"はGlobal Command Optionと test-specific Optionを区別するためのセパレータ。
Server側では、ファイアウォールの設定で12865と12866の2つポートを受け付けるように設定しておくこと。
-
- -
肝心の計測結果。
送信元 | 送信先 | 速度(Mbps) |
---|---|---|
家(CentOS(VM)) | Sakura(CentOS(VM)) | 4.25 |
Sakura(CentOS(VM)) | 家(CentOS(VM)) | 1.9 |
家(WinXP、Cygwin) | 家(CentOS(VM)) | 66.98 |
家→sakuraの値が小さすぎじゃない?
あってるのかぁ。