转载自:http://blog.sina.com.cn/s/blog_6b1ccd6501013119.html

首先下载 http://www.netperf.org/netperf/DownloadNetperf.html

安装:

tar zxf … && cd xxx

./configure –prefix=/tools/netperf-2.4.1

&& make

&& make install

手册

http://www.netperf.org/svn/netperf2/tags/netperf-2.4.3/doc/netperf.html

服务器端启动方法 /tools/netperf-2.4.1/bin/netserver

通过客户端测试

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

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

1. TCP_STREAM/tools/netperf-2.4.1/bin/netperf -H 192.168.0.108 -l 60

[-t TCP_STREAM]TCP STREAM TEST from 0.0.0.0 (0.0.0.0)

port 0 AF_INET to 192.168.0.108 (192.168.0.108) 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.01 88.91

从netperf的结果输出中,我们可以知道以下的一些信息:

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

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

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

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

5)

吞吐量的测试结果为88.91Mbits/秒在缺省情况下,netperf向发送的测试分组大小设置为本地系统所使用的socket发送缓冲大小。

TCP_STREAM方式下与测试相关的局部参数如下表所示:

参数 说明

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

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

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

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

-D

对本地与远端系统的socket设置TCP_NODELAY选项通过修改以上的参数,并观察结果的变化,我们可以确定是什么因素影响了连接的吞吐量。例如,如果怀疑路由器由于缺乏足够的缓冲区空间,使得转发大的分组时存在问题,就可以增加测试分组(-m)的大小,以观察吞吐量的变化:

./netperf -H 192.168.0.108 -l 60 — -m

2048TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0

AF_INET to 192.168.0.108 (192.168.0.108) 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 2048 60.01 90.20

在这里,测试分组的大小减少到2048字节,而吞吐量却没有很大的变化(与前面例子中测试分组大小为16K字节相比)。相反,如果吞吐量有了较大的提升,则说明在网络中间的路由器确实存在缓冲区的问题。

2. UDP_STREAM/tools/netperf-2.4.1/bin/netperf -H 192.168.0.108 -l 60

-t UDP_STREAMUDP UNIDIRECTIONAL SEND TEST from 0.0.0.0

(0.0.0.0) port 0 AF_INET to 192.168.0.108 (192.168.0.108) port 0

AF_INET

Socket Message Elapsed Messages

Size Size Time Okay Errors Throughput

bytes bytes secs # # 10^6bits/sec

108544 65507 60.00 10998 0 96.06

262144 60.00 3809 33.27

UDP_STREAM方式的结果中有两行测试数据,第一行显示的是本地系统的发送统计,这里的吞吐量表示netperf向本地socket发送分组的能力。第二行显示的就是远端系统接收的情况

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

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

1. TCP_RRTCP_RR方式的测试对象是多次TCP

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

/tools/netperf-2.4.1/bin/netperf -H

192.168.0.108 -t TCP_RRTCP REQUEST/RESPONSE TEST from

0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.108 (192.168.0.108)

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 3328.91

16384 87380

Netperf输出的结果也是由两行组成。第一行显示本地系统的情况,第二行显示的是远端系统的信息。平均的交易率(transaction

rate)为3328.91次/秒。注意到这里每次交易中的request和response分组的大小都为1个字节,不具有很大的实际意义。用户可以通过测试相关的参数来改变request和response分组的大小,TCP_RR方式下的参数如下表所示:

参数 说明

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

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

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

-D

对本地与远端系统的socket设置TCP_NODELAY选项通过使用-r参数,我们可以进行更有实际意义的测试:

/tools/netperf-2.4.1/bin/netperf -H

192.168.0.108 -t TCP_RR — -r 32,1024TCP

REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to

192.168.0.108 (192.168.0.108) 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 32 1024 10.00 1108.21

16384 87380

2.

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

/tools/netperf-2.4.1/bin/netperf -H

192.168.0.108 -t TCP_CRR — -r 32,1024TCP

Connect/Request/Response TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET

to 192.168.0.108 (192.168.0.108) 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 32 1024 10.00 793.08

16384 87380

交易率也明显的降低了,只有793.08次/秒。

3.

UDP_RRUDP_RR方式使用UDP分组进行request/response的交易过程。没有TCP连接所带来的负担

/tools/netperf-2.4.1/bin/netperf -H

192.168.0.108 -t UDP_RR — -r 32,1024UDP

REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to

192.168.0.108 (192.168.0.108) 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

108544 108544 32 1024 10.00 1139.40

262144 262144

#可能会受到网络中路由器或其它的网络设备对UDP采用了与TCP不同的缓冲区空间和处理技术影响,正常情况下会高于TCP_RR的值本文首先介绍网络性能测量的一些基本概念和方法,然后结合 netperf

工具的使用,具体的讨论如何测试不同情况下的网络性能。

在构建或管理一个网络系统时,我们更多的是关心网络的可用性,即网络是否连通,而对于其整体的性能往往考虑不多,或者即使考虑到性能的问题,但是却发现没有合适的手段去测试网络的性能。

当开发出一个网络应用程序后,我们会发现,在实际的网络环境使用中,网络应用程序的使用效果不是很理想,问题可能出现在程序的开发上面,也有可能由于实际的网络环境中存在着瓶颈。面对这种问题,程序员一般会一筹莫展,原因就在于不掌握一些网络性能测量的工具。

在本文中,首先介绍网络性能测量的一些基本概念和方法,然后结合 netperf

工具的使用,具体的讨论如何测试不同情况下的网络性能。

网络性能测试概述

网络性能测量的五项指标

测量网络性能的五项指标是:可用性(availability)

响应时间(response time)

网络利用率(network utilization)

网络吞吐量(network throughput)

网络带宽容量(network bandwidth capacity)

1. 可用性

测试网络性能的第一步是确定网络是否正常工作,最简单的方法是使用 ping 命令。通过向远端的机器发送 icmp echo

request,并等待接收 icmp echo reply 来判断远端的机器是否连通,网络是否正常工作。

Ping 命令有非常丰富的命令选项,比如 -c 可以指定发送 echo request 的个数,-s 可以指定每次发送的

ping 包大小。

网络设备内部一般有多个缓冲池,不同的缓冲池使用不同的缓冲区大小,分别用来处理不同大小的分组(packet)。例如交换机中通常具有三种类型的包缓

冲:一类针对小的分组,一类针对中等大小的分组,还有一类针对大的分组。为了测试这样的网络设备,测试工具必须要具有发送不同大小分组的能力。Ping

命令的 -s 就可以使用在这种场合。

2. 响应时间

Ping 命令的 echo request/reply

一次往返所花费时间就是响应时间。有很多因素会影响到响应时间,如网段的负荷,网络主机的负荷,广播风暴,工作不正常的网络设备等等。

在网络工作正常时,记录下正常的响应时间。当用户抱怨网络的反应时间慢时,就可以将现在的响应时间与正常的响应时间对比,如果两者差值的波动很大,就能说明网络设备存在故障。

3. 网络利用率

网络利用率是指网络被使用的时间占总时间(即被使用的时间+空闲的时间)的比例。比如,Ethernet

虽然是共享的,但同时却只能有一个报文在传输。因此在任一时刻,Ethernet 或者是 100% 的利用率,或者是 0%

的利用率。

计算一个网段的网络利用率相对比较容易,但是确定一个网络的利用率就比较复杂。因此,网络测试工具一般使用网络吞吐量和网络带宽容量来确定网络中两个节点之间的性能。

4. 网络吞吐量

网络吞吐量是指在某个时刻,在网络中的两个节点之间,提供给网络应用的剩余带宽。

网络吞吐量可以帮组寻找网络路径中的瓶颈。比如,即使 client 和 server 都被分别连接到各自的 100M

Ethernet 上,但是如果这两个 100M 的Ethernet 被 10M 的 Ethernet 连接起来,那么 10M 的

Ethernet 就是网络的瓶颈。

网络吞吐量非常依赖于当前的网络负载情况。因此,为了得到正确的网络吞吐量,最好在不同时间(一天中的不同时刻,或者一周中不同的天)分别进行测试,只有这样才能得到对网络吞吐量的全面认识。

有些网络应用程序在开发过程的测试中能够正常运行,但是到实际的网络环境中却无法正常工作(由于没有足够的网络吞吐量)。这是因为测试只是在空闲的网络环境中,没有考虑到实际的网络环境中还存在着其它的各种网络流量。所以,网络吞吐量定义为剩余带宽是有实际意义的。

5. 网络带宽容量

与网络吞吐量不同,网络带宽容量指的是在网络的两个节点之间的最大可用带宽。这是由组成网络的设备的能力所决定的。

测试网络带宽容量有两个困难之处:在网络存在其它网络流量的时候,如何得知网络的最大可用带宽;在测试过程中,如何对现有的网络流量不造成影响。网络测试工具一般采用

packet pairs 和 packet trains 技术来克服这样的困难。

收集网络性能数据的方式

当确定了网络性能的测试指标以后,就需要使用网络测试工具收集相应的性能数据,分别有三种从网络获取数据的方式:

1. 通过snmp协议直接到网络设备中获取,如net-snmp工具

2. 侦听相关的网络性能数据,典型的工具是tcpdump

3. 自行产生相应的测试数据,如本文中使用的netperf工具

linux的netperf测试,linux下Netperf使用详解相关推荐

  1. linux vsftpd用法,Linux_LINUX系统下vsftpd 命令详解,FTP命令是Internet用户使用最频 - phpStudy...

    LINUX系统下vsftpd 命令详解 FTP命令是Internet用户使用最频繁的命令之一,不论是在DOS还是UNIX操 作系统下使用FTP,都会遇到大量的FTP内部命令. 熟悉并灵活应用FTP的内 ...

  2. linux mysql source命令_Linux下source命令详解

    source命令用法 source FileName source命令作用 在当前bash环境下读取并执行FileName中的命令. *注:该命令通常用命令"."来替代. 使用范例 ...

  3. linux(ubuntu)系统下Top命令详解

    参考链接: 1. https://www.cnblogs.com/niuben/p/12017242.html 2. https://blog.csdn.net/qq_39416311/article ...

  4. linux下DNS配置详解

    linux下DNS配置详解 DNS 是域名系统 (Domain Name Server) 的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务.在Internet上域名与IP地址之间是一一对应的 ...

  5. linux cat命令缩写,linux下cat命令详解

    cat 能够一同显现多个文件的内容,比方咱们能够在一个cat指令上一同显现两个文件的内容;那么你知道linux下cat命令详解么?接下来是小编为大家收集的linux下cat命令详解,欢迎大家阅读: l ...

  6. linux下dd命令详解

    linux下dd命令详解    名称: dd 使用权限: 所有使用者dd 这个指令在 manual 里的定义是 convert and copy a file 使用方式: dd [option] 如果 ...

  7. linux下scp命令详解

    http://www.cnblogs.com/xuxm2007/archive/2010/08/04/1792179.html linux下scp命令详解 http://www.9usb.net/20 ...

  8. linux下tree命令详解

    From:http://blog.163.com/ly_89/blog/static/186902299201161302812880/ linux下tree命令详解---linux以树状图逐级列出目 ...

  9. Linux下top命令详解

    Linux下top命令详解 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.top是一个动态显示过程,即可以通过用户按键来不断刷 ...

  10. linux系统rar命令行,Linux下rar命令详解

    Linux下rar命令详解 发布时间:2010-05-24 23:28:23   作者:佚名   我要评论 通常rar命令由一个主命令加若干选项(可选)构成,操作文档为操作施加的.rar文件对象,文件 ...

最新文章

  1. .NET开发的一些积累
  2. [javaweb] servlet处理请求参数中文乱码的问题
  3. Nginx反代Mogilefs分布式储存示例
  4. Java 序列化 之 Serializable
  5. java创建对象 的初始化顺序
  6. 【BIM入门实战】Revit 图元分类有哪三种?Revit图元分类图文详解
  7. centos7 docker删除端口映射_centos7安装docker,结合docker安装mysql,学习简单使用
  8. img atl和a title
  9. gradle项目启动报错_如何用IDEA创建SpringBoot Gradle多项目工程?
  10. java json 替换属性值_替换JSONObject某个对象的值
  11. ZigBee 集中式网络与分布式网络
  12. 2020计算机保研心得(上岸中科大)
  13. react-app-rewired 修改 react 项目默认端口号
  14. 大白话5分钟带你走进人工智能-第十六节逻辑回归之分类的原因(1)
  15. 参加计算机培训典型材料,计算机应用专业典型学员事迹材料
  16. 十年饮冰,难凉热血--毕业四年多的经历,致敬每一位IT男
  17. DELPHI Webbrowser 响应回车键(EWB响应正常,无需额外代码)
  18. 【集创赛】arm杯一等奖作品:智能BLDC驱动系统
  19. 基于机智云的嵌入式系统应用开发—空调远程智能控制系统
  20. 光时域反射计行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)

热门文章

  1. 汇编语言——移位指令
  2. python属于低级语言还是高级语言,【单选题】Python语言属于 A. 机器语言 B. 汇编语言 C. 高级语言 D. 科学计算语言...
  3. 通达OA2017版连接sqlserver2008数据库
  4. STM32F030C8T6 STM32F307VCT6 STM32F107VCT6结构图( block diagram)位置是在数据手册中
  5. VMware12虚拟机中安装win7(安装好的解压版Win7_64-cl1.vmdk)
  6. java 验证码 库_iCaptcha-Java验证码库
  7. spark机器学习电影推荐
  8. mantelhean.test r语言_Meta分析常用教程:R语言
  9. 分布式开源调度框架TBSchedule原理与应用
  10. 一个简单的数字记忆训练软件介绍