UnixPower on Networking
  http://www.unix-power.net/

 
 Top - Linux - CentOS iperfでスループット計測



スループット計測ツールとしてiperfというものが存在します。

拠点間のスループットなどを手軽に計測できるフリーツールでマルチキャストの配信などもできるすぐれものです。また、LinuxのみならずWindowsにも対応しており、コマンドラインが苦手な人はiperfのGUI版であるjperfというのも存在します。

iperfにはサーバモードとクライアントモードの2つのモードがあり、それぞれが必要となりますのでサーバまたは端末が2台必要です。2台の間でメモリtoメモリでデータを転送するのでリアルな値を取得できるのですが、やはり端末上で実行するということでどうしてもその端末のスペックに依存してくる部分もでてきますので古い端末などでは実際のスループットよりも低くなることもありえるので注意が必要です。

ここでは次のような単純な構成を前提としてメモ書きを残します。




それぞれのLinuxにiperfをインストールします。

# yum install iperf
# rpm -qa | grep iperf
iperf-2.0.5-3.el6.i686


オプションを何も指定しない場合、以下のようにしてiperfを起動します。

●サーバ側


# iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------


●クライアント側


# iperf -c 192.168.12.21
------------------------------------------------------------
Client connecting to 192.168.12.21, TCP port 5001
TCP window size: 21.6 KByte (default)
------------------------------------------------------------
[  3] local 192.168.12.20 port 34460 connected with 192.168.12.21 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.06 GBytes   913 Mbits/sec


上記結果から秒間913Mbpsのスループットがでていることがわかります。1GのNICを直結してるのでほぼワイヤレートがでていますね。上記では10秒間の平均値がでているわけですが、これを1秒間ごとに出力する場合は-iオプションで出力する間隔を指定します。例えば-i 1を指定すると1秒ごとにレポートが出力されます。


# iperf -c 192.168.12.21 -i 1
------------------------------------------------------------
Client connecting to 192.168.12.21, TCP port 5001
TCP window size: 21.6 KByte (default)
------------------------------------------------------------
[  3] local 192.168.12.20 port 34465 connected with 192.168.12.21 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 1.0 sec   111 MBytes   930 Mbits/sec
[  3]  1.0- 2.0 sec   108 MBytes   909 Mbits/sec
[  3]  2.0- 3.0 sec   108 MBytes   909 Mbits/sec
[  3]  3.0- 4.0 sec   108 MBytes   910 Mbits/sec
[  3]  4.0- 5.0 sec   109 MBytes   918 Mbits/sec
[  3]  5.0- 6.0 sec   109 MBytes   911 Mbits/sec
[  3]  6.0- 7.0 sec   109 MBytes   911 Mbits/sec
[  3]  7.0- 8.0 sec   108 MBytes   910 Mbits/sec
[  3]  8.0- 9.0 sec   109 MBytes   912 Mbits/sec
[  3]  9.0-10.0 sec   108 MBytes   908 Mbits/sec
[  3]  0.0-10.0 sec  1.06 GBytes   913 Mbits/sec


他にもiperfには以下のオプションがあります。

一般オプション 
オプション  意味 
-f [kmKM] レポートの単位を指定。k=Kbits , m=Mbits , K=KBytes , M=MBytes。 
-i [num]  途中経過のレポートを[num]毎に出力する。 
-l [num][KM]  読み書きのバッファサイズを指定。デフォルトは8KByte。 
-m  TCPセグメントサイズをレポートに出力。 
-o <filename>  レポートを特定のファイルに出力する。 
-p <num>  ポート番号を指定する。デフォルトは5001。 
-u  UDPを使用する。 
-w [num][KM]  TCPウィンドウサイズを指定する。 UDPで指定した場合はデータグラムとなる。
-B <host>  マルチキャストアドレスの指定。サーバ側で-Bで指定し、クライアント側は-cで指定する。
マルチキャスト使用の際にはUDPモードで使用する。 
-M [num] TCP MSSサイズを指定する。 
サーバ側オプション 
オプション  意味 
-s  サーバモードで起動する。 
-u  UDPモードで起動する。 
-D  デーモンとして起動する。 
クライアント側オプション 
オプション  意味 
-b [num][KM] 帯域幅を指定する。( パケットサイズではない )。デフォルトは1MbpsでありUDPモードに限る。 
-c <host> クライアントモードを指定し、サーバIPを指定する。 
-t [time] データを送る秒数を指定する。デフォルトは10秒。 
-F <filename> データ転送する際、特定のファイルからデータを読み込む。 
-P <num>  同時並行でデータ転送をするスレッド数を指定する。デフォルトは1。 
-T <num> マルチキャストのTTLの値を指定する。デフォルトは1。 
-d 双方向で通信テストを行う。 


以下、使用例です。

●TCPスループット計測

2秒間隔でレポートを出力し合計60秒間、同時に3つのスレッドでスループットを計測する。

※サーバ側
# iperf -s

※クライアント側
# iperf -c 192.168.12.21 -i 2 -t 60 -P 3


●UDPスループット計測

2秒間隔でレポートを出力し合計60秒間、帯域幅が50Mでデータを送出する。

※サーバ側
# iperf -u -s

※クライアント側
# iperf -u -c 192.168.12.21 -i 2 -t 60 -b 50M


●マルチキャストアドレス配信

224.10.1.1にサーバがjoinする。そのアドレス宛に対して帯域幅50Mでデータを送信する。


※サーバ側
# iperf -s -u -B 224.10.1.1

※クライアント側
# iperf -u -c 224.10.1.1 -i 1 -T 10 -b 50M


iperfのオプションは上記の一覧に書かれてある通りでバッファサイズやウィンドウサイズを指定することが可能です。ただ、スループットを計測する際に大きく影響するのがパケットサイズで、これは-Mオプションで0~1460の間でMSSを指定することになります。但し、TCPに限ります。

何も指定しない場合、どれだけのサイズで送信されているのかWindowsXP同士で通信している最中にWiresharkでキャプチャしてみたところTCPに関しては1300バイト固定であり、UDPの場合は1518バイトでMTUの値を超えており1300バイトと218バイトにフラグメント ( 分割 ) されてパケットが送出されていました。

UDPの場合は再送処理などないためフラグメントは気にせず出来るだけ大きなサイズで送信しようとするのでこうなっているのだと思います。





 Copyright(C) 2003-2015 UnixPower on Networking All rights reserved.