http://pangyi.github.io/blog/20141210/wang-luo-ce-shi-gong-ju-netperf/

网络测试工具netperf

2014年12月10日

一般我们进行网络测试,主要是测试网络的连通性、网络带宽、网络响应时间等。常用的工具包括ping、traceroute、telnet、ftp等。如测试网络连通性,可以使用ping,traceroute,如果测试防火墙是否配置正确,可以使用telnet和traceroute -p,使用ping命令可以测试网络延迟,ftp则用来测试网络带宽。

但如果需要做一些更为深入的测试,如测试不同包大小的不同类型的业务的网络处理能力,则需要更专业的工具,如netperf,iperf等。

netperf测试工具介绍

netperf是一个开源的网络性能测试工具。可以在AIX和LINUX平台上安装,支持跨平台使用。

netperf可以进行的测试TCP网络性能、UDP网络性能,并且可以模拟Client/Server长连接或短连接场景,因此能更接近实际网络的使用环境进行测试和评估。

安装

官方网站可以下载源代码进行编译安装。安装过程基本上是老三步,即

  1. ./configcure
  2. make
  3. make install

默认安装路径是/usr/local下的各目录。在AIX等系统中,可能需要自己设置PATH环境变量,或使用–prefix参数更改安装路径。

对于SUSE,在安装中发现,在内核版本为2.6.16(SUSE 10)时,会出现编译错误:

  1. nettest_omni.o: In function `recv_data_no_copy':
  2. nettest_omni.c:(.text+0x6e44): undefined reference to `splice'
  3. nettest_omni.c:(.text+0x6e7b): undefined reference to `splice'
  4. collect2: ld returned 1 exit status
  5. make[3]: *** [netperf] Error 1
  6. make[3]: Leaving directory `/root/py/netperf-2.6.0/src'
  7. make[2]: *** [all-recursive] Error 1
  8. make[2]: Leaving directory `/root/py/netperf-2.6.0/src'
  9. make[1]: *** [all-recursive] Error 1
  10. make[1]: Leaving directory `/root/py/netperf-2.6.0'

经查,splice系统调用是在2.6.17内核版本以后出现的,因此换用SUSE 11编译通过。

如果是UBUNTU之类的版本,因为软件库中已经有了netperf,可以用包管理器安装。比如UBUNTU中使用:

  1. sudo apt-get install netperf

使用

启动服务

netperf包括两个程序。一个是客户端netperf,用于模拟各类网络行为。另一个为服务器程序netserver。用于接收客户端的请求。启动服务的操作类似于:

  1. # netserver
  2. Starting netserver with host 'IN(6)ADDR_ANY' port '12865' and family AF_UNSPEC

默认情况下TCP服务的监听启动在12865端口上。可以通过-p参数修改。

未发现使用了哪个UDP端口,估计是在测试时根据netperf启用的测试项目再启用端口的。

netperf参数说明

netperf的参数格式如下:

  1. netperf [global options] -- [test options]

其中,global options为通用参数,所有测试项目都涉及或是公共的参数,常用的有:

-H 主机名或IP 指定运行netserver的服务器的IP

-l 测试时长 指定测试的时间长度,单位为秒

-t 测试项目 指定测试的内容。测试项目如下:

TCP批量数据传输测试 TCP_STREAM

  1. TCP_SENDFILE
  2. TCP_MAERTS

TCP请求应答(长连接)模式测试 TCP_RR

  1. TCP_CRR

UCP批量数据传输测试 UDP_STREAM

  1. UDP_RR
  2. DLCO_STREAM
  3. DLCO_RR
  4. DLCL_STREAM
  5. DLCL_RR
  6. STREAM_STREAM
  7. STREAM_RR
  8. DG_STREAM
  9. DG_RR
  10. SCTP_STREAM
  11. SCTP_STREAM_MANY
  12. SCTP_RR
  13. SCTP_RR_MANY
  14. LOC_CPU
  15. REM_CPU

test specific options是测试项用的参数,它与全局参数之间要用“–”分开类似

  1. netperf -H 127.0.0.1 -l 30 -- -m 2048

测试项参数与测试项目相关。

常用测试项目

网络带宽测试

带宽测试一般使用-t TCP_STREAM测试项,这也是netperf的默认测试项目。此项测试与ftp类似可以测试系统的带宽,但可以通过参数进行更多的设置。比如:

  1. $ netperf -H 127.0.0.1 -l 60
  2. MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 127.0.0.1 () port 0 AF_INET : demo
  3. Recv Send Send
  4. Socket Socket Message Elapsed
  5. Size Size Size Time Throughput
  6. bytes bytes bytes secs. 10^6bits/sec
  7. 87380 16384 16384 60.00 2760.70

第一列为服务端接收包的Socket缓冲区大小,这里没87380

第二列为客户端发送数据的Socket缓冲区大小,这里为16384

第三列为发送的消息的大小,这里为16384

第四列为测试时长

第五列为测试的速率,单位为M,这里结果为2.7G。因为使用的是localhost,实际是在本机的内存中收发的数据。

TCP_STREAM的常用测试参数有:

-s 缓冲区大小 指定客户端发送数据的缓冲区大小 -S 缓冲区大小 指定服务端接收数据的缓冲区大小

-m 发送消息大小 单位为bytes

-M 接收消息大小 单位为bytes

可以调整这些参数,了解哪些因素对传输速率有影响。比如将发送缓冲变大,测试结果变化不大:

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  1. $ netperf -H 127.0.0.1 -l 60 -- -s 65535
  2. MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 127.0.0.1 () port 0 AF_INET : demo
  3. Recv Send Send
  4. Socket Socket Message Elapsed
  5. Size Size Size Time Throughput
  6. bytes bytes bytes secs. 10^6bits/sec
  7. 87380 131070 131070 60.00 2672.42

而改变接收缓冲和发包大小,则可以提升性能:

  1. $ netperf -H 127.0.0.1 -l 60 -- -S 65535
  2. MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 127.0.0.1 () port 0 AF_INET : demo
  3. Recv Send Send
  4. Socket Socket Message Elapsed
  5. Size Size Size Time Throughput
  6. bytes bytes bytes secs. 10^6bits/sec
  7. 131070 16384 16384 60.00 3058.22
  8. $ netperf -H 127.0.0.1 -l 60 -- -m 65535
  9. MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 127.0.0.1 () port 0 AF_INET : demo
  10. Recv Send Send
  11. Socket Socket Message Elapsed
  12. Size Size Size Time Throughput
  13. bytes bytes bytes secs. 10^6bits/sec
  14. 87380 16384 65535 60.00 3266.55

UDP协议的传输性能

与网络带宽测试类似,只是更换了协议,所以这个项目是UDP_STREAM:

  1. $ netperf -H 127.0.0.1 -l 60 -t UDP_STREAM
  2. MIGRATED UDP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 127.0.0.1 () port 0 AF_INET : demo
  3. Socket Message Elapsed Messages
  4. Size Size Time Okay Errors Throughput
  5. bytes bytes secs # # 10^6bits/sec
  6. 212992 65507 60.00 440506 0 3847.46
  7. 212992 60.00 433151 3783.22

与TCP_STREAM不太一样,测试结果中有两行数据。第一行是客户端的,第二行是服务端。

第一列为缓冲区大小,在netperf测试中,两端的缓冲区大小会设置成一样大。

第二列为消息大小

第三列为测试传输时间

第四列为传输数据包量,UDP由于协议不保证传输可靠性,收发消息数量不一样多,而且实际生产环境收包量可能比发包少得更多。从数据看,这个包数量应是每秒数量(消息大小和速度的单位不一样)

最后是测试的速率,可以看到要比TCP协议快一些。这是协议决定的。

TCP长连接请求应答模式测试

除了网络数据传输,大量的网络流量是请求/应答式的,即一方发送一个报文,另一方回复一个。而且通常这类请求和回复的报文大小不一样大,甚至差别很大。netperf可以简单模拟这类应用场景,进行网络性能测试。测试使用类型为TCP_RR。

最简单的TCP_RR测试如下:

  1. $ netperf -H 127.0.0.1 -l 60 -t TCP_RR
  2. MIGRATED TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 127.0.0.1 () port 0 AF_INET : demo : first burst 0
  3. Local /Remote
  4. Socket Size Request Resp. Elapsed Trans.
  5. Send Recv Size Size Time Rate
  6. bytes Bytes bytes bytes secs. per sec
  7. 16384 87380 1 1 60.00 13517.65
  8. 16384 87380

测试结果分为两行,第一行是本地,第二行是远端(服务端)

第一列和第二列应该还是缓冲区,只是和STREAM测试的顺序相反。

第三、四列为请求和返回包的大小。默认为1位。

第五列为测试时间

第六列为交易速率,这次是笔数/每秒,不再是带宽。

默认的包大小实际业务中不可能发生,可以通过参数进行调整,来模拟真实的情况。使用测试参数-r 请求包大小,应答包大小(-r request,response)来测试。注意此参数单位为BYTES,实际的业务一般是以字节为单位的报文:

  1. $ netperf -H 127.0.0.1 -l 60 -t TCP_RR -- -r 64,2048
  2. MIGRATED TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 127.0.0.1 () port 0 AF_INET : demo : first burst 0
  3. Local /Remote
  4. Socket Size Request Resp. Elapsed Trans.
  5. Send Recv Size Size Time Rate
  6. bytes Bytes bytes bytes secs. per sec
  7. 16384 87380 64 2048 60.00 13129.09
  8. 16384 87380

此测试使用8字节的请求,256字节的返应答包进行测试,测试结果相对默认值轻微下降。

TCP短连接请求应答模式测试

TCP请求的另一大类是类似HTTP业务的短连接请求应答报文。对应的测试项是TCP_CRR:

  1. $ netperf -H 127.0.0.1 -l 60 -t TCP_CRR
  2. MIGRATED TCP Connect/Request/Response TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 127.0.0.1 () port 0 AF_INET : demo
  3. Local /Remote
  4. Socket Size Request Resp. Elapsed Trans.
  5. Send Recv Size Size Time Rate
  6. bytes Bytes bytes bytes secs. per sec
  7. 16384 87380 1 1 60.00 2210.55
  8. 16384 87380

测试参数和显示与TCP_RR类似。由于业务类型的影响,速率降得比厉害。

UDP连接请求应答模式测试

由于UDP协议的原因,UDP请求应答不分长短连接。只有UDP_RR一个测试项目,测试参数也类似TCP类的测试:

  1. $ netperf -H 127.0.0.1 -l 60 -t UDP_RR
  2. MIGRATED UDP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 127.0.0.1 () port 0 AF_INET : demo : first burst 0
  3. Local /Remote
  4. Socket Size Request Resp. Elapsed Trans.
  5. Send Recv Size Size Time Rate
  6. bytes Bytes bytes bytes secs. per sec
  7. 212992 212992 1 1 60.00 15837.63
  8. 212992 212992

理论上,UDP的测试结果要好于TCP,但在实际网络中,可能受网络设备配置等影响,存在一定未知数。

如何进行模拟测试

首先需要搞好测试用例。要明确业务的类型,协议,好确定选择哪个测试项目,要了解业务的特性,如一般包的大小等信息,以便选择合适的参数。这些参数可以根据业务设计来确定,也可能需要通过业务监控数据来获取。例如通过监控数据中的最大流量和最大IO量,可以大致评估一下数据包的大小,当然这种评估很不精确。

由于决定网络性能的因素有一部分和配置相关,因此在测试中可以变更缓冲区大小等参数,以便了解是否需要对网络参数进行调整。

网络测试工具netperf(转)的更多相关文章

  1. 网络测试工具netperf

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

  2. TCP/UDP网络性能测试工具 - Netperf (zz) ..网络测试工具

    在构建或管理一个网络系统时,我们更多的是关心网络的可用性,即网络是否连通,而对于其整体的性能往往考虑不多. 除了netperf以外.       还有很多其它的网络性能测试工具.       如db, ...

  3. 网络测试工具--Iperf、Netperf 、MZ

    网络性能测量的五项指标 可用性(availability) 响应时间(response time) 网络利用率(network utilization) 网络吞吐量(network throughpu ...

  4. IPerf——网络测试工具介绍与源码解析(4)

    上篇随笔讲到了TCP模式下的客户端,接下来会讲一下TCP模式普通场景下的服务端,说普通场景则是暂时不考虑双向测试的可能,毕竟了解一项东西还是先从简单的情况下入手会快些. 对于服务端,并不是我们认为的直 ...

  5. netperf 网络测试工具

    软件介绍: netperf是惠普公司开源的一款针对网络性能的测试工具,主要基于TCP或UDP的传输.根据应用的不同,可以进行批量数据传输(bulk data transfer)模式和请求/应答(req ...

  6. linux下性能测试工具netperf使用

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

  7. QNET,一款给力的APP弱网络测试工具

    目前在测试移动设备上进行弱网络专项测试的方案主要有两种: 通过Android设备连接到PC上进行弱网络测试,比如Fiddler,Charles,NET-Simulator等.基本思路是在PC上装一个F ...

  8. 复刻smartbits的国产网络测试工具minismb-使用burst模式

    复刻smartbits的国产网络性能测试工具minismb,是一款专门用于测试智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此工具测试任何ip网络设备的端口吞吐率,带宽,并发连接数 ...

  9. 复刻smartbits的国产网络测试工具minismb-如何添加数据流

    复刻smartbits的国产网络性能测试工具minismb,是一款专门用于测试智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此工具测试任何ip网络设备的端口吞吐率,带宽,并发连接数 ...

随机推荐

  1. Scala Types 2

    存在类型 形式: forSome { type ... } 或 forSome { val ... } 主要为了兼容 Java 的通配符 示例 Array[_] // 等价于 Array[T] for ...

  2. Prometheus Alertmanager 介绍详解

    Prometheus 之 Alertmanager 介绍详解 告警无疑是监控中非常重要的环节,虽然监控数据可视化了,也非常容易观察到运行状态.但我们很难做到时刻盯着监控,所以程序来帮巡检并自动告警,这 ...

  3. Window与Document

    Window 表示一个包含DOM文档的窗口,其 document 属性指向窗口中载入的 DOM文档.使用 document.defaultView 属性可以获取指定文档所在窗口.window作为全局变 ...

  4. Kafka学习笔记3--Kafka的生产者和消费者配置

    下载解压 kafka 后,在 kafka/config 下有 3 个配置文件与主题及其生产.消费相关. server.properties--服务端配置 producer.properties--生产 ...

  5. SpringBoot 打包成war

    1.修改pom.xml文件 <packaging>war</packaging> <properties> <project.build.sourceEnco ...

  6. Python学习笔记之replace()

    10-2 可使用方法replace()将字符串中的特定单词都替换为另一个单词. 读取你刚创建的文件learning_python.txt 中的每一行,将其中的Python 都替换为另一门语言的名称,如 ...

  7. VirtualBox安装Ubuntu-18.04-Server笔记

    准备 安装'Windows Terminal' 安装WSL 安装VirtualBox 安装 虚拟磁盘映像文件选择创建在SSD(如果有) 选择openssh,公钥从GitHub获取,前提是GitHub已 ...

  8. vue pc客户端项目总结

    https://blog.csdn.net/oumaharuki/article/details/78861778

  9. SAP里SE38设置模板

    经验丰富些的大佬们都会有一套自己的风格,比如report主程序里几个form,常见的fieldcat的宏定义,常见的一些数据定义等等. 1.使用事物代码SE38进入编辑器. 2.点击客户端最右下角的文 ...

  10. 分布式CAP定理

    根据百度百科的定义,CAP定理又称CAP原则,指的是在一个分布式系统中,Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),最 ...