TCP/UDP网络性能测试工具 - Netperf

上一篇 / 下一篇  2007-10-05 20:28:54 / 个人分类:网络测试工具

概述

    在构建或管理一个网络系统时,我们更多的是关心网络的可用性,即网络是否连通,而对于其整体的性能往往考虑不多,或者即使考虑到性能的问题,但是却发现没有合适的手段去测试网络的性能。 51Testing软件测试网+_(x?"sI|l?\
    当开发出一个网络应用程序后,我们会发现,在实际的网络环境使用中,网络应用程序的使用效果不 是很理想,问题可能出现在程序的开发上面,也有可能由于实际的网络环境中存在着瓶颈。面对这种问题,程序员一般会一筹莫展,原因就在于不掌握一些网络性能测量的工具。  
,S"YTn bE0    在本文中,首先介绍网络性能测量的一些基本概念和方法,然后结合 netperf 工具的使用,具体的讨论如何测试不同情况下的网络性能。 
ma iW wa0网络性能测试概述

g+R3mAa)m/w&K/Uht0
网络性能测量的五项指标

    测量网络性能的五项指标是:   可用性(availability) 响应时间(response time) 网络利用率(network utilization) 网络吞吐量(network throughput) 网络带宽容量(network bandwidth capacity)
P/ihm6gM)X01. 可用性51Testing软件测试网b"H.Uze2v
    测试网络性能的第一步是确定网络是否正常工作,最简单的方法是使用 ping 命令。通过向远端的机器发送 icmp echo request,并等待接收 icmp echo reply 来判断远端的机器是否连通,网络是否正常工作。 

+I$}t/bpd0    Ping 命令有非常丰富的命令选项,比如 -c 可以指定发送 echo request 的个数,-s 可以指定每次发送的 ping 包大小。 

p"y\5L9E9M s*U0    网络设备内部一般有多个缓冲池,不同的缓冲池使用不同的缓冲区大小,分别用来处理不同大小的分组(packet)。例如交换机中通常具有三种类型的 包缓冲:一类针对小的分组,一类针对中等大小的分组,还有一类针对大的分组。为了测试这样的网络设备,测试工具必须要具有发送不同大小分组的能力。 Ping 命令的 -s 就可以使用在这种场合。
9Iw)o.s w02. 响应时间51Testing软件测试网 s5uY5B3z^(n/`
    Ping 命令的 echo request/reply 一次往返所花费时间就是响应时间。有很多因素会影响到响应时间,如网段的负荷,网络主机的负荷,广播风暴,工作不正常的网络设备等等。 

5d {/snO0在网络工作正常时,记录下正常的响应时间。当用户抱怨网络的反应时间慢时,就可以将现在的响应时间与正常的响应时间对比,如果两者差值的波动很大,就能说明网络设备存在故障。 字串951Testing软件测试网1XXMW6Ao
3. 网络利用率 字串951Testing软件测试网(DJ9|!tSI'i
    网络利用率是指网络被使用的时间占总时间(即被使用的时间+空闲的时间)的比例。比如,Ethernet 虽然是共享的,但同时却只能有一个报文在传输。因此在任一时刻,Ethernet 或者是 100% 的利用率,或者是 0% 的利用率。
y-u4F-v)|4Iw0    计算一个网段的网络利用率相对比较容易,但是确定一个网络的利用率就比较复杂。因此,网络测试工具一般使用网络吞吐量和网络带宽容量来确定网络中两个节点之间的性能。51Testing软件测试网.}h3L B d#s4H i
4. 网络吞吐量
3gp m"jB0    网络吞吐量是指在某个时刻,在网络中的两个节点之间,提供给网络应用的剩余带宽。
"lt`%D yy({^${0    网络吞吐量可以帮组寻找网络路径中的瓶颈。比如,即使 client 和 server 都被分别连接到各自的 100M Ethernet 上,但是如果这两个 100M 的Ethernet 被 10M 的 Ethernet 连接起来,那么 10M 的 Ethernet 就是网络的瓶颈。51Testing软件测试网 i[}&f)L/t
    网络吞吐量非常依赖于当前的网络负载情况。因此,为了得到正确的网络吞吐量,最好在不同时间(一天中的不同时刻,或者一周中不同的天)分别进行测试,只有这样才能得到对网络吞吐量的全面认识。
v$y Ji5t0    有些网络应用程序在开发过程的测试中能够正常运行,但是到实际的网络环境中却无法正常工作(由于没有足够的网络吞吐量)。这是因为测试只是在空闲的网络环境中,没有考虑到实际的网络环境中还存在着其它的各种网络流量。所以,网络吞吐量定义为剩余带宽是有实际意义的。51Testing软件测试网 ^ A \#wR3T%[ M*g1I
5. 网络带宽容量 
51Testing软件测试网/Ev6F I*Z)}cHz
    与网络吞吐量不同,网络带宽容量指的是在网络的两个节点之间的最大可用带宽。这是由组成网络的设备的能力所决定的。
b |,UVr.h0    测试网络带宽容量有两个困难之处:在网络存在其它网络流量的时候,如何得知网络的最大可用带宽;在测试过程中,如何对现有的网络流量不造成影响。网络测试工具一般采用 packet pairs 和 packet trains 技术来克服这样的困难。
51Testing软件测试网XgQ%e4s

收集网络性能数据的方式

    当确定了网络性能的测试指标以后,就需要使用网络测试工具收集相应的性能数据,分别有三种从网络获取数据的方式: 
x"Hy4T/f n;zg01. 通过snmp协议直接到网络设备中获取,如net-snmp工具51Testing软件测试网k*m U NN nl W/|U
2. 侦听相关的网络性能数据,典型的工具是tcpdump 
f{u5Xo3N03. 自行产生相应的测试数据,如本文中使用的netperf工具

K i.ic0G2H}0
Netperf

    Netperf是一种网络性能的测量工具,主要针对基于TCP 或UDP的传输。Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式。Netperf测试结果所反映的是一个系统能够以多快的速度向另外一个系统 发送数据,以及另外一个系统能够以多块的速度接收数据。
8Z#}cdKlb |0    Netperf工具以client/server方式工作。server端是netserver,用来侦听来自client端的连接,client 端是netperf,用来向server发起网络测试。在client与server之间,首先建立一个控制连接,传递有关测试配置的信息,以及测试的结 果;在控制连接建立并传递了测试配置信息以后,client与server之间会再建立一个测试连接,用来来回传递着特殊的流量模式,以测试网络的性能。
51Testing软件测试网Y-fO-ww-A)v&P

TCP网络性能

    由于TCP协议能够提供端到端的可靠传输,因此被大量的网络应用程序使用。但是,可靠性的建立是要付出代价的。TCP协议保证可靠性的措施,如建立并维护连接、控制数据有序的传递等都会消耗一定的网络带宽。
tZ;Xk*Rt|@0    Netperf可以模拟三种不同的TCP流量模式: 51Testing软件测试网)[9h!DxOH9Ki~0H
1) 单个TCP连接,批量(bulk)传输大量数据
!n,IFO'Y'hOY02) 单个TCP连接,client请求/server应答的交易(transaction)方式
p%{7_P/sw~@03) 多个TCP连接,每个连接中一对请求/应答的交易方式
51Testing软件测试网+W*Jl?({3[7x_

UDP网络性能

    UDP没有建立连接的负担,但是UDP不能保证传输的可靠性,所以使用UDP的应用程序需要自行跟踪每个发出的分组,并重发丢失的分组。51Testing软件测试网a m.xy*Am` N
Netperf可以模拟两种UDP的流量模式:

,Ep9xA A)n01) 从client到server的单向批量传输51Testing软件测试网U$W;H7D9C:q)I)RA?
2) 请求/应答的交易方式
51Testing软件测试网J-U!g1O:zx3k
    由于UDP传输的不可靠性,在使用netperf时要确保发送的缓冲区大小不大于接收缓冲区大小,否则数据会丢失,netperf将给出错误的结果。因此,对于接收到分组的统计不一定准确,需要结合发送分组的统计综合得出结论。 
51Testing软件测试网J3Gfp n9tES

Netperf的命令行参数

    在unix系统中,可以直接运行可执行程序来启动netserver,也可以让inetd或xinetd来自动启动netserver。
y wQ1\RMn$u0    当netserver在server端启动以后,就可以在client端运行netperf来测试网络的性能。netperf通过命令行参数来控制 测试的类型和具体的测试选项。根据作用范围的不同,netperf的命令行参数可以分为两大类:全局命令行参数、测试相关的局部参数,两者之间使用--分隔:51Testing软件测试网!N LE{fk\bG
netperf [global options]-- [test-specific options]51Testing软件测试网~l,g{#Qowu
这里我们只解释那些常用的命令行参数,其它的参数读者可以查询netperf的man手册。51Testing软件测试网"MF1@'k_nT l,T
-H host :指定远端运行netserver的server IP地址。
51Testing软件测试网/p ^{ld
-l testlen:指定测试的时间长度(秒)51Testing软件测试网 c9@}2|G@-d%Gvj
-t testname:指定进行的测试类型,包括TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,UDP_RR,在下文中分别对它们说明。51Testing软件测试网i]3LHd!_&F
    在后面的测试中,netserver运行在192.168.0.28,server与client通过局域网连接(100M Hub)。 字串3
51Testing软件测试网F_L5V-@

Netperf测试网络性能

测试批量(bulk)网络流量的性能51Testing软件测试网RtbN;u
    批量数据传输典型的例子有ftp和其它类似的网络应用(即一次传输整个文件)。根据使用传输协议的不同,批量数据传输又分为TCP批量传输和UDP批量传输。
f+@ee6y!y01. TCP_STREAM 
51Testing软件测试网8x(^R3JL V(hM
Netperf缺省情况下进行TCP批量传输,即-t TCP_STREAM。测试过程中,netperf向netserver发送批量的TCP数据分组,以确定数据传输过程中的吞吐量:51Testing软件测试网T7TOWig+i
 ./netperf -H 192.168.0.28 -l 60
N!Lj2Zu/z:L8f#M0TCP STREAM TEST to 192.168.0.2851Testing软件测试网 G[/r/R9~J
Recv   Send    Send51Testing软件测试网W-qHl!P0? L
Socket Socket  Message  Elapsed51Testing软件测试网 n2UAur5R/W#FV2G2y
Size   Size    Size     Time     Throughput
["D3BB Ph.\c0bytes  bytes   bytes    secs.    10^6bits/sec
CL)~hW,K }Z0
51Testing软件测试网H1x/D0PO.|:O
87380  16384  16384    60.00      88.00
51Testing软件测试网)SN3S {R5vQq
从netperf的结果输出中,我们可以知道以下的一些信息: 

h'[6rwT$b k8P:h01) 远端系统(即server)使用大小为87380字节的socket接收缓冲
rW}Aerh ~8C02) 本地系统(即client)使用大小为16384字节的socket发送缓冲
`|DQ/L d.gIl,Cy03) 向远端系统发送的测试分组大小为16384字节
`'zo/Fw(ZH pS#TK:|(}04) 测试经历的时间为60秒
D U^,`s(QD;h05) 吞吐量的测试结果为88Mbits/秒51Testing软件测试网{!^AO{O W
    在缺省情况下,netperf向发送的测试分组大小设置为本地系统所使用的socket发送缓冲大小。 51Testing软件测试网g2A#ABZ
    TCP_STREAM方式下与测试相关的局部参数如下表所示: 
51Testing软件测试网 yq:_}#wiaD

51Testing软件测试网-Dwb5O?B%? P@7T

参数

&@&c0c \[0t;zK0

yaX-u bB z B!F"l,[Z0说明51Testing软件测试网:{qr+k2[.aYz/V

51Testing软件测试网G] P7F"aot

-s size51Testing软件测试网X ]0]3E-Sug

.ta.^YTT0设置本地系统的socket发送与接收缓冲大小51Testing软件测试网&os fW%K^} X

%FCe4|'pbi0-S size51Testing软件测试网^'Y^4?gd%T

51Testing软件测试网*QG j9t ]pkN|

设置远端系统的socket发送与接收缓冲大小

A]KQ,u&[4C%w0
51Testing软件测试网(jh%c b(S1Ep0A

-m size

9k"S"Pb1YKu'B$q-A*P R0

Mr} @Xc W0设置本地系统发送测试分组的大小

a3}j|E[;x0

2s[:P;Eyn0-M size51Testing软件测试网6I F#h!@3V:Y6ZG et

51Testing软件测试网3W\[Xhh2g

设置远端系统接收测试分组的大小

@R5n8n$E E0

C4N8t3gu _!e6mk0-D51Testing软件测试网h[[ ZaG

z8`3Q_2OFY0对本地与远端系统的socket设置TCP_NODELAY选项51Testing软件测试网/X`uH$S"{;w6Ip#~


H5|+J$f AV^O:w0    通过修改以上的参数,并观察结果的变化,我们可以确定是什么因素影响了连接的吞吐量。例如,如果怀疑路由器由于缺乏足够的缓冲区空间,使得转发大的分组时存在问题,就可以增加测试分组(-m)的大小,以观察吞吐量的变化:
/u6Mq7r(C&|*]0 ./netperf -H 192.168.0.28 -l 60 -- -m 204851Testing软件测试网!f;X1Ob3^a
TCP STREAM TEST to 192.168.0.2851Testing软件测试网ZB!ea&x s^-f$l*L
Recv   Send    Send51Testing软件测试网+Xh.nH7|S
Socket Socket  Message  Elapsed51Testing软件测试网 pK]i*m-C
Size   Size    Size     Time     Throughput51Testing软件测试网^R#N6`o9d
bytes  bytes   bytes    secs.    10^6bits/sec
J$vMRup0
TLz[ i3~#v4M087380  16384   2048    60.00      87.62

hv4sb IF,P0

?8e b ~"q1J(h0    在这里,测试分组的大小减少到2048字节,而吞吐量却没有很大的变化(与前面例子中测试分组大小为16K字节相比)。相反,如果吞吐量有了较大的提升,则说明在网络中间的路由器确实存在缓冲区的问题。51Testing软件测试网^ ~3wL4`5z#G@
2. UDP_STREAM51Testing软件测试网K;XzD^u0f*YSJ+e3nW n
   UDP_STREAM用来测试进行UDP批量传输时的网络性能。需要特别注意的是,此时测试分组的大小不得大于socket的发送与接收缓冲大小,否则netperf会报出错提示:51Testing软件测试网CK0s,V2fB j%R^
./netperf -t UDP_STREAM -H 192.168.0.28 -l 60
kO},XJ7{v0UDP UNIDIRECTIONAL SEND TEST to 192.168.0.2851Testing软件测试网 O`jMKSle
udp_send: data send error: Message too long51Testing软件测试网!H h \,|,v'n)C
    为了避免这样的情况,可以通过命令行参数限定测试分组的大小,或者增加socket的发送/接收缓冲大小。UDP_STREAM方式使用与TCP_STREAM方式相同的局部命令行参数,因此,这里可以使用-m来修改测试中使用分组的大小:51Testing软件测试网MG#pr\2l
 ./netperf -t UDP_STREAM -H 192.168.0.28 -- -m 102451Testing软件测试网T)t!@7p[f
UDP UNIDIRECTIONAL SEND TEST to 192.168.0.2851Testing软件测试网h"dQZ"E0x|5r&|p
Socket  Message  Elapsed      Messages
;iA1o6sd\0Size    Size     Time         Okay Errors   Throughput51Testing软件测试网*A9Zj Y7G
bytes   bytes    secs            #      #   10^6bits/sec51Testing软件测试网g"e M"i8ip&}b|N%J

| Rg"B D/O)Z~8g065535    1024   9.99       114127      0      93.55
m#P|6E+ju065535           9.99       114122             93.5451Testing软件测试网'ps2]J-U Z
    UDP_STREAM方式的结果中有两行测试数据,第一行显示的是本地系统的发送统计,这里的吞吐量表示netperf向本地socket发送分组的能力。但是,我们知道,UDP是不可靠的传输协议,发送出去的分组数量不一定等于接收到的分组数量。 字串1
O SNG9~ Wp0    第二行显示的就是远端系统接收的情况,由于client与server直接连接在一起,而且网络中没有其它的流量,所以本地系统发送过去的分组几乎 都被远端系统正确的接收了,远端系统的吞吐量也几乎等于本地系统的发送吞吐量。但是,在实际环境中,一般远端系统的socket缓冲大小不同于本地系统的 socket缓冲区大小,而且由于UDP协议的不可靠性,远端系统的接收吞吐量要远远小于发送出去的吞吐量。
51Testing软件测试网!B)Qi2wv"\2V"n-k

测试请求/应答(request/response)网络流量的性能 

    另一类常见的网络流量类型是应用在client/server结构中的request/response模式。在每次交易(transaction)中,client向server发出小的查询分组,server接收到请求,经处理后返回大的结果数据。

~ ?Rak+r*` _` V0

1. TCP_RR 

    TCP_RR方式的测试对象是多次TCP request和response的交易过程,但是它们发生在同一个TCP连接中,这种模式常常出现在数据库应用中。数据库的client程序与server程序建立一个TCP连接以后,就在这个连接中传送数据库的多次交易过程。
p_G2M1sa-c0./netperf -t TCP_RR -H 192.168.0.2851Testing软件测试网+J)Um`/fw
TCP REQUEST/RESPONSE TEST to 192.168.0.28
,P^3EQ5l!h7?0Local /Remote
6n|z6j;~J&v0Socket Size   Request  Resp.   Elapsed  Trans.51Testing软件测试网3^$Hj5ms-Gn
Send   Recv   Size     Size    Time     Rate
GOjMZa.m-]0bytes  Bytes  bytes    bytes   secs.    per sec
@tA J L0
j%TI$y6{5M@016384  87380  1        1       10.00    9502.73
\(I'MIqv016384  87380

$|9]X)c-{aK0

     Netperf输出的结果也是由两行组成。第一行显示本地系统的情况,第二行显示的是远端系统的信息。平均的交易率(transaction rate)为9502.73次/秒。注意到这里每次交易中的request和response分组的大小都为1个字节,不具有很大的实际意义。用户可以通 过测试相关的参数来改变request和response分组的大小,TCP_RR方式下的参数如下表所示:

51Testing软件测试网 j JAv{I"Ji

参数

.})n j wwi-Pz0

Z#dDFA h-]0说明51Testing软件测试网 uN;[-~$c-RJ4L/j#T

51Testing软件测试网xdL(Kc8q

-r req,resp51Testing软件测试网UvTW|a(f*^ ]6u

0?1w.Lf~H@/_0设置request和reponse分组的大小

Z-k(~ Q6x%J;TE0
51Testing软件测试网7g3y&s$a)SZR `Z

-s size51Testing软件测试网s@7[0eN$}2Ox

wog(Ps3Xp0设置本地系统的socket发送与接收缓冲大小51Testing软件测试网 mK.P_L

51Testing软件测试网c$|Bb p

-S size

'Q?VB oW0
51Testing软件测试网1P&TP/u k.H+A v$A,Fej

设置远端系统的socket发送与接收缓冲大小

z'Y ~Bq`9h'e0
51Testing软件测试网"k|6Y |D L1Z0b

-D51Testing软件测试网G-W9G0Y8o_pz+{5a

51Testing软件测试网v0o#kT4W~g Ij

对本地与远端系统的socket设置TCP_NODELAY选项51Testing软件测试网!?Ake Te2z"{B'N

51Testing软件测试网"E*mk6T l5s*D5Q$Hi

通过使用-r参数,我们可以进行更有实际意义的测试:51Testing软件测试网{ ^Zoi
./netperf -t TCP_RR -H 192.168.0.28 -- -r 32,1024
y9Z{0i*K-A vj0TCP REQUEST/RESPONSE TEST to 192.168.0.2851Testing软件测试网'Vo(I7n[*F
Local /Remote51Testing软件测试网(iuRW5u)D"S4c(V
Socket Size   Request  Resp.   Elapsed  Trans.
]b0d/f{.pK`6O0Send   Recv   Size     Size    Time     Rate
sw5F5qRP0bytes  Bytes  bytes    bytes   secs.    per sec
-~'cp M$T051Testing软件测试网#gi9G,L q6s
16384  87380  32       1024    10.00    4945.97
,e|?.G'n6Y6_qV016384  87380
!T*H(C8i)N[-u0

    从结果中可以看出,由于request/reponse分组的大小增加了,导致了交易率明显的下降。注:相对于实际的系统,这里交易率的计算没有充分考虑到交易过程中的应用程序处理时延,因此结果往往会高于实际情况。

2. TCP_CRR

    与TCP_RR不同,TCP_CRR为每次交易建立一个新的TCP连接。最典型的应用就是HTTP,每次HTTP交易是在一条单独的TCP连接中进行的。因此,由于需要不停地建立新的TCP连接,并且在交易结束后拆除TCP连接,交易率一定会受到很大的影响。51Testing软件测试网4kY$|r2z
./netperf -t TCP_CRR -H 192.168.0.2851Testing软件测试网,rS` E!k(LqI!xD
TCP Connect/Request/Response TEST to 192.168.0.2851Testing软件测试网?}'E&E!R _G
Local /Remote
J3[%N1Kd.a0Socket Size   Request  Resp.   Elapsed  Trans.51Testing软件测试网Y'zOGH me W
Send   Recv   Size     Size    Time     Rate51Testing软件测试网B)T(N!K\[\&T[
bytes  Bytes  bytes    bytes   secs.    per sec
:g-B7XSl{0
-F OZ$ax0131070 131070 1        1       9.99     2662.2051Testing软件测试网B$M0f%Zk(G]8ol
16384  8738051Testing软件测试网f/O7\5P-t2S!z w

    即使是使用一个字节的request/response分组,交易率也明显的降低了,只有2662.20次/秒。TCP_CRR使用与TCP_RR相同的局部参数。

3. UDP_RR  
$EMv;a/gA0
51Testing软件测试网B-a1xS C.`IL

   UDP_RR方式使用UDP分组进行request/response的交易过程。由于没有TCP连接所带来的负担,所以我们推测交易率一定会有相应的提升。
./netperf -t UDP_RR -H 192.168.0.2851Testing软件测试网5oU[0Jv4j~7q!s9Nz
UDP REQUEST/RESPONSE TEST to 192.168.0.28
3L&}`;v#Y+?;s y D0Local /Remote
3_X[Aap0Socket Size   Request  Resp.   Elapsed  Trans.51Testing软件测试网*Vl5@-]R
Send   Recv   Size     Size    Time     Rate51Testing软件测试网2h)@|#D [
bytes  Bytes  bytes    bytes   secs.    per sec
9L(v1T`g051Testing软件测试网E2\4^6]c1y-e s,[B
65535  65535  1        1       9.99     10141.16
)\&rL)e8iF^r0GQ065535  65535

(h x:ki6Ik`0
   结果证实了我们的推测,交易率为10141.16次/秒,高过TCP_RR的数值。不过,如果出现了相反的结果,即交易率反而降低了,也不需要担心,因为这说明了在网络中,路由器或其它的网络设备对UDP采用了与TCP不同的缓冲区空间和处理技术。

结束语
V)PI$_4p+?Q1S0    除了netperf以外,还有很多其它的网络性能测试工具,如dbs, iperf, pathrate, nettest, netlogger, tcptrace, ntop等。这些工具有其各自的特色和不同的侧重点,我们可以根据具体的应用环境,有选择的使用它们,这样就可以使这些工具发挥出最大的功效。虽然都是开 放源代码的软件,但是这些工具的功能与商业的网络测试工具同样强大,而且也得到了广泛的应用,熟悉这些工具对我们的实际工作一定会有很大的帮助。 
51Testing软件测试网m'Lb*T O_u$t5r/J

参考资料51Testing软件测试网_*\b6zj.@

51Testing软件测试网1Gd:LQ5_ z

Network Performance Open Source Toolkit, Richard Blum, Wiley Publishing, Inc.51Testing软件测试网'd1U1g2} tW
netperf website,http://www.netperf.org

Mkui-Br)L0
相关阅读:

TAG: 网络测试工具 网络性能 netperf

引用 删除 yuzsh123   /   2011-03-07 11:00:32
1
路漫漫其修远兮, 吾将上下而求索! 引用 删除 zeus   /   2007-10-06 21:34:35
我们大部分的工作平台是linux, 再加上公司"吝啬", 只要不是客户提供的一般的都使用开源的, 用不起收费的, 呵呵. 这个工具还基本好用, 用来测试基于TCP/UDP/IP的的性能, 用iperf主要用于组播性能的测试.
Smoke中转站 引用 删除 shanxi   /   2007-10-06 16:26:11
好像是开源的
楼主在实际工作中它的用处怎么样?
 

评分:0

我来说两句

Open Toolbar