人気ブログランキング | 話題のタグを見る
(ネットワーク)回線速度測定ツールNetPerfを使ってみた

(ネットワーク)回線速度測定ツールJperfを使ってみた ではIperfをラッピングしたGUIベースのJperfを紹介しました。
しかし、JperfでUDPで測定すると、「WARNING: did not receive ack of last datagram after 10 tries.」 とか 「read failed: Connection reset by peer」と表示され、うまく測定できません。(バージョンは2.0.2です。)
また、UDPは測定時に帯域幅(UDP Bandwidth)を指定するのも意味が分かりませんし、どれくらいパケットロスしたのかも分かりません。

ということで、さらにネットワークベンチマークソフトを探してみたところ、NetPerfというのを見つけました。
ダウンロードはftp://ftp.cup.hp.com/dist/networking/benchmarks/netperf/からできます。(メインはLinux向けのようですが、ちゃんとWindows用のバイナリも有ります)

使い方ですが、サーバ側となる方は、下記のようにサーバ用のexeを起動しておくだけでOKです。(デフォルトだとポート12865が使われます)

>netserver-2.1pl1.exe
Starting netserver at port 12865


TCPのスループットを計測する場合は、クライアントで下記のようにします。

>netperf-2.1pl1.exe -H 192.168.0.10

結果は下記のようになります。

TCP STREAM TEST to 192.168.0.10
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec

8192 8192 8192 10.00 20.57

RecvSocketSizebytesというのが受信側のソケットバッファでしょうか。デフォルトは8KBのようです。
SendSocketSizebytesというのが送信側のソケットバッファでしょうか。デフォルトは8KBのようです。
SendMessagebytesが送信パケットサイズでしょうね。これもデフォルトは8KBのようです。
ElapsedTimesecsが測定秒数のようです。デフォルト10秒です。
結果が、Throughput 10^6bits/sec ですね。Mbpsで表現されるようです。今回だと、93Mbpsという結果になりました。

オプションは下記のようになっています。

Usage: netperf [global options] -- [test options]

Global options:
-a send,recv Set the local send,recv buffer alignment
-A send,recv Set the remote send,recv buffer alignment
-c [cpu_rate] Report local CPU usage
-C [cpu_rate] Report remote CPU usage
-d Increase debugging output
-f G|M|K|g|m|k Set the output units
-F fill_file Pre-fill buffers with data from fill_file
-h Display this text
-H name|ip Specify the target machine
-i max,min Specify the max and min number of iterations (15,1)
-I lvl[,intvl] Specify confidence level (95 or 99) (99)
and confidence interval in percentage (10)
-l testlen Specify test duration (>0 secs) (<0 bytes|trans)
-o send,recv Set the local send,recv buffer offsets
-O send,recv Set the remote send,recv buffer offset
-n numcpu Set the number of processors for CPU util
-p port Specify netserver port number
-P 0|1 Don't/Do display test headers
-t testname Specify test to perform
-v verbosity Specify the verbosity level
-W send,recv Set the number of send,recv buffers

グローバルオプションを指定し、テストオプションを指定するという感じですね。
テストオプションで、メッセージ長やソケットサイズが指定できます。

テストオプションは下記のような感じです。

TCP/UDP BSD Sockets Test Options:
-D [L][,R] Set TCP_NODELAY locally and/or remotely (TCP_*)
-h Display this text
-m bytes Set the send size (TCP_STREAM, UDP_STREAM)
-M bytes Set the recv size (TCP_STREAM, UDP_STREAM)
-p min[,max] Set the min/max port numbers for TCP_CRR, TCP_TRR
-r bytes Set request size (TCP_RR, UDP_RR)
-R bytes Set response size (TCP_RR, UDP_RR)
-s send[,recv] Set local socket send/recv buffer sizes
-S send[,recv] Set remote socket send/recv buffer sizes


例えば送信ソケットサイズ64KB,メッセージサイズ64KBとするには下記のようにします。

netperf-2.1pl1.exe -H 192.168.0.10 -- -m 64512 -s 64512
TCP STREAM TEST to 192.168.0.10
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec

8192 64512 64512 10.00 93.00




UDPで測定するときは下記のようにします。

>netperf-2.1pl1.exe -H 192.168.0.10 -t UDP_STREAM -- -m 1024

結果は下記のようになります。

UDP UNIDIRECTIONAL SEND TEST to 192.168.0.10
Socket Message Elapsed Messages
Size Size Time Okay Errors Throughput
bytes bytes secs # # 10^6bits/sec

64512 1024 10.00 111620 0 91.44
8192 10.00 85967 70.42

上段が送信、下段が受信側の結果のようです。
Messages Okay というのはどれくらいのメッセージを送信したかの数のようです。
送信時は 91Mbps も送信してるのに、受信時は 70Mbps になってますね。これはUDPのパケットが途中でロスしたからだと思われます。
ということで、実の実行スループットは下段の Throughput 10^6bits/sec になるようです。
LAN内だとあまりパケットロスしないですが、上記のテストのようにWAN(VPN)だとかなりUDPはパケットロスするのが分かります。


より詳しい使い方やオプションは下記参考サイトが役立ちます。
Netperf - TECHNERD::INIT:
Netperf でLANをチェック:
P2P@i 開発メモ: netperfを使った測定
netperfでネットワークパフォーマンスを測定
netperf の使い方 - takatan blog
by jehoshaphat | 2011-08-26 12:11 | ネットワーク


<< (ネットワーク)TCPのスルー... (ツール)複数のユーザのIE履... >>