[Linux-网络性能测试] -- netperf测试

2017.01.17 14:15:54字数 1599阅读 4400

简述

Netperf是一种网络性能的测量工具(由惠普公司开发的,测试网络栈。即测试不同类型的网络性能的benchmark工具)主要针对基于TCP或UDP的传输。Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式。Netperf测试结果所反映的是一个系统能够以多快的速度向另外一个系统发送数据,以及另外一个系统能够以多块的速度接收数据。
更多信息关注netperf首页: http://www.netperf.org/netperf/

工作原理

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

 
建立连接.jpg
 
测试并产生结果.jpg
 
回传结果.jpg

网络性能测量的五项指标

  • 可用性(availability): 测试网络性能的第一步是确定网络是否正常工作,最简单的方法是使用 ping 命令。通过向远端的机器发送 icmp echo request,并等待接收 icmp echo reply 来判断远端的机器是否连通,网络是否正常工作。
    Ping 命令有非常丰富的命令选项,比如 -c 可以指定发送 echo request 的个数,-s 可以指定每次发送的 ping 包大小 。
  • 响应时间(response time): Ping 命令的 echo request/reply 一次往返所花费时间就是响应时间。有很多因素会影响到响应时间,如网段的负荷,网络主机的负荷,广播风暴,工作不正常的网络设备等等。
  • 网络利用率(network utilization): 是指网络被使用的时间占总时间(即被使用的时间+空闲的时间)的比例。
  • 网络吞吐量(network throughput): 是指在某个时刻,在网络中的两个节点之间,提供给网络应用的剩余带宽。网络吞吐量非常依赖于当前的网络负载情况。因此,为了得到正确的网络吞吐量,最好在不同时间(一天中的不同时刻,或者一周中不同的天)分别进行测试,只有这样才能得到对网络吞吐量的全面认识。
  • 网络带宽容量(network bandwidth capacity): 与网络吞吐量不同,网络带宽容量指的是在网络的两个节点之间的最大可用带宽。这是由组成网络的设备的能力所决定的。

netperf的编译与安装

  1. 下载最新的netperf版本 : ftp://ftp.netperf.org/netperf/ (目前最新的版本是2.7.0)
  2. 编译与安装

unzip netperf-2.7.0.zip
cd netperf-2.7.0
./configure
make
make install
默认安装路径是/usr/local下的各目录。

netperf的参数说明

netperf语法格式为: netperf [global options] -- [test options]

  • [global options] 可选参数,其中可选的参数有如下几个:

|参数 |说明 |
|: ------------- |: -------------|
|-H host | 指定远端运行netserver的server IP地址 |
|-l testlen | 指定测试的时间长度(秒)|
|-t testname | 指定进行的测试类型 (TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,UDP_RR) |

  • [test-specific options] 可选参数,其中可选的参数有如下几个:
    |参数|说明|
    |: ---|: ---|
    |-s size|设置本地系统的socket发送与接收缓冲大小|
    |-S size|设置远端系统的socket发送与接收缓冲大小|
    |-m size|设置本地系统发送测试分组的大小|
    |-M size|设置远端系统接收测试分组的大小|
    |-D|对本地与远端系统的socket设置TCP_NODELAY选项|
    |-r req,resp|设置request和reponse分组的大小|

使用netperf进行网络测试

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

说明:根据使用传输协议的不同,批量数据传输又分为TCP批量传输和UDP批量传输。
测试类型有TCP_STREAM 和UDP_STREAM 。
(1) TCP_STREAM :netperf缺省参数情况下进行TCP批量传输,即-t TCP_STREAM。测试过程中,netperf向netserver发送批量的TCP数据分组,以确定数据传输过程中的吞吐量:

例 1 : netperf -H 10.238.158.84 -l 60 (测试60秒内TCP批量数据传输表现)
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.238.158.84 () 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.08 93.93
从netperf的结果输出中,我们可以知道以下的一些信息:
远端系统(即server)使用大小为87380字节的socket接收缓冲;
本地系统(即client)使用大小为16384字节的socket发送缓冲;
向远端系统发送的测试分组大小为16384字节;
测试经历的时间为60秒。
吞吐量的测试结果为93.93Mbits/秒。
例 2 :netperf -H 10.238.158.84 -l 60 -- -m 2048 (减小测试分组为2048,观察吞吐量的变化)
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.238.158.84 () 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.13 93.46
说明:从上面两个示例中可以看出,当减小测试分组的大小为2048后吞吐量几乎没有变化。 由此可以说明网络中间的路由器不存在缓冲区的问题。

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

例1 : netperf -H 10.238.154.166 -t UDP_STREAM -l 60
MIGRATED UDP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.238.154.166 () port 0 AF_INET
Socket Message Elapsed Messages
Size Size Time Okay Errors Throughput
bytes bytes secs # # 10^6bits/sec
212992 65507 60.00 10663576 0 93138.47
212992 60.00 10650638 93025.47
测试结果说明:接收的10650638少于发送的10663576,吞吐量也有差别!
例2 : netperf -H 10.238.154.166 -t UDP_STREAM -l 60 -- -m 220000
MIGRATED UDP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.238.154.166 () port 0 AF_INET
send_data: data send error: Message too long (errno 90)
netperf: send_omni: send_data failed: Message too long
从例1可以看出socket的发送与接收缓冲大小为212992,而分组的大小220000大于212992,因此报错。
测试请求/应答(request/response)网络流量的性能

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

例1 :netperf -H 10.238.158.84 -t TCP_RR -l 60
MIGRATED TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.238.158.84 () 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 60.00 1468.28
16384 87380
从netperf的结果输出中,可以看出:平均的交易率(transaction rate)为1468.28 次/秒。注意默认情况下每次交易中的request和response分组的大小都为1个字节,不具有实际意义。

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

例2:netperf -H 10.238.158.84 -t TCP_RR -l 60 -- -r 64 64
MIGRATED TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.238.158.84 () 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 60.00 1417.17
16384 87380

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

例 1 :netperf -H 10.238.158.84 -t TCP_CRR -l 60
MIGRATED TCP Connect/Request/Response TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.238.158.84 () 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 60.00 1.23 <=== 每次重新建立TCP连接,效率明显下降。
16384 87380

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

例1 :netperf -H 10.238.158.84 -t UDP_RR -l 60
MIGRATED UDP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.238.158.84 () 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
212992 212992 1 1 60.00 1452.85 <=== 效率明显上升。
212992 212992

参考资料:

http://www.netperf.org/netperf/
http://blog.itpub.net/22664653/viewspace-714569/
https://staff.fnwi.uva.nl/j.blom/gigaport/tools/man/netperf.html

[Linux-网络性能测试] -- netperf测试的更多相关文章

  1. [原创]Linux下网络性能测试Netperf工具介绍及安装

    [原创]Linux下网络性能测试Netperf工具介绍及安装 1 官方网站 http://www.netperf.org/netperf/ 2 Netperf介绍 Netperf是一种网络性能的测试工 ...

  2. Linux 网络性能测试工具 iperf 的安装和使用

    简介:Iperf是一个网络性能测试工具.可以测试TCP和UDP带宽质量,可以测量最大TCP带宽,具有多种参数和UDP特性,可以报告带宽,延迟抖动和数据包丢失.Iperf在Linux和windows平台 ...

  3. linux网络性能测试工具ipref安装与使用

    一.iperf工具安装 源码包下载地址:https://iperf.fr/iperf-download.php#archlinux 选择对应系统的版本就是解压安装了 完成 测试发现有问题 问题原因:L ...

  4. 微软Azure云主机及blob存储的网络性能测试

    http://www.cnblogs.com/sennly/p/4137024.html 微软Azure云主机及blob存储的网络性能测试 1. 测试目的 本次测试的目的在于对微软Azure的云主机. ...

  5. 发行版Linux和麒麟操作系统下netperf 网络性能测试

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

  6. Linux netperf网络性能测试

    Linux netperf网络性能测试 (2013-10-14 16:07:48) 转载▼     网络性能测量的五项指标 1. 可用性(availability) 测试网络性能的第一步是确定网络是否 ...

  7. Linux系统性能测试工具(八)——网络性能测试工具之netperf

    本文介绍关于Linux系统(适用于centos/ubuntu等)的网络性能测试工具-iperf.磁盘io性能测试工具包括: iperf: netperf 参考链接:https://www.jiansh ...

  8. 转://linux下的CPU、内存、IO、网络的压力测试工具与方法介绍

    转载地址:http://wushank.blog.51cto.com/3489095/1585927 一.对CPU进行简单测试: 1.通过bc命令计算特别函数 例:计算圆周率 echo "s ...

  9. Netperf网络性能测试工具详解教程

    本文下载链接: [学习笔记]Netperf网络性能测试工具.pdf 一.Netperf工具简介 1.什么是Netperf ? (1)Netperf是由惠普公司开发的一种网络性能测量工具,主要针对基于T ...

随机推荐

  1. CIE标准色度系统(下)

    四.色温与相关色温 根据绝对黑体光谱分布特性的普朗克定律,由普朗克公式可以计算出黑体对应于某一温度的光谱分布,并由此应用CIE标准色度系统可获得该温度下黑体发光的三刺激值和色品坐标,从而在色品图上得到 ...

  2. 关于 Spring 中 getBean 的全流程源码解析

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 你提出问题,就要给出解决方案! 最近有粉丝小伙伴反馈,与自己的上级沟通总是遇到障碍, ...

  3. Github仓库master分支到main分支迁移指南

    1 概述 2020年10月1日后,Github会将所有新建的仓库的默认分支从master修改为main,这就导致了一些旧仓库主分支是master,新仓库主分支是main的问题,这在有时候会带来一些麻烦 ...

  4. Broken Keyboard (a.k.a. Beiju Text) UVA - 11988

    You're typing a long text with a broken keyboard. Well it's not so badly broken. The only problem wi ...

  5. JDBC_02_JDBC连接数据库 (INSERT INTO)

    JDBC连接数据库 (INSERT INTO) String url="jdbc:mysql://127.0.0.1:3306/employ?useUnicode=true&char ...

  6. Day06_32_Java各种内部类

    内部类 内部类都有哪些? 成员内部类 匿名内部类 静态内部类 局部内部类 成员内部类 - 成员内部类内部不能有静态声明(静态方法和静态变量) - 成员内部类可以访问外部类中所有的数据包括静态数据和实例 ...

  7. Webpack的理解以及解决了的问题

    一.背景 Webpack 最初的目标是实现前端项目的模块化,旨在更高效地管理和维护项目中的每一个资源 模块化 最早的时候,我们会通过文件划分的形式实现模块化,也就是将每个功能及其相关状态数据各自单独放 ...

  8. 通过钉钉网页上的js学习xss打cookie

    做完了一个项目,然后没啥事做,无意看到了一个钉钉的外部链接: 题外话1: 查看源码,复制其中的代码: try { var search = location.search; if (search &a ...

  9. python3使用迭代生成器yield减少内存占用

    技术背景 在python编码中for循环处理任务时,会将所有的待遍历参量加载到内存中.其实这本没有必要,因为这些参量很有可能是一次性使用的,甚至很多场景下这些参量是不需要同时存储在内存中的,这时候就会 ...

  10. 【接口参数解析BUG】SpringMVC接口参数解析

    今天遇到一个BUG,前端传递数字数组时,后端使用字符串类型去接收,结果无法接收到,代码如下 问题: GET请求: 前端: configJsonArray:[1,2] 后端: private Strin ...