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

工作原理
Netperf 工具以 client/server 方式工作。server 端是 netserver,用来侦听来自 client 端的连接,client 端是 netperf ,用来向 server 发起网络测试。

安装
安装完以后,会生成两个工具:netserver 和 netperf

$ wget -c "https://codeload.github.com/HewlettPackard/netperf/tar.gz/netperf-2.5.0" -O netperf-2.5.0.tar.gz
$ tar xvf netperf-2.5.0.tar.gz 
$ cd netperf-netperf-2.5.0/
$ ./configure 
$ make && make install
$ netperf -h   #有输出说明安装成功

启动
服务端:192.168.1.180
客户端:192.168.1.191
操作主机 192.168.1.180
$ netserver
Starting netserver with host 'IN(6)ADDR_ANY' port '12865' and family AF_UNSPEC
$ ss -lnt   #监听在12865端口

操作主机 192.168.1.191
$ netperf -H 192.168.1.180
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.1.180 (192.168.1.180) 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    10.47      86.40

吞吐量:86.4 * 10^6 bits/sec

换算一下就是 10Mbit/s(86.40/8=10.8*1000000bps=10Mbit/s)

附存储单位转换关系

1 Byte = 8 bit 
1 KB= 1024 B 
1 MB = 1024 KB 
1 GB = 1024 MB 
1 TB = 1024 GB

带宽
网络线路的计量单位,也就是我们通常说的 2M 宽带,10 M 宽带的单位,是 比特每秒(bits per second)。比特每秒 的缩写为 bps,意思是每秒接收的平均比特数。更大的单位是 千比特每秒(Kbps)或 兆比特每秒(Mbps)。2M宽带,意味着每秒平均可以接受 2Mb 的数据,也就是二百万左右比特的数据,在这里,小写 b 的意思就是比特了

网速
下载速度,每秒下载的字节数。

网速 5KB,每秒接受的数据是5千字节。

下载速度理论上是带宽的八分之一

2 MB 带宽 理论下载速度 256 KB

10 M 带宽理论下载速度 1280 KB

实际上由于我们还需要接受一些下载需要的一些信息,如 IP 信息,HTTP 信息,再加上服务器传输速度,电脑配置等原因,网速会比理论慢一些。
————————————————
版权声明:本文为CSDN博主「无与伦比jia」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011198997/article/details/84342947

简述

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网络丢包测试工具,用NETEM模拟网络丢包 (转)

    [linux] tc netem 模拟网络丢包linux下的tc可以操纵网络,比如分配带宽给不同的应用.模拟网络时延.模拟糟糕网络环境下的丢包等. 但在实际使用模拟丢包时,我们 发现了问题:两台服务器 ...

  2. linux网络配置、测试及故障诊断方法和工具二

    网络配置的工具<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> ...

  3. linux网络配置、测试及故障诊断方法和工具三

    DNS客户端配置文件/etc/resolv.conf<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office: ...

  4. Linux网络性能测试工具——Iperf

    文章目录 1.Iperf环境准备 1.1 Linux源码安装Iperf 1.2 Arm交叉编译Iperf 2.指令分析 3.Iperf测试 3.1 Linux平台 3.2 ARM平台 3.3 测试结果 ...

  5. Linux CENTOS7 Linux网络性能测试工具-iperf 安装过程以及示例!

    要在网址的这个位置下载才可以! https://iperf.fr/iperf-download.php#archlinux 我的:https://download.csdn.net/download/ ...

  6. Setup linux 网卡故障,linux网络配置、测试及故障诊断方法和工具二

    接下来解压并安装:#tar -zxvf linux-wlan-ng-0.2.1-pre25.tar.gz #cd linux-wlan-ng-0.2.1-pre25 #./Configure或者#ma ...

  7. linux网络性能测试工具Iperf使用介绍

    1.下载 (可以到这里下载:) http://downloads.sourceforge.net/ 2.安装 [root@localhost]#tar zxvf iperf-2.5.0.tar.gz ...

  8. 阿里云容器服务cni网络插件terway非官方网络性能测试

    作者:张荣滨,酷划在线后端架构师,关注微服务治理,容器化技术,Service Mesh等技术领域 terway网络性能测试 酷划在线成立于2014年,是国内激励广告行业的领军者.酷划致力于打造一个用户 ...

  9. 利用局域网测试仪进行网络性能测试

    随着互联网科技的飞速发展,网络变的越来越庞大,数据量越来越高,网络速率成几何倍数增长,网络应用也越来越复杂,对网络的性能.稳定性和可靠性都提出了更高的要求.在日益复杂的网络环境中一旦发生网络故障,很难 ...

最新文章

  1. 2020年人工神经网络第二次作业-参考答案第一题
  2. 【转】“根级别上的数据无效”问题的解决
  3. 第十届蓝桥杯java B组—试题C 数列求值
  4. JavaScript 拾碎[一] ECMAScript 简介
  5. jQuery源码阅读3— bulidFragment( )
  6. Eigen入门之密集矩阵 7 - Map class:连接Eigen与C++的数据
  7. MFC socket网络编程(流程示例)
  8. 3d打印主要的切片参数类型_3D打印机切片参数详情说明
  9. java定义数组_java中数组的三种定义方式_java中数组的定义及使用方法(推荐)...
  10. com词根词缀_背单词想过目不忘?看这篇文章学会用“词缀”记单词
  11. 关于图神经网络的相关学习资源的分享——网站 博客(一)
  12. 马哥linux 2014,马哥linux内容分享之压缩和解压缩
  13. 搜索引擎原理第一阶段之爬行和抓取
  14. 2022 Gartner新兴技术成熟曲线
  15. Java学习day096 并发(六)(线程安全的集合:高效的映射、集和队列、映射条目的原子更新、对并发散列映射的批操作、并发集视图、写数组的拷贝、并行数组算法、较早的线程安全集合)
  16. 怎么看服务器硬盘是机械还是固态,怎么辨别机械硬盘和固态硬盘?(附多种方法)...
  17. 游戏服务器为什么老被攻击?被攻击了的一些常见的处理方法
  18. 《scikit-learn机器学习》决策树③ -泰坦尼克号幸存者预测【思路+代码】
  19. python基础教程:__call__用法
  20. E+H超声波液位计变送器维修FMU90-R11CA111AA3A

热门文章

  1. python模拟网页点击_python模拟点击
  2. 【转】现代c++开发利器folly教程系列之:future/promise
  3. java 获取两个时间差_java如何获取两个日期的时间差
  4. model.evaluate 和 model.predict
  5. nbd 相关概念及操作
  6. Mysql ESCAPE 用法
  7. Android面试题,framework源码
  8. java输出excel 异常处理_使用poi导出Excel,并设定单元格内容类型,抛出异常
  9. java结束if_java中如何结束if循环
  10. Regulator子系统