文档章节

Netperf 做网络性能测试

Q
 QEfarmer
发布于 2017/03/15 14:47
字数 2341
阅读 190
收藏 0

Netperf是一种网络性能测量工具,主要针对基于TCP或UDP的传输,Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式。Netperf测试结果所反映的是一个系统能够以多快的速度向另外一个系统发送数据,以及另外一个系统能够以多块的速度接收数据。

一 netperf 简介

1.1.工作原理

Netperf工具以client/server方式工作。server端是netserver,用来侦听来自client端的连接,client端是netperf,用来向server发起网络测试.在client与server之间,首先建立一个控制连接,传递有关测试配置的信息,以及测试的结果:在控制连接建立并传递了测试配置信息以后,client与server之间会再建立一个测试连接,进行来回传递特殊的流量模式,以测试网络的性能.具体过程如下图所示:

                                 图.1 建立连接

                                图2 测试并产生结果

                                 图3 回传结果

1.2 安装

下载Netperf工具 

# wget ftp://ftp.netperf.org/netperf/netperf-2.5.0.tar.gz 

# tar zxvf netperf-2.5.0.tar.gz 

# ./configure

# make && make install

   在unix系统中,可以直接运行可执行程序来启动netserver。测试的时候,必须在两台机器上同时安装netperf,当netserver在server端启动以后,就可以在client端运行netperf来测试网络的性能。

1.3 命令介绍

根据作用范围的不同,netperf的命令行参数可以分为两大类:全局命令行参数、测试相关的局部参数,两者之间使用--分隔:

Netperf [global options] –-[test-specific options]

其中:

全局命令行参数包括如下选项:

-H host :指定远端运行netserver的server IP地址。

-l testlen:指定测试的时间长度(秒)

-t testname:指定进行的测试类型,包括TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,UDP_RR

 

测试相关的局部参数包括如下选项:

-s size 设置本地系统的socket发送与接收缓冲大小

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

-m size 设置本地系统发送测试分组的大小

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

-D 对本地与远端系统的socket设置TCP_NODELAY选项

 

二 使用netperf进行网络测试

2.1 测试批量(bulk)网络流量的性能

批量数据传输典型的例子有ftp和其它类似的网络应用(即一次传输整个文件)。根据使用传输协议的不同,批量数据传输又分为TCP批量传输和UDP批量传输。

1.TCP_STREAM

Netperf缺省情况下进行TCP批量传输,即-t TCP_STREAM。测试过程中,netperf向netserver发送批量的TCP数据分组,以确定数据传输过程中的吞吐量:

[root@rac4 ~]# netperf  -H 10.250.7.241 -l 60  

MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.250.7.241 (10.250.7.241) port 0 AF_INET

Recv   Send    Send                          

Socket Socket  Message  Elapsed              

Size   Size    Size     Time     Throughput  

bytes  bytes   bytes    secs.    10^6bits/sec  

87380  16384  16384    60.12     826.89  

从netperf测试的输出结果,可以知道如下信息:

1)远端系统(即server)使用大小为87380字节的socket接收缓冲

2)本地系统(即client)使用大小为16384字节的socket发送缓冲

3)向远端系统发送的测试分组大小为16384字节

4)测试经历的时间为60秒

5)吞吐量的测试结果为826.89 Mbits/秒

在缺省情况下,netperf向发送的测试分组大小设置为本地系统所使用的socket发送缓冲大小。

对于有问题的网络,我们可以修改上面介绍的测试局部参数,来判段是什么原因导致网络的吞吐量异常的!比如修改发送的包的大小来测试,来测试路由的缓存是否合适

[root@rac4 ~]# netperf  -H 10.250.7.241 -l 20  -- -m 20480

MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.250.7.241 (10.250.7.241) port 0 AF_INET

Recv   Send    Send                          

Socket Socket  Message  Elapsed              

Size   Size    Size     Time     Throughput  

bytes  bytes   bytes    secs.    10^6bits/sec  

 

 87380  16384  20480    20.00     787.26   

[root@rac4 ~]# netperf  -H 10.250.7.241 -l 20  -- -m 16384

MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.250.7.241 (10.250.7.241) port 0 AF_INET

Recv   Send    Send                          

Socket Socket  Message  Elapsed              

Size   Size    Size     Time     Throughput  

bytes  bytes   bytes    secs.    10^6bits/sec  

 

 87380  16384  16384    20.00     998.21   

[root@rac4 ~]# netperf  -H 10.250.7.241 -l 20  -- -m 10240

MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.250.7.241 (10.250.7.241) port 0 AF_INET

Recv   Send    Send                          

Socket Socket  Message  Elapsed              

Size   Size    Size     Time     Throughput  

bytes  bytes   bytes    secs.    10^6bits/sec  

 87380  16384  10240    20.01     785.19   

从上面的例子看来,增大或者减小都会影响网络的吞吐量!默认的16384是最优的(我的测试环境是同一网段下的两台VM,不具有代表性)

2.UDP_STREAM

UDP_STREAM用来测试进行UDP批量传输时的网络性能。注意:此时测试分组的大小不得大于socket的发送与接收缓冲大小,否则netperf会报出错提示:

[root@rac4 ~]#  netperf -t UDP_STREAM  -H 10.250.7.241 -l 30 -- -m 262155  

MIGRATED UDP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.250.7.241 (10.250.7.241) port 0 AF_INET

send_data: data send error: errno 90

netperf: send_omni: send_data failed: Message too long

我的测试环境socket 默认的缓冲大小为262144bytes!

[root@rac3 ~]#  netperf -t UDP_STREAM  -H 10.250.7.220 -l 10  

MIGRATED UDP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.250.7.220 (10.250.7.220) port 0 AF_INET

Socket  Message  Elapsed      Messages                

Size    Size     Time         Okay Errors   Throughput

bytes   bytes    secs            #      #   10^6bits/sec

262144   65507   10.00       28783      0    1508.00

262144           10.00       35376           1853.42

UDP_STREAM方式的结果中有两行测试数据:

第一行:本地系统的发送统计,这里的吞吐量表示netperf向本地socket发送分组的能力。

第二行:远端系统的接收统计!从上面的结果可以看出10.250.7.220 和 本地的吞吐量是相近的!

在实际环境中,一般远端系统的socket缓冲大小不同于本地系统的socket缓冲区大小,而且由于UDP协议的不可靠性,远端系统的接收吞吐量要远远小于发送出去的吞吐量。

[root@rac4 ~]#  netperf -t UDP_STREAM  -H 10.250.7.241 -l 10

MIGRATED UDP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.250.7.241 (10.250.7.241) port 0 AF_INET

Socket  Message  Elapsed      Messages                

Size    Size     Time         Okay Errors   Throughput

bytes   bytes    secs            #      #   10^6bits/sec

262144   65507   10.00       42962      0    2251.09

262144           10.00       17866            936.13

接收的17866少于发送的42962,吞吐量也有较大出入!

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

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

1.TCP_RR

TCP_RR方式的测试对象是多次TCP request和response的交易过程,但是它们发生在同一个TCP连接中,这种模式常常出现在数据库应用中。数据库的client程序与server程序建立一个TCP连接以后,就在这个连接中传送数据库的多次交易过程。

[root@rac3 ~]#  netperf -t TCP_RR -H 10.250.7.220 

MIGRATED TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.250.7.220 (10.250.7.220) port 0 AF_INET : 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       10.00    10481.21   

16384  87380 

第一行显示本地系统的信息。

第二行显示远端系统的信息。

平均的交易率(transaction rate)为 10481.21 次/秒。注意默认情况下每次交易中的request和response分组的大小都为1个字节,不具有实际意义。

我们可以通过测试相关的参数来改变request和response分组的大小,TCP_RR方式下的参数如下表所示:

参数            说明

-r req,resp 设置request和reponse分组的大小

-s size     设置本地系统的socket发送与接收缓冲大小

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

-D         对本地与远端系统的socket设置TCP_NODELAY选项

通过使用-r参数,我们可以进行更有实际意义的测试:

[root@rac3 ~]#  netperf -t TCP_RR -H 10.250.7.220 -- -r 64 64

MIGRATED TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.250.7.220 (10.250.7.220) port 0 AF_INET : 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       64      10.00    10631.44   

 

2.TCP_CRR

与TCP_RR不同,TCP_CRR为每次交易建立一个新的TCP连接。最典型的应用就是HTTP,每次HTTP交易是在一条单独的TCP连接中进行的。因此,由于需要不停地建立新的TCP连接,并且在交易结束后拆除TCP连接,交易率一定会受到很大的影响。

[root@rac3 ~]#  netperf -t TCP_CRR -H 10.250.7.220              

MIGRATED TCP Connect/Request/Response TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.250.7.220 (10.250.7.220) port 0 AF_INET

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       10.00    2988.56  <===明显减小!

16384  87380 

3.UDP_RR

UDP_RR方式使用UDP分组进行request/response的交易过程。由于没有TCP连接所带来的负担,所以交易率一定会有相应的提升。

[root@rac3 ~]#  netperf -t UDP_RR -H 10.250.7.220

MIGRATED UDP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.250.7.220 (10.250.7.220) port 0 AF_INET : first burst 0

Local /Remote

Socket Size   Request  Resp.   Elapsed  Trans.

Send   Recv   Size     Size    Time     Rate         

bytes  Bytes  bytes    bytes   secs.    per sec   

262144 262144 1        1       10.00    97886.03 <===明显上升!  

262144 262144

三 参考资料:

http://www.ibm.com/developerworks/cn/linux/l-netperf/

http://www.netperf.org/netperf/

http://staff.science.uva.nl/~jblom/gigaport/tools/man/netserver.html

http://staff.science.uva.nl/~jblom/gigaport/tools/man/netperf.html

本文转载自:http://blog.itpub.net/22664653/viewspace-714569/

Q
粉丝 4
博文 17
码字总数 6420
作品 0
海淀
私信 提问
网络测试利器--netperf

Netperf是一种网络性能的测量工具,主要针对基于TCP 或UDP的传输。Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request...

匿名
2010/12/05
6.8K
0
六款优秀的 Linux 基准测试工具

基准测试是指运行计算机程序去评估硬件和软件性能的行为。硬件基本测试包括评估处理器,内存,显卡,硬盘,网络等不同组件的性能。基准测试有两类: 复合和应用。复合基准对一个硬件执行压力...

红薯
2012/04/30
22.6K
3
Windows Server 2016 与 Linux 的一些网络性能测试

相信不少开发者都会对 Windows Server 和 Linux 之间的网络性能差异感兴趣。Phoronix 网站近日测试了 Windows Server 2016 和 Linux 发行版上的一些 Netperf 网络性能指标。我们看看结果如何...

局长
2018/03/19
5.1K
17
Linux 性能监测:Network

网络的监测是所有 Linux 子系统里面最复杂的,有太多的因素在里面,比如:延迟、阻塞、冲突、丢包等,更糟的是与 Linux 主机相连的路由器、交换机、无线信号都会影响到整体网络并且很难判断是...

david_bj
2014/12/29
0
0
bond双网卡绑定总结

bond双网卡绑定总结 什么是bond? 所谓bond,是一种通过把多个物理网卡绑定成一个逻辑网卡实现网卡冗余、负载均衡、提高带宽,从而实现网络性能高可用高可靠的技术。 bond有七种模型: mod0...

黎董
2017/04/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

医疗项目pc端后台页面用vue重构整个html页面

页面源码是vue

xintaiideas
38分钟前
3
0
领域驱动中的“贫血症和失忆症” --实践领域驱动--原文

贫血症严重危害着人类健康,并且伴随有危险的副作用。当贫血领域对象被首次提出来时,它并不是一个博得赞美的词汇,它描述的是一个缺少内在行为领域对象。奇怪的是,人们对于贫血领域对象的态...

还仙
41分钟前
5
0
条码打印软件中标签预览正常打印无反应怎么解决

在使用条码打印软件制作标签时,有客户反馈,标签打印预览正常的,但是打印无反应,咨询是怎么回事?今天针对这个情况,可以参考以下方法进行解决。 一、预览正常情况下,打印没反应 (1)在条码...

中琅软件
51分钟前
5
0
判断字符串的时候

判断字符串的时候一定把常量房前边, //报警程度 String leve = vo.getDeviceAlertDeal().getWarnLevel(); if(("0").equals(leve)) { row.add("无报警"); }else if(("1").equals(leve)) { ro......

简小姐
51分钟前
7
0
Linux maven3.6.2 install

PS:安装 maven 之前请先安装 jdk 1.安装 wget 命令(安装过就不用了) yum -y install wget 2.寻找需要的 maven 版本 https://maven.apache.org/download.cgi 3.进入 /var/local 文件夹 cd...

东方神祇
53分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部