ネットワークテストツールnetperf
10285 ワード
一般的に、ネットワークの接続性、ネットワーク帯域幅、ネットワーク応答時間などをテストするネットワークテストを行います.よく使われるツールにはping、traceroute、telnet、ftpなどがあります.ネットワーク接続性をテストする場合はping、tracerouteを使用し、ファイアウォールの構成が正しいかどうかをテストする場合はtelnetとtraceroute-pを使用し、pingコマンドを使用してネットワーク遅延をテストし、ftpはネットワーク帯域幅をテストするために使用します.
しかし、異なるパケットサイズの異なるビジネスのネットワーク処理能力をテストするなど、より深いテストが必要な場合は、netperf、iperfなど、より専門的なツールが必要です.
Netperfはオープンソースのネットワークパフォーマンステストツールです.AIXとLINUXプラットフォームにインストールでき、プラットフォーム間での使用をサポートします.
NetperfはTCPネットワーク性能、UDPネットワーク性能をテストすることができ、Client/Serverの長接続または短接続シーンをシミュレートすることができるため、実際のネットワークの使用環境に近いテストと評価を行うことができる.
公式サイトからソースコードをダウンロードしてコンパイルインストールできます.インストールプロセスは基本的に3つのステップです.
デフォルトのインストールパスは/usr/localの下の各ディレクトリです.AIXなどのシステムでは、PATH環境変数を自分で設定するか、–prefixパラメータを使用してインストールパスを変更する必要がある場合があります.
SUSEの場合、インストール中にカーネルバージョンが2.6.16(SUSE 10)の場合、コンパイルエラーが発生します.
調べたところ、spliceシステム呼び出しは2.6.17カーネルバージョン以降に発生したため、SUSE 11でコンパイルして通過した.
UBUNTUなどのバージョンであれば、既にソフトウェアライブラリにnetperfがあるので、パッケージマネージャでインストールできます.例えばUBUNTUでは、
Netperfには2つのプログラムが含まれています.1つはクライアントnetperfであり,種々のネットワーク挙動をシミュレートするために用いられる.もう1つはサーバプログラムnetserverです.クライアントのリクエストを受信するために使用されます.サービスを開始する操作は、次のようなものです.
デフォルトでは、TCPサービスのリスニングは12865ポートで開始されます.-pパラメータで変更できます.
どのUDPポートが使用されているかは見つかりませんが、テスト時にnetperfで有効になっているテスト項目に基づいてポートを再有効にしたと推定されます.
Netperfのパラメータフォーマットは次のとおりです.
このうちglobal optionsは汎用パラメータであり、すべてのテスト項目は共通のパラメータに関連しているか、または共通のパラメータであり、よく使われています.
-Hホスト名またはIPはnetserverを実行するサーバのIPを指定する
-l試験時間指定試験の時間長を秒単位で指定
-tテスト項目テストの内容を指定します.テスト項目は以下の通りです.
TCPバッチデータ転送テストTCP_STREAM
TCP要求応答(長接続)モードテストTCP_RR
UCP一括データ転送テストUDP_STREAM
test specific optionsは、テスト項目用のパラメータで、グローバルパラメータ間で「-」で区切るのと似ています.
テスト項目パラメータはテスト項目に関連しています.
帯域幅テスト一般使用-t TCP_STREAMテスト項目、これもnetperfのデフォルトテスト項目です.このテストはftpと同様にシステムの帯域幅をテストできますが、パラメータでより多くの設定ができます.例:
最初の列は、サービス側受信パケットのSocketバッファサイズです.ここでは87380はありません.
2番目の列は、クライアントがデータを送信するSocketバッファサイズであり、ここでは16384
3番目の列は、送信されたメッセージのサイズであり、ここでは16384である.
4列目はテスト時間です
第5列は試験速度であり,単位はMであり,ここで結果は2.7 Gであった.localhostを使用しているので、実際には自機のメモリで送受信されるデータです.
TCP_STREAMの常用テストパラメータは以下の通りである.
-sバッファサイズクライアント送信データのバッファサイズを指定-Sバッファサイズサービス側受信データのバッファサイズを指定
-m送信メッセージサイズ単位bytes
M-M受信メッセージサイズ単位bytes
これらのパラメータを調整して、転送速度に影響する要因を理解できます.たとえば、送信バッファが大きくなり、テスト結果は大きく変わりません.
受信バッファと発注サイズを変更すると、パフォーマンスが向上します.
ネットワーク帯域幅テストと似ていますが、プロトコルを交換しただけなので、このプロジェクトはUDPです.STREAM:
TCP_とSTREAMは違います.テスト結果には2行のデータがあります.1行目はクライアントで、2行目はサービス側です.
最初の列はバッファサイズで、netperfテストでは両端のバッファサイズが同じ大きさに設定されます.
2列目はメッセージサイズ
3列目はテスト転送時間です
第4列は伝送パケット量であり、UDPはプロトコルが伝送信頼性を保証しないため、送受信メッセージの数が異なり、実際の生産環境のパケット量は発注よりも少ない可能性がある.データから見ると、このパケットの数は毎秒数(メッセージサイズと速度の単位が異なる)であるべきです.
最後にテストの速度であり,TCPプロトコルよりも速いことがわかる.これは協議で決定された.
ネットワークデータ伝送に加えて、大量のネットワークトラフィックは、一方が1つのメッセージを送信し、他方が1つのメッセージを返信する要求/応答式である.また、通常、このようなリクエストと返信のメッセージの大きさは異なり、大きな違いさえあります.Netperfは、このようなアプリケーションシーンを簡単にシミュレートし、ネットワーク性能テストを行うことができます.テスト使用タイプはTCP_RR.
最も簡単なTCP_RRテストは以下の通りです.
テスト結果は2行に分かれ、1行目はローカル、2行目はリモート(サービス側)
1番目の列と2番目の列はバッファであるべきで、STREAMテストの順序とは逆です.
3番目、4番目の列は、リクエストと戻りパケットのサイズです.デフォルトは1ビットです.
5列目はテスト時間
6番目の列は取引レートで、今回はペン数/秒で、帯域幅ではありません.
デフォルトのパケットサイズは実際のビジネスでは起こり得ません.パラメータを調整することで、実際の状況をシミュレートできます.テストパラメータ-rリクエストパケットサイズ、応答パケットサイズ(-r request,response)を使用してテストします.このパラメータの単位はBYTESであり、実際のビジネスではバイト単位のメッセージが一般的です.
このテストは8バイトのリクエスト、256バイトの返信パケットを使用してテストされ、テスト結果はデフォルト値に対してわずかに低下します.
TCPリクエストのもう一つの大きなクラスは、HTTPトラフィックのような短い接続リクエスト応答メッセージである.対応する試験項目はTCP_CRR:
テストパラメータと表示とTCP_RR類似.業務タイプの影響で、速度がひどく下がった.
UDPプロトコルのため、UDP要求応答は長さと短さの接続を区別しない.UDPのみRR 1つのテスト項目で、テストパラメータもTCP類のテストに似ています.
理論上、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
しかし、異なるパケットサイズの異なるビジネスのネットワーク処理能力をテストするなど、より深いテストが必要な場合は、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