使用iperf测试网络性能

上一篇 / 下一篇  2011-12-25 14:24:18

 

1.    iperf能够做什么

提起iperf,想必大家都知道它是用了测试网络性能的。具体说来,Iperf是美国伊利诺斯大学(University of Illinois)开发的一种开源的网络性能测试工具。可以用来测试网络节点间(也包括回环)TCPUDP连接的性能,包括带宽、抖动以及丢包率,其中抖动和丢包率适应于UDP测试,而带宽测试适应于TCPUDP

这里需要特别提出的是,iperf不能够用来测试时延,想一想这是为什么。

2.    网络性能参数

以上提到了网络的主要性能参数包括带宽,时延,抖动和丢包率,这些用一个名词代替,就是QOS(服务质量)。

对于时延和抖动,见如下图

图中D1D2分别表示包A和包B的时延。

抖动|D2-D1|

对于时延,iperf无能为力。但是iperf能够计算抖动,想想这又是为什么。

我们知道,在iperf中,我们测试时需要发送大量的包,因此计算出来的抖动值就是连续发送时延差值的平均值。

3.    安装iperf

Unix系统下,安装iperf最方便的方法是直接下载rpm包,使用rpm指定安装即可。

当然也可以直接去sourceforge上下载源代码,使用如下命令安装即可。

#./configure
#make
#make install

前提是该机器上已经有C++编译器和make等程序。安装完成之后,可以进行一个简单的回环测试iperf是否安装成功。

$ iperf -s

------------------------------------------------------------

Server listening on TCP port 5001

TCP window size: 85.3 KByte (default)

------------------------------------------------------------

[ 4] local 127.0.0.1 port 5001 connected with 127.0.0.1 port 35589

[ ID] Interval      Transfer    Bandwidth

[ 4] 0.0-10.0 sec 26.3 GBytes 22.6 Gbits/sec

$ iperf -c 127.0.0.1

------------------------------------------------------------

Client connecting to 127.0.0.1, TCP port 5001

TCP window size: 49.5 KByte (default)

------------------------------------------------------------

[ 3] local 127.0.0.1 port 35589 connected with 127.0.0.1 port 5001

[ ID] Interval      Transfer    Bandwidth

[ 3] 0.0-10.0 sec 26.3 GBytes 22.6 Gbits/sec

4.    iperf主要参数

iperf中的可选参数比较多,具体可以参见其用户手册。

http://webfolder.wirelessleiden.nl/iperf/

      一般来说,我们在做性能测试的时候需要指定包长,不同的包长会得到不同的吞吐量,通过-l指定,而使用-b指定带宽。

5.    测试吞吐量,抖动和丢包率

如何需要同时测试以上三个参数,那么只能通过UDP获得。使用-u参数进行UDP测试(iperf默认为TCP)。

在测试的最后server端会给出一个报告。

[ 3] local 192.168.1.1 port 2152 connected with 192.168.101.2 port 56768

[ ID] Interval      Transfer    Bandwidth       Jitter  Lost/Total Datagrams

[ 3] 0.0- 1.0 sec 1.40 MBytes 11.7 Mbits/sec  0.069 ms   0/14671 (0%)

[ 3] 1.0- 2.0 sec 1.40 MBytes 11.8 Mbits/sec  0.050 ms   0/14703 (0%)

[ 3] 2.0- 3.0 sec 1.40 MBytes 11.8 Mbits/sec  0.052 ms   0/14708 (0%)

[ 3] 3.0- 4.0 sec 1.40 MBytes 11.8 Mbits/sec  0.057 ms   0/14704 (0%)

[ 3] 4.0- 5.0 sec 1.40 MBytes 11.8 Mbits/sec  0.072 ms   0/14706 (0%)

[ 3] 5.0- 6.0 sec 1.40 MBytes 11.8 Mbits/sec  0.075 ms   0/14705 (0%)

[ 3] 6.0- 7.0 sec 1.40 MBytes 11.8 Mbits/sec  0.060 ms   0/14707 (0%)

[ 3] 7.0- 8.0 sec 1.40 MBytes 11.8 Mbits/sec  0.073 ms   0/14703 (0%)

[ 3] 8.0- 9.0 sec 1.40 MBytes 11.8 Mbits/sec  0.073 ms   0/14706 (0%)

[ 3] 0.0-10.0 sec 14.0 MBytes 11.8 Mbits/sec  0.064 ms   0/147020 (0%)

要获得带宽数据,需要不断在client端增加带宽值,直到server端出现轻微的丢包为止,此时server端显示的带宽就是被测系统的吞吐量。

6.    测试时延

那么有朋友会问,iperf不能用来测试时延,而时延又是比较重要的QOS参数,有什么办法吗?

其实最简单的办法就是使用Ping程序。我们经常用它来测试特定主机能否通过IP到达,

程序会按时间和反应成功的次数,估计丢包率和分组来回时间(即网络时延)。

当然,如果我们能成功构造一个回环测试路径,那么测试时延就轻而易举了,我们可以使用iperf发送数据,同时结合tcpdump抓包工具,经过wireshark分析.cap文件就可以得出包来回时间,也就是往返时延。

7.    使用TCP测试带宽应注意的问题

有时候,我们需要使用TCP来测试网络带宽。这里有一个参数需要特别注意,那就是TCP窗口大小,可以使用-w参数指定。

网络通道的容量capacity = bandwidth * round-trip time

而理论TCP窗口的大小就是网络通道的容量。

比如,网络带宽为40Mbit/s,回环路径消耗时间是2ms,那么TCP的窗口大小不小于40Mbit/s×2ms = 80kbit = 10Kbytes

此时我们可以查询iperf默认的TCP窗口大小来决定是否需要设置此参数,在此例中,窗口大小应设计大于10Kbytes,当然,这仅仅是理论值,在实际测试中可能需要作出调整。


TAG: 性能测试 iperf QOS

 

评分:0

我来说两句

我的栏目

日历

« 2024-03-28  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

数据统计

  • 访问量: 35225
  • 日志数: 3
  • 建立时间: 2011-12-25
  • 更新时间: 2012-05-07

RSS订阅

Open Toolbar