ネットワークテストツールnetperf

10285 ワード

一般的に、ネットワークの接続性、ネットワーク帯域幅、ネットワーク応答時間などをテストするネットワークテストを行います.よく使われるツールにはping、traceroute、telnet、ftpなどがあります.ネットワーク接続性をテストする場合はping、tracerouteを使用し、ファイアウォールの構成が正しいかどうかをテストする場合はtelnetとtraceroute-pを使用し、pingコマンドを使用してネットワーク遅延をテストし、ftpはネットワーク帯域幅をテストするために使用します.
しかし、異なるパケットサイズの異なるビジネスのネットワーク処理能力をテストするなど、より深いテストが必要な場合は、netperf、iperfなど、より専門的なツールが必要です.

Netperfテストツールの紹介


Netperfはオープンソースのネットワークパフォーマンステストツールです.AIXとLINUXプラットフォームにインストールでき、プラットフォーム間での使用をサポートします.
NetperfはTCPネットワーク性能、UDPネットワーク性能をテストすることができ、Client/Serverの長接続または短接続シーンをシミュレートすることができるため、実際のネットワークの使用環境に近いテストと評価を行うことができる.

インストール


公式サイトからソースコードをダウンロードしてコンパイルインストールできます.インストールプロセスは基本的に3つのステップです.
./configcure
make
make install

デフォルトのインストールパスは/usr/localの下の各ディレクトリです.AIXなどのシステムでは、PATH環境変数を自分で設定するか、–prefixパラメータを使用してインストールパスを変更する必要がある場合があります.
SUSEの場合、インストール中にカーネルバージョンが2.6.16(SUSE 10)の場合、コンパイルエラーが発生します.
nettest_omni.o: In function `recv_data_no_copy':
nettest_omni.c:(.text+0x6e44): undefined reference to `splice'
nettest_omni.c:(.text+0x6e7b): undefined reference to `splice'
collect2: ld returned 1 exit status
make[3]: *** [netperf] Error 1
make[3]: Leaving directory `/root/py/netperf-2.6.0/src'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/root/py/netperf-2.6.0/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/root/py/netperf-2.6.0'

調べたところ、spliceシステム呼び出しは2.6.17カーネルバージョン以降に発生したため、SUSE 11でコンパイルして通過した.
UBUNTUなどのバージョンであれば、既にソフトウェアライブラリにnetperfがあるので、パッケージマネージャでインストールできます.例えばUBUNTUでは、
sudo apt-get install netperf

使用


サービスの開始


Netperfには2つのプログラムが含まれています.1つはクライアントnetperfであり,種々のネットワーク挙動をシミュレートするために用いられる.もう1つはサーバプログラムnetserverです.クライアントのリクエストを受信するために使用されます.サービスを開始する操作は、次のようなものです.
# netserver
Starting netserver with host 'IN(6)ADDR_ANY' port '12865' and family AF_UNSPEC

デフォルトでは、TCPサービスのリスニングは12865ポートで開始されます.-pパラメータで変更できます.
どのUDPポートが使用されているかは見つかりませんが、テスト時にnetperfで有効になっているテスト項目に基づいてポートを再有効にしたと推定されます.

Netperfパラメータの説明


Netperfのパラメータフォーマットは次のとおりです.
netperf [global options] -- [test options] 

このうちglobal optionsは汎用パラメータであり、すべてのテスト項目は共通のパラメータに関連しているか、または共通のパラメータであり、よく使われています.
-Hホスト名またはIPはnetserverを実行するサーバのIPを指定する
-l試験時間指定試験の時間長を秒単位で指定
-tテスト項目テストの内容を指定します.テスト項目は以下の通りです.
TCPバッチデータ転送テストTCP_STREAM
                 TCP_SENDFILE

                 TCP_MAERTS

TCP要求応答(長接続)モードテストTCP_RR
                 TCP_CRR

UCP一括データ転送テストUDP_STREAM
                 UDP_RR

                 DLCO_STREAM

                 DLCO_RR

                 DLCL_STREAM

                 DLCL_RR

                 STREAM_STREAM

                 STREAM_RR

                 DG_STREAM

                 DG_RR

                 SCTP_STREAM

                 SCTP_STREAM_MANY

                 SCTP_RR

                 SCTP_RR_MANY

                 LOC_CPU

                 REM_CPU

test specific optionsは、テスト項目用のパラメータで、グローバルパラメータ間で「-」で区切るのと似ています.
netperf -H 127.0.0.1 -l 30 -- -m 2048

テスト項目パラメータはテスト項目に関連しています.

常用テスト項目


ネットワーク帯域幅テスト


帯域幅テスト一般使用-t TCP_STREAMテスト項目、これもnetperfのデフォルトテスト項目です.このテストはftpと同様にシステムの帯域幅をテストできますが、パラメータでより多くの設定ができます.例:
$ netperf -H 127.0.0.1 -l 60
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 127.0.0.1 () port 0 AF_INET : demo
Recv   Send    Send                          
Socket Socket  Message  Elapsed              
Size   Size    Size     Time     Throughput  
bytes  bytes   bytes    secs.    10^6bits/sec  

 87380  16384  16384    60.00    2760.70 

最初の列は、サービス側受信パケットのSocketバッファサイズです.ここでは87380はありません.
2番目の列は、クライアントがデータを送信するSocketバッファサイズであり、ここでは16384
3番目の列は、送信されたメッセージのサイズであり、ここでは16384である.
4列目はテスト時間です
第5列は試験速度であり,単位はMであり,ここで結果は2.7 Gであった.localhostを使用しているので、実際には自機のメモリで送受信されるデータです.
TCP_STREAMの常用テストパラメータは以下の通りである.
-sバッファサイズクライアント送信データのバッファサイズを指定-Sバッファサイズサービス側受信データのバッファサイズを指定
-m送信メッセージサイズ単位bytes
M-M受信メッセージサイズ単位bytes
これらのパラメータを調整して、転送速度に影響する要因を理解できます.たとえば、送信バッファが大きくなり、テスト結果は大きく変わりません.
1
2
3
4
5
6
7
8
$ netperf -H 127.0.0.1 -l 60 -- -s 65535 MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 127.0.0.1 () port 0 AF_INET : demo Recv Send Send Socket Socket Message Elapsed Size Size Size Time Throughput bytes bytes bytes secs. 10^6bits/sec   87380 131070 131070 60.00 2672.42 

受信バッファと発注サイズを変更すると、パフォーマンスが向上します.
$ netperf -H 127.0.0.1 -l 60 -- -S 65535 
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 127.0.0.1 () port 0 AF_INET : demo
Recv   Send    Send                          
Socket Socket  Message  Elapsed              
Size   Size    Size     Time     Throughput  
bytes  bytes   bytes    secs.    10^6bits/sec  

131070  16384  16384    60.00    3058.22   
$ netperf -H 127.0.0.1 -l 60 -- -m 65535
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 127.0.0.1 () port 0 AF_INET : demo
Recv   Send    Send                          
Socket Socket  Message  Elapsed              
Size   Size    Size     Time     Throughput  
bytes  bytes   bytes    secs.    10^6bits/sec  

 87380  16384  65535    60.00    3266.55   

UDPプロトコルの伝送性能


ネットワーク帯域幅テストと似ていますが、プロトコルを交換しただけなので、このプロジェクトはUDPです.STREAM:
$ netperf -H 127.0.0.1 -l 60 -t UDP_STREAM
MIGRATED UDP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 127.0.0.1 () port 0 AF_INET : demo
Socket  Message  Elapsed      Messages                
Size    Size     Time         Okay Errors   Throughput
bytes   bytes    secs            #      #   10^6bits/sec

212992   65507   60.00      440506      0    3847.46
212992           60.00      433151           3783.22

TCP_とSTREAMは違います.テスト結果には2行のデータがあります.1行目はクライアントで、2行目はサービス側です.
最初の列はバッファサイズで、netperfテストでは両端のバッファサイズが同じ大きさに設定されます.
2列目はメッセージサイズ
3列目はテスト転送時間です
第4列は伝送パケット量であり、UDPはプロトコルが伝送信頼性を保証しないため、送受信メッセージの数が異なり、実際の生産環境のパケット量は発注よりも少ない可能性がある.データから見ると、このパケットの数は毎秒数(メッセージサイズと速度の単位が異なる)であるべきです.
最後にテストの速度であり,TCPプロトコルよりも速いことがわかる.これは協議で決定された.

TCP長接続要求応答モードテスト


ネットワークデータ伝送に加えて、大量のネットワークトラフィックは、一方が1つのメッセージを送信し、他方が1つのメッセージを返信する要求/応答式である.また、通常、このようなリクエストと返信のメッセージの大きさは異なり、大きな違いさえあります.Netperfは、このようなアプリケーションシーンを簡単にシミュレートし、ネットワーク性能テストを行うことができます.テスト使用タイプはTCP_RR.
最も簡単なTCP_RRテストは以下の通りです.
$ netperf -H 127.0.0.1 -l 60 -t TCP_RR
MIGRATED TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 127.0.0.1 () port 0 AF_INET : demo : first burst 0
Local /Remote
Socket Size   Request  Resp.   Elapsed  Trans.
Send   Recv   Size     Size    Time     Rate         
bytes  Bytes  bytes    bytes   secs.    per sec   

16384  87380  1        1       60.00    13517.65   
16384  87380 

テスト結果は2行に分かれ、1行目はローカル、2行目はリモート(サービス側)
1番目の列と2番目の列はバッファであるべきで、STREAMテストの順序とは逆です.
3番目、4番目の列は、リクエストと戻りパケットのサイズです.デフォルトは1ビットです.
5列目はテスト時間
6番目の列は取引レートで、今回はペン数/秒で、帯域幅ではありません.
デフォルトのパケットサイズは実際のビジネスでは起こり得ません.パラメータを調整することで、実際の状況をシミュレートできます.テストパラメータ-rリクエストパケットサイズ、応答パケットサイズ(-r request,response)を使用してテストします.このパラメータの単位はBYTESであり、実際のビジネスではバイト単位のメッセージが一般的です.
$ netperf -H 127.0.0.1 -l 60 -t TCP_RR -- -r 64,2048
MIGRATED TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 127.0.0.1 () port 0 AF_INET : demo : first burst 0
Local /Remote
Socket Size   Request  Resp.   Elapsed  Trans.
Send   Recv   Size     Size    Time     Rate         
bytes  Bytes  bytes    bytes   secs.    per sec   

16384  87380  64       2048    60.00    13129.09   
16384  87380 

このテストは8バイトのリクエスト、256バイトの返信パケットを使用してテストされ、テスト結果はデフォルト値に対してわずかに低下します.

TCP短接続要求応答モードテスト


TCPリクエストのもう一つの大きなクラスは、HTTPトラフィックのような短い接続リクエスト応答メッセージである.対応する試験項目はTCP_CRR:
$ netperf -H 127.0.0.1 -l 60 -t TCP_CRR             
MIGRATED TCP Connect/Request/Response TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 127.0.0.1 () port 0 AF_INET : demo
Local /Remote
Socket Size   Request  Resp.   Elapsed  Trans.
Send   Recv   Size     Size    Time     Rate         
bytes  Bytes  bytes    bytes   secs.    per sec   

16384  87380  1        1       60.00    2210.55   
16384  87380 

テストパラメータと表示とTCP_RR類似.業務タイプの影響で、速度がひどく下がった.

UDP接続要求応答モードテスト


UDPプロトコルのため、UDP要求応答は長さと短さの接続を区別しない.UDPのみRR 1つのテスト項目で、テストパラメータもTCP類のテストに似ています.
$ netperf -H 127.0.0.1 -l 60 -t UDP_RR              
MIGRATED UDP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 127.0.0.1 () port 0 AF_INET : demo : first burst 0
Local /Remote
Socket Size   Request  Resp.   Elapsed  Trans.
Send   Recv   Size     Size    Time     Rate         
bytes  Bytes  bytes    bytes   secs.    per sec   

212992 212992 1        1       60.00    15837.63   
212992 212992

理論上、UDPのテスト結果はTCPより優れているが、実際のネットワークでは、ネットワークデバイスの構成などの影響を受ける可能性があり、一定の未知数がある.

シミュレーションテストの方法


まずテスト例をよくしなければならない.ビジネスのタイプ、プロトコルを明確にし、どのテスト項目を選択するかを決定し、一般的なパッケージのサイズなどのビジネスの特性を理解して、適切なパラメータを選択します.これらのパラメータは、ビジネス設計に基づいて決定することも、ビジネスモニタリングデータによって取得する必要がある場合もあります.例えば、データ中の最大流量と最大IO量を監視することによって、パケットのサイズを大まかに評価することができ、もちろんこの評価は正確ではない.
ネットワークのパフォーマンスを決定する要因の一部は構成に関連しているため、テストではバッファサイズなどのパラメータを変更して、ネットワークパラメータの調整が必要かどうかを知ることができます.
原文リンク先:http://pangyi.github.io/blog/20141210/wang-luo-ce-shi-gong-ju-netperf/written by PangYi  posted at http://pangyi.github.io