WAN間/LAN間の最大転送速度の測定や、指定したサイズのトラフィック作成ができるフリーソフトです。ポート番号を自由に変更することで、QoSのテストなどにも役立ちます。
最近は仮想化ブームですので、物理NICと仮想NICの性能比較や、仮想NICの帯域幅を検証したりするのにも役立ちます。
ソースからコンパイルしても構いませんが、Solaris用のパッケージが sunfreeware.com にありますので、こちらを使うのが楽で良いでしょう。所詮、性能検証ツールですから。。。
というわけで sunfreeware.com からSolaris10用の以下のパッケージをダウンロードします。
パッケージなので pkgadd するだけです。
bash-3.00# ls iperf-2.0.4-sol10-sparc-local.gz libgcc-3.4.6-sol10-sparc-local.gz bash-3.00# gunzip *.gz bash-3.00# pkgadd -d libgcc-3.4.6-sol10-sparc-local ... bash-3.00# pkgadd -d iperf-2.0.4-sol10-sparc-local ...
iperfは/usr/local/binにインストールされますので、必要に応じてPATHを通しておきます。
bash-3.00# PATH=/usr/local/bin:$PATH bash-3.00# export PATH
オプションなどを調べるため、とりあえずコマンドのヘルプを表示します。
bash-3.00# iperf -h Usage: iperf [-s|-c host] [options] iperf [-h|--help] [-v|--version] Client/Server: -f, --format [kmKM] format to report: Kbits, Mbits, KBytes, MBytes -i, --interval # seconds between periodic bandwidth reports -l, --len #[KM] length of buffer to read or write (default 8 KB) -m, --print_mss print TCP maximum segment size (MTU - TCP/IP header) -o, --outputoutput the report or error message to this specified file -p, --port # server port to listen on/connect to -u, --udp use UDP rather than TCP -w, --window #[KM] TCP window size (socket buffer size) -B, --bind bind to , an interface or multicast address -C, --compatibility for use with older versions does not sent extra msgs -M, --mss # set TCP maximum segment size (MTU - 40 bytes) -N, --nodelay set TCP no delay, disabling Nagle's Algorithm -V, --IPv6Version Set the domain to IPv6 Server specific: -s, --server run in server mode -U, --single_udp run in single threaded UDP mode -D, --daemon run the server as a daemon Client specific: -b, --bandwidth #[KM] for UDP, bandwidth to send at in bits/sec (default 1 Mbit/sec, implies -u) -c, --client run in client mode, connecting to -d, --dualtest Do a bidirectional test simultaneously -n, --num #[KM] number of bytes to transmit (instead of -t) -r, --tradeoff Do a bidirectional test individually -t, --time # time in seconds to transmit for (default 10 secs) -F, --fileinput input the data to be transmitted from a file -I, --stdin input the data to be transmitted from stdin -L, --listenport # port to recieve bidirectional tests back on -P, --parallel # number of parallel client threads to run -T, --ttl # time-to-live, for multicast (default 1) -Z, --linux-congestion set TCP congestion control algorithm (Linux only) Miscellaneous: -x, --reportexclude [CDMSV] exclude C(connection) D(data) M(multicast) S(settings) V(server) reports -y, --reportstyle C report as a Comma-Separated Values -h, --help print this message and quit -v, --version print version information and quit [KM] Indicates options that support a K or M suffix for kilo- or mega- The TCP window size option can be set by the environment variable TCP_WINDOW_SIZE. Most other options can be set by an environment variable IPERF_ , such as IPERF_BANDWIDTH. Report bugs to
主要なオプションは以下の通りです。
-s | サーバモードで起動 |
-c host | クライアントモードで起動し、hostで指定したアドレスに接続 |
-i interval | intervalで指定した秒ごとに結果を表示(デフォルトは10秒後の1回のみ) |
-l len | read、writeするときのバッファ長をバイトで指定(デフォルトはTCP:8KB、UDP:1470B) |
-p port | サーバ側の待受けポートを指定(デフォルトは5001)、クライアントモードではサーバのポート番号を指定 |
-u | UDPモードで動作させる(デフォルトはTCPモード) |
-w window | ウィンドウサイズをで指定する |
-b bandwidth | 送信するUDPの帯域をbpsで指定する(デフォルトは1Mbps) ※クライアントモードのみ |
-t time | timeで指定した秒数の間送受信します ※クライアントモードのみ |
-P number | numberで指定した数のクライアントスレッドを並列で実行します |
もっとも簡単な使用方法は以下の通りです。
【サーバー側】bash-3.00# iperf -s【クライアント側】
bash-3.00# iperf -c 192.168.0.1
すると約10秒で計測は終了し、サーバー側に以下のような結果が表示されます。
bash-3.00# iperf -s ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 48.0 KByte (default) ------------------------------------------------------------ [ 4] local 192.168.0.1 port 5001 connected with 129.158.17.178 port 32945 [ ID] Interval Transfer Bandwidth [ 4] 0.0-10.1 sec 63.3 MBytes 52.8 Mbits/sec
上記の結果からは10秒間に63.3MBのデータが流れたことを示し、52.8Mbpsのスピードが出ていることがわかります。
ただし、計測時間が短いと数値にバラツキが出たり、単一のスレッドではネットワーク帯域以外の要素で上限が抑えられている可能性もあります。そこで以下のように並列数を指定したり、計測時間を延長したりすることもできます。
【サーバー側】bash-3.00# iperf -s【クライアント側】
bash-3.00# iperf -c 192.168.0.1 -P 4 -t 20
すると今度は約20秒で計測は終了し、サーバー側に以下のような結果が表示されます。
bash-3.00# iperf -s ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 48.0 KByte (default) ------------------------------------------------------------ [ 4] local 192.168.0.1 port 5001 connected with 129.158.17.178 port 32947 [ 5] local 192.168.0.1 port 5001 connected with 129.158.17.178 port 32948 [ 6] local 192.168.0.1 port 5001 connected with 129.158.17.178 port 32949 [ 7] local 192.168.0.1 port 5001 connected with 129.158.17.178 port 32950 [ ID] Interval Transfer Bandwidth [ 4] 0.0-20.3 sec 48.1 MBytes 19.9 Mbits/sec [ ID] Interval Transfer Bandwidth [ 5] 0.0-20.3 sec 48.0 MBytes 19.9 Mbits/sec [ ID] Interval Transfer Bandwidth [ 7] 0.0-20.3 sec 50.1 MBytes 20.7 Mbits/sec [ ID] Interval Transfer Bandwidth [ 6] 0.0-20.3 sec 51.0 MBytes 21.1 Mbits/sec [SUM] 0.0-20.3 sec 197 MBytes 81.6 Mbits/sec
上記の結果からは20秒間に197MBのデータが流れたことを示し、81.6Mbpsのスピードが出ていることがわかります。これは先ほどの計測データよりもスピードが出ていることがわかります。つまり同じネットワーク構成でも指定したオプションによって結果が変わってくることになります。
別の構成で性能を比較するには、同じオプションを使うことは当然ですが、逆にどのような通信であれば性能を出すことができるのかなどを検証することもできることがわかります。
Solaris 11.2 システムハンドブック |
Oracle Solaris 11 試験対策本(OCA) |