qperf測定ネットワーク帯域幅と遅延


私たちはネットワークサーバを作るとき、通常、ネットワークの帯域幅と遅延に関心を持っています.我々の多くのプロトコルはrequest−reponseプロトコルであるため,遅延は最大QPSを決定し,帯域幅は最大負荷を決定する.通常、私たちは自分のNICがどんなモデルなのか、スイッチがどんなモデルなのか、ホスト間の物理的な距離がどのくらいなのか、理論的には帯域幅と遅延がどのくらいなのかを知っています.しかし、現実的には、実際の帯域幅と遅延状況には多くの変数があり、例えば、NIC駆動、スイッチホップ数、パケット損失率、プロトコルスタック配置、光実際の速度は数値の推定に大きく影響している.実際に測定するためのツールを見つける必要があります
ネットワーク測定のツールはたくさんありますが、netperfなどはとてもいいです.ここでqperfをお勧めします.これはRHEL 6リリース版に付属しているので、使いやすいです.簡単なものであれば.
yum install qperf
いいですよ.
man qperfの紹介を見てみましょう.
qperf measures bandwidth and latency between two nodes. It can work over TCP/IP as well as the RDMA transports. On one of the nodes, qperf is typically run with no arguments designating it the server node. One may then run qperf on a client node to obtain measurements such as bandwidth, latency and cpu utilization.
In its most basic form, qperf is run on one node in server mode by invoking it with no arguments. On the other node, it is run with two arguments: the name of the server node followed by the name of the test. A list of tests can be found in the section, TESTS. A variety of options may also be specified.
使用もかなり簡単です.
いずれかのマシンでqperfを実行し、パラメータを持たないでください.このマシンはサーバの役割を果たします.
?
1
2
3$ uname -r 2.6.32-131.21.1.tb477.el6.x86_64 $ qperf別のマシンでqperfを実行し、tcpの帯域幅と遅延を測定し、ついでに双方のマシンの構成状況を見てみましょう.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14$ qperf 10.232.64.yyy tcp_bw tcp_lat conf tcp_bw:     bw  =  118 MB /sec tcp_lat:     latency  =  31.9 us conf:     loc_node   =  xxx.sqa.cm4     loc_cpu    =  16 Cores: Intel Xeon  L5630 @ 2.13GHz     loc_os     =  Linux 2.6.32-131.21.1.tb477.el6.x86_64     loc_qperf  =  0.4.6     rem_node   =  yyy.sqa.cm4     rem_cpu    =  16 Cores: Intel Xeon  L5630 @ 2.13GHz     rem_os     =  Linux 2.6.32-131.21.1.tb477.el6.x86_64     rem_qperf  =  0.4.6便利ではないでしょうか.典型的には,我々の帯域幅は118 M,遅延は32 usであり,標準的な千M環境では予想に合致した.
もちろんqperfには多くの高度なパラメータがあり、socket bufferのサイズを設定したり、CPUの親縁性をバインドしたりすることができます.素晴らしい特性の一つは、重要なパラメータの値を持続的に変更することで、臨界点を観察することができます.
-oo, -loop Var:Init:Last:Incr
Run a test multiple times sequencing through a series of values. Var is the loop variable;
Init is the initial value; Last is the value it must not exceed and Incr is the increment. It
is useful to set the -verbose_used (-vu) option in conjunction with this option.
例えば、メッセージのサイズ(msg_size)を変更することによって、例えば、1バイトから64 Kまで、倍増するたびに、帯域幅と遅延の変化を観察することができ、以下の例を示す.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69$ qperf -oo msg_size:1:64K:*2  10.232.64.yyy tcp_bw tcp_lat tcp_bw:     bw  =  2.43 MB /sec tcp_bw:     bw  =  4.69 MB /sec tcp_bw:     bw  =  9.12 MB /sec tcp_bw:     bw  =  18.5 MB /sec tcp_bw:     bw  =  33.1 MB /sec tcp_bw:     bw  =  61.4 MB /sec tcp_bw:     bw  =  114 MB /sec tcp_bw:     bw  =  118 MB /sec tcp_bw:     bw  =  113 MB /sec tcp_bw:     bw  =  114 MB /sec tcp_bw:     bw  =  114 MB /sec tcp_bw:     bw  =  118 MB /sec tcp_bw:     bw  =  117 MB /sec tcp_bw:     bw  =  118 MB /sec tcp_bw:     bw  =  118 MB /sec tcp_bw:     bw  =  117 MB /sec tcp_bw:     bw  =  117 MB /sec tcp_lat:     latency  =  31 us tcp_lat:     latency  =  31.1 us tcp_lat:     latency  =  31.1 us tcp_lat:     latency  =  31.4 us tcp_lat:     latency  =  30.8 us tcp_lat:     latency  =  32.1 us tcp_lat:     latency  =  32.6 us tcp_lat:     latency  =  33.3 us tcp_lat:     latency  =  35.5 us tcp_lat:     latency  =  38.6 us tcp_lat:     latency  =  50.1 us tcp_lat:     latency  =  69.6 us tcp_lat:     latency  =  88 us tcp_lat:     latency  =  128 us tcp_lat:     latency  =  209 us tcp_lat:     latency  =  365 us tcp_lat:     latency  =  650 usパケットのサイズが64バイトに達すると、帯域幅が上がらないことがわかります.バッグが1 Kに到着した時点で、遅延が大きく変わっていました.これらの臨界点は、サーバのプログラミング時にパフォーマンスの推定と予想に非常に役立ちます.
qperfはtcpを測定するほか、rdma、udp、sctpなどの主流ネットワークプロトコルの帯域幅と遅延をテストすることができ、新しいツールであり、お勧めします.