一、简介

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

二、网络性能测试概述

  网络性能测量的五项指标:

  可用性(availability)
  响应时间(response time)
  网络利用率(network utilization)
  网络吞吐量 (network throughput)
  网络宽带容量(network bandwidth capacity)

  1、可用性

    测试网络性能的第一步是确定网络是否正常,最简单的方法是使用ping命令。通过向远端的机器发送icmp echo request,并等待接收icmp echo reply 来判断远端机的机器是否连通,网络是否正常工作。

  2、响应时间

    Ping命令的echo request/reply一次往返花费时间就是响应时间。

  3、网络利用率

    网络利用率是指网络被使用的时间占总时间(即被使用的时间+空闲时间)的比例,比如:ethernet虽然是共享的,但同时却只能有一个报文在传输。因此在任一时刻,ethernet或者是100%的利用率,或者是0%利用率。

  4、网络吞吐量

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

    网络吞吐量可以帮助寻找网络路径中的瓶颈。比如。即使client 和server都被分别连接到各自的100M ethernet上,但是如果这两个100M的ethernet被10M的ethernet连接起来,那么10M的ethernet就是网络的瓶颈。

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

  5、网络宽带容量

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

三、Netperf原理

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

四、安装Netperf(客户端以及服务端都执行下面安装步骤)

  1、在linux系统中,执行:

    #wget “https://codeload.github.com/HewlettPackard/netperf/tar.gz/netperf-2.5.0”

  2、安装源包

    #tar -xvf netperf-netperf-2.5.0.tar.gz

  3、安装依赖包gcc

    #yum install gcc cc -y

  4、进入neperf解压目录

    #./configure

  5、#make && make install

  6、启动netserver(只在服务器端操作)

   [root@localhost netperf-netperf-2.5.0]# netserver 

   Unable to start netserver with ‘IN(6)ADDR_ANY’ port ‘12865’ and family AF_UNSPEC

  注释:

    客户端连接服务端,需要关闭防火墙

五、命令参数

  命令参数包括如下:

  -H host:制定远端运行netserver 的服务器IP地址;

  -I 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网络测试

  1、TCP_STREAM

    netperf向server发送批量的TCP数据分组,以确定数据传输过程中的吞吐量,即测试TCP流式通讯时的网络宽带。

客户端进行连接、测试  

    [root@localhost netperf-netperf-2.5.0]# netperf -t TCP_STREAM -H 10.60.1.181 -l 60
    MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.60.1.181 (10.60.1.181) 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.03   4.84

修改发送包的大小  

    [root@localhost netperf-netperf-2.5.0]# netperf -t TCP_STREAM -H 10.60.1.181 -l 60 — -m 1024
    MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.60.1.181 (10.60.1.181) 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    1024      60.01    3.18

   2、UDP_STREAM

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

批量传输

      [root@localhost netperf-netperf-2.5.0]# netperf -t UDP_STREAM -H 10.60.1.181 -l 10 

      MIGRATED UDP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.60.1.181       (10.60.1.181) port 0 AF_INET
      Socket    Message    Elapsed    Messages
      Size      Size      Time       Okay Errors    Throughput
      bytes       bytes     secs     #    #       10^6bits/sec

      124928   65507      10.01    145   0        7.59
      124928            10.01    145             7.59

超过socket的发送与接收缓冲大小124928    

      [root@localhost netperf-netperf-2.5.0]# netperf -t UDP_STREAM -H 10.60.1.181 -l 10 — -m       200000
      MIGRATED UDP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.60.1.181       (10.60.1.181) port 0 AF_INET
      send_data: data send error: errno 90
      netperf: send_omni: send_data failed: Message too long

  3、TCP_RR

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

TCP_RR      

      [root@localhost netperf-netperf-2.5.0]# netperf -t TCP_RR -H 10.60.1.181 -l 10
      MIGRATED TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to       10.60.1.181 (10.60.1.181) 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.01     337.49
      16384    87380

修改TCP_RR参数     

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

      参数                                            说明

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

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

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

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

      [root@localhost netperf-netperf-2.5.0]# netperf -t TCP_RR -H 10.60.1.181 -l 10 — -r 10 10

      MIGRATED TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to       10.60.1.181 (10.60.1.181) 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    10       10     10.01      356.78
      16384    87380

  4、TCP_CRR                                                                                                                        

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

      [root@localhost netperf-netperf-2.5.0]# netperf -t TCP_CRR -H 10.60.1.181 — -l 10
      MIGRATED TCP Connect/Request/Response TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET       to 10.60.1.181 (10.60.1.181) 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.01       75.53
      16384    87380

  5、UDP_RR   

      [root@localhost netperf-netperf-2.5.0]# netperf -t UDP_RR -H 10.60.1.181
      MIGRATED UDP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to       10.60.1.181 (10.60.1.181) 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

      124928  124928   1        1      10.01      350.59
      124928  124928