iperf

組んでいるネットワークの転送速度等々を評価しようとするときにいろいろ方法があるが、手頃な方法にiperfというツールを使うという手がある。
ダウンロードは以下のサイトから行える。

Iperf was developed by NLANR/DAST as a modern alternative for measuring maximum TCP and UDP bandwidth performance. Iperf allows the tuning of various parameters and UDP characteristics. Iperf reports bandwidth, delay jitter, datagram loss.
Iperf | Get Iperf at SourceForge.net

ソース一式をダウンロードできるので展開後、コンパイルをすればOKとなる。
MacOSの場合は以下の様な形でコンパイルを行った。もちろんXcodeのインストール必須。現在最新のバージョンは2.0.4

$ tar xvzf iperf-2.0.4.tar.gz
$ cd iperf-2.0.4
$ ./configure
$ make
$ sudo make install

これで /usr/local/bin/iperf にインストールされる。
で。実際に測定を行う場合はサーバを立ち上げ、待ち受け状態を行います。
帯域測定を行う場合は以下の様に実行。

$ /usr/local/bin/iperf -s

                                                                                                                      • -

Server listening on TCP port 5001
TCP window size: 256 KByte (default)

                                                                                                                      • -

これで待ち状態。
次にクライアント側からサーバ側に向かって測定用のデータを投げつける。
例えば下の様にオプションを指定すると192.168.1.22というIPアドレスが割り当てられた端末に立ち上がっているiperfのサーバへデータを投げつけて1秒毎に測定結果の表示を行い、10秒間測定を行う。

$ /usr/local/bin/iperf -c 192.168.1.22 -i 1 -t 10

                                                                                                                      • -

Client connecting to 192.168.1.22, TCP port 5001
TCP window size: 129 KByte (default)

                                                                                                                      • -

[ 4] local 192.168.1.23 port 49341 connected with 192.168.1.22 port 5001
[ ID] Interval Transfer Bandwidth
[ 4] 0.0- 1.0 sec 1.17 MBytes 9.83 Mbits/sec
[ ID] Interval Transfer Bandwidth
[ 4] 1.0- 2.0 sec 1.05 MBytes 8.85 Mbits/sec
[ ID] Interval Transfer Bandwidth
[ 4] 2.0- 3.0 sec 1.02 MBytes 8.59 Mbits/sec
[ ID] Interval Transfer Bandwidth
[ 4] 3.0- 4.0 sec 1.00 MBytes 8.39 Mbits/sec
[ ID] Interval Transfer Bandwidth
[ 4] 4.0- 5.0 sec 1.01 MBytes 8.45 Mbits/sec
[ ID] Interval Transfer Bandwidth
(中略)
[ ID] Interval Transfer Bandwidth
[ 4] 9.0-10.0 sec 1.01 MBytes 8.45 Mbits/sec
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-10.0 sec 10.4 MBytes 8.69 Mbits/sec

一番最後に全体の平均が表示されていますね。10秒で10.4Mbyte転送できて帯域で言うと8.69Mbpsです。と。
これは自宅の MacBook→(無線LAN)→無線LANルータ→(無線LAN)→Windowsマシン で計測した結果。
まぁ、こんなものか。

なお、Windowsの場合はもちろんソースからコンパイルしても良いのだけど、iperfのsourceforge中のファイル一覧の中にあるjperfというzipファイル中に含まれているbinフォルダにコンパイルされたバイナリが含まれているのでこれを利用すればOKかと。

ちなみにjperfというのはiperfの上で書いた様なコマンドを入力せずに制御するためのJavaアプリケーションでJREが入っていればjperf-x.x.x.zipファイルを展開してjperf.batを実行するだけでGUIが起動する。
Write once run anywhereの精神でいくと、Macでも普通に動いてほしいところだが、iperf.shから実行すると異常にゆっくり起動してホストの設定等が行えない…。*1
f:id:hideack:20091112234611p:image
Windowsの場合、こちらを利用するのが非常に楽で良いかもしれません。

*1:何か致命的に間違えている気もするが現状解決策がわからない...