Iperfの使い方

ネットワークの帯域を計測する場合、非常に便利なツールです。
UNIX系ではnetperfが有名かと思いますが、UDPの計測に関してはIperfの方が使いやすいと思います。
WindowsLinuxなど各種OSで使用できます。

ダウンロード

NLANR/DAST : Iperf - The TCP/UDP Bandwidth Measurement Tool

http://sourceforge.net/projects/iperf

使い方

下記に、コマンドの使い方を記しておきます。

ユニキャストモード
  • TCPの場合
    • サーバー
$ iperf -s
    • クライアント
$ iperf -c <受信側ホスト名> または <受信側IPアドレス>
      • 例1)TCP通信での最大レートを測定する。Netperfでの測定とほぼ同様。
 $ iperf -c 192.168.1.100
      • 例2)100MbyteのデータをTCPで送信する場合
$ iperf -c <dest addr> -l 100M
  • UDPの場合
    • サーバ
$ iperf -s -u
    • クライアント
$ iperf -c 192.168.1.100 -u -b <送信帯域> -t <計測時間[sec]> -i <インターバル>
      • 例1)192.168.1.100へ向けUDPで10Mのストリームを60秒間送信する。

レポートの間隔は2秒おき。

$ iperf -c 192.168.1.100 -u -b 10M -t 60 -i 2 
      • 例2)192.168.1.100との間でUDPで10Mのストリームを双方向で60秒間送信する。
$ iperf -c 192.168.1.100 -u -b 10M -t 60 -i 2 -d
      • 例3)双方向モードでの測定。192.168.1.100へ向け3本の10MのUDPストリームを60秒間送信する。
$ iperf -c 192.168.1.100 -u -b 10M -t 60 -i 2 -P 3
マルチキャストモード
  • サーバ
    $ iperf -s -u -B <マルチキャストアドレス> -i <結果表示インターバル> 
ex.) $ iperf -s -u -B 224.0.55.55 -i 1
  • クライアント
    $ iperf -c <マルチキャストアドレス> -u -T <TTL> -t <計測時間[sec]> -i <インターバル> -b <送信帯域> 

ex.) $ iperf -c 224.0.55.55 -u -T 32 -t 10 -i 1 -b 1M
IPv6モード
  • サーバ
    $ iperf -s -V 
  • クライアント
    $ iperf -c <Server IPv6 Address> -V 

結果の見方

  • サーバー側
node2> iperf -s -u -i 1 
------------------------------------------------------------ 
Server listening on UDP port 5001 Receiving 1470 byte datagrams 
UDP buffer size: 60.0 KByte (default) 
------------------------------------------------------------ 
[ 4] local <IP Addr node2> port 5001 connected with <IP Addr node1> port 9726 
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams 
[ 4] 0.0- 1.0 sec 1.3 MBytes 10.0 Mbits/sec 0.209 ms 1/ 894 (0.11%) 
[ 4] 1.0- 2.0 sec 1.3 MBytes 10.0 Mbits/sec 0.221 ms 0/ 892 (0%) ←中間レポート
[ 4] 2.0- 3.0 sec 1.3 MBytes 10.0 Mbits/sec 0.277 ms 0/ 892 (0%) 
[ 4] 3.0- 4.0 sec 1.3 MBytes 10.0 Mbits/sec 0.359 ms 0/ 893 (0%) 
[ 4] 4.0- 5.0 sec 1.3 MBytes 10.0 Mbits/sec 0.251 ms 0/ 892 (0%) 
[ 4] 5.0- 6.0 sec 1.3 MBytes 10.0 Mbits/sec 0.215 ms 0/ 892 (0%) 
[ 4] 6.0- 7.0 sec 1.3 MBytes 10.0 Mbits/sec 0.325 ms 0/ 892 (0%) 
[ 4] 7.0- 8.0 sec 1.3 MBytes 10.0 Mbits/sec 0.254 ms 0/ 892 (0%) 
[ 4] 8.0- 9.0 sec 1.3 MBytes 10.0 Mbits/sec 0.282 ms 0/ 892 (0%) 
[ 4] 0.0-10.0 sec 12.5 MBytes 10.0 Mbits/sec 0.243 ms 1/ 8922 (0.011%) ←最終レポート
左から、測定時間,l受信データ量,bps,片方向遅延,パケット損失数/パケット受信数(パケット損失率)
  • クライアント側
node1> iperf -c node2 -u -b 10m 

------------------------------------------------------------ 

Client connecting to node2, UDP port 5001 Sending 1470 byte datagrams 
UDP buffer size: 60.0 KByte (default) 

------------------------------------------------------------ 

[ 3] local <IP Addr node1> port 9726 connected with <IP Addr node2> port 5001 
[ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 12.5 MBytes 10.0 Mbits/sec 
[ 3] Sent 8922 datagrams 

オプション

-s サーバモードでの起動
-c クライアントモードでの起動
-B 指定したマルチキャストグループにJOINする,マルチキャストの場合にのみ使用する
-u UDP送信(-bオプションの場合は省略可)
-b [KM] 帯域指定(default 1Mbps)UDPのみ
-T TTL
-t 測定時間
-i レポート表示間隔
-l パケットサイズ
-d 送受信モード

GUI

Iperfのフロントエンドでjperfというものもあります。
http://dast.nlanr.net/projects/jperf/
慣れないうちはこれを使うと設定などやりやすいかもしれません。
Windowsで使う場合は、jperfのオーバーヘッドにより高レートではパケットロスが発生しました。
正確な測定が要される場合は、要注意です。(Linuxで使用した場合はこの問題はおきませんでした)