【工具】Netperf 的使用

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
简介:
   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之间会再建立一个测试连接,进行来回传递特殊的流量模式,以测试网络的性能.具体过程如下图所示:
22664653_201201072016471.jpg
                                 图.1 建立连接
22664653_201201072016541.jpg
                                图2 测试并产生结果
22664653_201201072017001.jpg
                                 图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接收到请求,经处理后返回大的结果数据。如下图所示
22664653_201201072020261.jpg
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
相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
3月前
|
JSON 数据格式
介绍几种使用工具
介绍几种使用工具
|
7月前
|
文字识别 数据安全/隐私保护
这5款好用的工具你用过吗?
人类与99%的动物之间最大差别在于是否会运用工具,借助好的工具,能提升几倍的工作效率。
78 0
|
程序员
FastStone|抓屏工具
FastStone|抓屏工具
265 0
|
JSON PHP 数据格式
常用Popclip工具
PopClip是mac上的一个工具集,最大的特点就是扩展,复制一段文本,然后根据你的需求写插件,把赋值的文本作为输出,做一些你想干的事 基于PopClip,也写了一些小工具,主要是php写的,写插件的教程还是比较简单的,一个配置文件Config.plist和一个脚本文件xxx.php即可
671 0
常用Popclip工具
|
Web App开发 数据可视化 定位技术
可以替代basemap的几个工具
近期需要画个某数据的地区分布,basemap安装成功后运行总是出错。Basemap 是Python环境下极好的数据可视化工具,但是随着新项目的推出以及维护期逐渐接近尾声,basemap也将逐渐退出江湖。
5576 0