Linux网络性能评估工具iperf CHARIOT测试网络吞吐量

Posted kn-zheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux网络性能评估工具iperf CHARIOT测试网络吞吐量相关的知识,希望对你有一定的参考价值。

网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性能的基础,但是由于网络设计不合理、网络存在安全漏洞等原因,都会导致网络带宽利用率不高。要找到网络带宽利用率不高的原因,就需要对网络传输进行监控,此时就需要用到一些网络性能评估工具,而Iperf就是这样一款网络带宽测试工具,本节将详细介绍一下Iperf的使用。

1、 Iperf能做什么

Iperf是一款基于TCP/IP和UDP/IP的网络性能测试工具,它可以用来测量网络带宽和网络质量,还可以提供网络延迟抖动、数据包丢失率、最大传输单元等统计信息。网络管理员可以根据这些信息了解并判断网络性能问题,从而定位网络瓶颈,解决网络故障。

下面介绍Iperf的主要功能。

(1)TCP方面

q 测试网络带宽。

q 支持多线程,在客户端与服务端支持多重连接。

q 报告MSS/MTU值的大小。

q 支持TCP窗口值自定义并可通过套接字缓冲。

(2)UDP方面

q 可以设置指定带宽的UDP数据流

q 可以测试网络抖动值、丢包数

q 支持多播测试

q 支持多线程,在客户端与服务端支持多重连接。

二、 Iperf的安装与使用

iperf可以运行在任何IP网络上,包括本地以太网、接入因特网、Wi-Fi网络等。在工作模式上,iperf运行于服务器、客户端模式下,其服务器端主要用于监听到达的测试请求,而客户端主要用于发起连接会话,因此要使用iperf,需要两台服务器,一台运行在服务器模式下,另一台运行在客户端模式下。

1.安装iperf

iperf支持Win32、Linux、FreeBSD、MacOS X、OpenBSD和Solaris等多种操作系统平台。读者可以从iperf官方主页http://iperf.fr/ 下载各种版本,目前最新的版本是iperf3.0,这里下载的软件包为iperf-3.0.tar.gz,安装过程如下:

[root@ networkserver ~]# tar zxvf iperf-3.0.tar.gz

[root@ networkserver ~]# cd iperf

[root@ networkserver iperf]# make

[root@ networkserver iperf]# make install

这样,iperf就安装完成了。

2.iperf参数介绍

在完成iperf安装后,执行“iperf3 –h”即可显示iperf的详细用法。iperf的命令行选项共分为三类,分别是客户端与服务器端公用选项、服务器端专用选项和客户端专用选项,下面对常用的选项进行介绍。

服务器端专用选项的含义如表1所示。

表1 服务器端专用选项的含义

命令行参数

含义描述

-s

将iperf以server模式启动,例如:iperf3 –s,iperf3默认启动的监听端口为5201,可以通过“-p”选项修改默认监听端口

-D

将iperf作为后台守护进程运行,例如:iperf3 -s -D

 

客户端专用选项的含义如表2.5所示。

表2 客户端专用选项的含义

命令行参数

含义描述

-c

将iperf以client模式启动

例如:iperf3 -c 192.168.12.168,其中192.168.12.168是server端的IP地址

-u

指定使用UDP协议

-b [K|M|G]

指定UDP模式使用的带宽,单位bits/sec。此选项与“-u”选项相关。默认值是1 Mbit/sec

-t

指定传输数据包的总时间。iperf将在指定的时间内,重复发送指定长度的数据包。默认是10秒钟

-n [K|M|G]

指定传输数据包的字节数,例如:iperf3 -c 192.168.12.168 –n 100M

-l

指定读写缓冲区的长度。TCP方式默认大小为8KB,UDP方式默认大小为1470字节

-P

指定客户端与服务端之间使用的线程数。默认是1个线程。需要客户端与服务器端同时使用此参数

-R

切换数据发送接收模式,例如默认客户端发送,服务器端接收,设置此参数后,数据流向变为客户端接收,服务器端发送

-w

指定套接字缓冲区大小,在TCP方式下,此设置为TCP窗口的大小。在UDP方式下,此设置为接受UDP数据包的缓冲区大小,用来限制可以接收数据包的最大值

-B

用来绑定一个主机地址或接口,这个参数仅用于具有多个网络接口的主机。在UDP模式下,此参数用于绑定和加入一个多播组

-M

设置TCP最大信息段的值

-N

设置TCP无延时

 

客户端与服务器端公用选项的含义如表3所示。

表3 客户端与服务器端公用选项的含义

命令行参数

含义描述

-f[k|m|g|K|M|G]

指定带宽输出单位,“[k|m|g|K|M|G]”分别表示以Kbits, Mbits, Gbits, KBytes, MBytes,GBytes显示输出结果,默认以Mbits为单位,例如:iperf3 -c 192.168.12.168 -f M

-p

指定服务器端使用的端口或客户端所连接的端口,例如:

iperf3 -s -p 9527;

iperf3 -c 192.168.12.168 -p 9527

-i

指定每次报告之间的时间间隔,单位为秒。如果设置为非零值,就会按照此时间间隔输出测试报告。默认值为1。

例如:iperf3 -c 192.168.12.168 -i 2

-F

指定文件作为数据流进行带宽测试。

例如:iperf3 -c 192.168.12.168 -F web-ixdba.tar.gz

 

2.3.3 Iperf应用实例

要使用iperf,首先要启用一个服务端,这里假定服务端的IP地址为192.168.12.168,在此服务器上运行“iperf3 -s”即可开启iperf的服务器模式。在默认情况下,iperf3将在服务端打开一个5201监听端口,此时就可以将另一台服务器作为客户端执行iperf功能测试了。

1.测试TCP吞吐量

为了确定网卡的最大吞吐量,可以在任意客户端运行iperf命令,iperf将尝试从客户端尽可能快地向服务端发送数据请求,并且会输出发送的数据量和网卡平均带宽值。图1是一个最简单的带宽测试命令。

图1通过iperf测试网络带宽利用率

从图1可以看出,iperf默认的运行时间是10秒钟,每隔一秒钟输出一次传输状态,同时还可以看到每秒钟传输的数据量在112MB左右,刚好与“Bandwidth”列的值对应起来,网卡的带宽速率维持在941Mbits/sec左右,而测试的服务器是千兆网卡,这个测试值也基本合理。在输出的最后,iperf还给出了总的数据发送、接收量,并给出了带宽速率平均值,通过这些值,基本可以判断网络带宽是否正常,网络传输状态是否稳定。

iperf提供很多参数,可以多角度、全方位地测试网络带宽利用率,例如,要改变iperf运行的时间和输出频率,可以通过“-t”和“-i”参数来实现,如图2所示。

图2 添加“-t”和“-i”参数后的iperf输出

从图2 可以看出,输出状态的间隔变为每5秒钟一次,总共执行测试时间为20秒,测试的带宽速率仍然保持在941Mbits/sec左右,唯一变化的是失败重传次数增加了。

为了模拟大量的数据传输,也可以指定要发送的数据量,这可以通过“-n”参数来实现。在指定“-n”参数后,“-t”参数失效,iperf在传输完毕指定大小的数据包后,自动结束,如图3所示。

图3 iperf客户端通过“-n”参数指定要传输的数据量

图3的例子是指定发送一个5GB左右的数据包,并且每隔10秒钟输出一次传输状态,从这个输出可以看出,当失败重传次数较多时,传输速率急速下降。

有时候,为了模拟更真实的TCP应用,iperf客户端允许从一个特定的文件发送数据,这可以通过“-F”参数实现,如图4所示。

图4 iperf客户端通过“-F”参数指定文件来发送数据

在图4的例子中,通过“-F”参数指定了一个webdata.tar.gz文件作为iperf要传输的数据,在使用此参数时,需要同时指定一个“-t”参数来设置要测试传输的时间,这个时间尽量设置长一些,因为在默认传输时间10秒内,这个文件可能还没有传完。

在使用iperf进行网络带宽测试时,如果没有指定发送方式,iperf客户端只会使用一个单一的线程,而iperf是支持多线程的,可以使用iperf提供的“-P”参数来设置多线程的数目,通过使用多线程,可以在一定程度上增加网络的吞吐量。

下面通过两个例子进行简单对比,图5是iperf使用单线程传输1.86GBytes数据所消耗的时间和带宽使用情况。为了速率单位统一,这里使用“-f”参数将输出结果都通过MBytes来显示。

图5 iperf在单线程模式下的传输时间和传输速率

从图5中可以看出,传输1.86GBytes的数据消耗了17秒的时间,平均带宽速率为112MBytes/sec(注意单位).下面再看看使用多线程后,iperf传输同样大小数据量所消耗的时间和平均带宽速率,如图6所示。

图6 iperf使用多线程后的数据传输状态

这里通过“-P”参数开启了2个多线程,从传输时间上看,传输1.86GBytes的数据,消耗时间为10.79秒,比之前单线程的传输时间少了近7秒钟,在平均带宽速率上,从之前单线程的112MBytes/sec提高到177MBytes/sec,从这个结果可以看出,多线程对网络传输性能的提高不小。

2 . 测试UDP丢包和延迟

iperf也可以用于UDP数据包吞吐量、丢包率和延迟指标,但是由于UDP协议是一个非面向连接的轻量级传输协议,并且不提供可靠的数据传输服务,因此对UDP应用的关注点不是传输数据有多快,而是它的丢包率和延时指标。通过iperf的“-u”参数即可测试UDP应用的传输性能,图7测试的是在iperf客户端传输100MB的UDP数据包的输出结果.:

图7 iperf传输100MB的UDP数据包的输出结果

在图7中,重点关注虚线下的一段内容,在这段输出中,“Jitter”列表示抖动时间,或者称为传输延迟,“Lost/Total”列表示丢失的数据报和总的数据报数量,后面的0.33%是平均丢包的比率,“Datagrams”列显示的是总共传输数据报的数量。

这个输出结果过于简单,要了解更详细的UDP丢包和延时信息,可以在iperf服务端查看,因为在客户端执行传输测试的同时,服务端也会同时显示传输状态,如图8所示。

图8 iperf服务端显示的UDP传输状态

在这个输出中,详细记录了在传输过程中,每个阶段的传输延时和丢包率,在UDP应用中随着传输数据的增大,丢包率和延时也随之增加。对于延时和丢包可以通过改变应用程序来缓解或修复,例如视频流应用,可以通过缓存数据的方式而可以容忍更大的延时。

 

利用IXCHARIOT进行网络测速

 

Chariot由两部分组成:控制端Console和远端Endpoint,两者都可安装在普通PC或者服务器上,控制端安装在Windows操作系统上,Endpoint支持各种主流的操作系统。
控制端为该产品的核心部分,控制界面(也可采用命令行方式)、测试设计界面、脚本选择及编制、结果显示、报告生成以及API接口等都由控制端提供。Endpoint可根据实际测试的需要安装在单个或者多个终端处,负责从控制端接收指令、完成测试并将测试数据上报到控制端。
Chariot通过内置的脚本,由控制端控制远端相互主动发包,对设备进行功能、压力和性能等测试,测试结果包括吞吐量、时延、抖动、丢包、错包等等,它能够得到定量的数据并提供详尽的测试报告,从而使得用户可以主动地把握设备的性能状况,并及时地发现问题并采取措施。
Chariot通过各种机制可以仿真任意的应用。首先,通过内置的脚本,Chariot发送不同的数据流,可以模拟现在常见的125种应用,而且这种数据流是双向的,真正与协议栈进行交互。Chariot对各种应用的支持是基于在Endpoint之间发送的多种数据流,数据流的传送可基于多种协议,包括TCP、UDP、RTP、SPX、IPX和SNA,目前也已经支持IPv6。Chariot还支持Multicast、QoS等多种先进技术,而且将一直保持同步。另外,在出现新的或者特殊的应用的时候,通过工具套件Application Scanner能够生成可以供Chariot使用的脚本。Chariot允许对脚本进行定制,改变数据流的各种参数,比如起始的启动间隔、发送窗口、接受窗口的大小,发送文件的大小,发送的速率、发送的比特流类型、使用端口等等,而且这些参数不但可以是一个由用户指定的典型数值,而且还能选用在最大、最小值之间符合平均分布、正态分布、泊松分布或者指数分布的随机值,从而真正地仿真网络中各种特定的数据流,全面地测试网络或者网络设备在复杂的网络环境下的性能。
现代网络的一个特点是呈分布式发展,在对网络性能测试的过程中,可能要涉及到很多的节点。采用Chariot软件,则可以直接在中央控制端轻点几下鼠标就完成对全网的测试。Chariot的远端可以直接在NetIQ公司网站上下载或者通过中央控制端远程安装到所需要的节点机器上去,Chariot最多可支持10000个远端的协同测试,而远端软件则可任意按照需要安装,在测试的时候即可被唤醒。
由于Chariot在无线产品性能测试领域也已成为事实上的业界标准,WECA采用该产品作为给厂家发放Wi-Fi标志的工具。对于制造商,Chariot可应用于实验室测试、设备性能展示、网络现场性能测试及故障定位等方面,比如信息产业部通信计量公司就采用Chariot产品对其无线产品的应用层性能进行测试。
作为应用层性能测试的标准工具,Chariot由于其网络环境方面的特点,能够为运营商提供多种其它工具不可替代的服务,具体有以下几个方面的应用:设备选型、基准性能测试、压力测试、功能测试、网络调整、网络性能展示、确定SLA以及性能瓶颈定位及排除等。在网络出现故障时,使用Chariot进行故障定位,判断是网络的问题还是服务器的问题,如果是网络的问题,再利用该工具进行定位。此外,它还用于与客户进行SLA的协商和测试标准制定。

iperf网络新能评估

什么是网络性能评估

网络新能评估是指检测网络带宽的使用率,最大化利用网络带宽,由于网络设计不合理、网络安全存在漏洞,会导致网络利用率低。iperf正是发现这种问题的网络测试工具。

iperf简介

iperf是一款基于TCP/IP和UDP/IP的网络性能测试工具。可以用来测量网络带宽和网络质量,提供网络延迟抖动、数据包丢失、最大传输单元等统计信息,可以根据这些统计信息判断网络性能问题,定位网络瓶颈。

iperf的主要功能

(1)TCP方面

测试网络带宽

支持多线程,在客户端与服务器端支持多连接

报告MSS/MTU值

支持TCP窗口值得定义并通过套接字缓冲

(2)UDP方面

可以设置指定带宽的UDP数据流

可以测试网络抖动、丢包数

支持多播测试

支持多线程,在客户端与服务器端支持多连接

[root@node2 ~]# yum install -y iperf3

参数

服务器端参数

命令行参数 参数含义
-s 以服务端模式启动,默认启动监听端口为5201,可以通过-p选项指定监听端口
-D 以守护进程启动,与-s选项联用

客户端参数

客户端参数 参数含义
-c 以客户端模式启动iperf,例如:iperf -c 10.0.0.10,其中10.0.0.10位服务器端地址
-u 使用UDP协议
-b[kmgKMG] 指定UDP模式使用的带宽。单位bit/sec,与-u选项相关,默认是1Mbit/sec
-t 指定数据包传输的总时间,iperf在指定时间内,重复发送指定长度的数据包
-n[kmgKMG] 指定传输数据包的字节数,例如:iperf -c 10.0.0.10 -n 100M
-l 指定读写缓冲区长度。
TCP方式默认128K
UDP方式默认大小1470
-P,--parallel 指定客户端和服务端之间使用的线程数,默认1个线程。
需要客户端和服务端同时使用此参数
-R 切换数据发送,接收模式
例如,客户端发送,服务端接收,设置此参数后,变为服务端发送,客户端接收
-w[KM] 指定套接字缓冲区大小
在TCP模式下,此设置为TCP窗口的大小。
在UDP模式下,此参数为接受UDP数据包的缓冲大小,用来限制可以接收数据包的最大值
-B 绑定一个主机地址或接口,此参数仅用于具有多个网络接口的主机。
在UDP模式下,此参数用于绑定和加入一个多播组
-M 设置TCP最大信息段的值
-N 设置TCP无延迟

公共参数

命令行参数 参数含义
-f,[kmgKMG] 指定带宽输出单位,分别表示为Kbits, Mbits, KBytes, MBytes,GBytes,默认是MBytes
例如:iperf -c 10.0.0.10 -f M
-p

指定服务端使用的端口或客户端连接的端口,如:
iperf -s -p 9527

iperf -c 10.0.0.10 -p 9527

-i 指定每次报告生成的时间间隔。单位:秒
-F

指定文件作为数据源进行带宽测试,例如:

iperf -c 10.0.0.10 -F web-ixdba.tar.gz

应用举例

服务端启动iperf3

[root@node2 ~]# iperf3 -s 10.0.0.52
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

测试tcp吞吐量

在任意客户端执行iperf命令,将从客户端发送数据到服务端。输出发送的数据量和网卡平均带宽。

客户端运行结果

[root@node03 ~]# iperf3 -c 10.0.0.52
Connecting to host 10.0.0.52, port 5201
[  4] local 10.0.0.53 port 33524 connected to 10.0.0.52 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec   362 MBytes  3.04 Gbits/sec    0   1.29 MBytes       
[  4]   1.00-2.00   sec   342 MBytes  2.87 Gbits/sec   73   1.41 MBytes       
[  4]   2.00-3.00   sec   421 MBytes  3.53 Gbits/sec    0   1.55 MBytes       
[  4]   3.00-4.00   sec   411 MBytes  3.45 Gbits/sec    0   1.69 MBytes       
[  4]   4.00-5.00   sec   429 MBytes  3.59 Gbits/sec    0   1.82 MBytes       
[  4]   5.00-6.00   sec   432 MBytes  3.64 Gbits/sec   20   1.38 MBytes       
[  4]   6.00-7.00   sec   442 MBytes  3.71 Gbits/sec    0   1.57 MBytes       
[  4]   7.00-8.00   sec   446 MBytes  3.74 Gbits/sec    0   1.71 MBytes       
[  4]   8.00-9.00   sec   436 MBytes  3.66 Gbits/sec    0   1.82 MBytes       
[  4]   9.00-10.00  sec   405 MBytes  3.40 Gbits/sec   22   1.39 MBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  4.03 GBytes  3.46 Gbits/sec  115             sender
[  4]   0.00-10.00  sec  4.03 GBytes  3.46 Gbits/sec                  receiver

iperf Done.

服务端结果

[root@node2 ~]# iperf3 -s 10.0.0.52
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 10.0.0.53, port 33522
[  5] local 10.0.0.52 port 5201 connected to 10.0.0.53 port 33524
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-1.00   sec   345 MBytes  2.89 Gbits/sec                  
[  5]   1.00-2.00   sec   344 MBytes  2.89 Gbits/sec                  
[  5]   2.00-3.00   sec   417 MBytes  3.50 Gbits/sec                  
[  5]   3.00-4.00   sec   416 MBytes  3.49 Gbits/sec                  
[  5]   4.00-5.00   sec   425 MBytes  3.56 Gbits/sec                  
[  5]   5.00-6.00   sec   435 MBytes  3.65 Gbits/sec                  
[  5]   6.00-7.00   sec   441 MBytes  3.70 Gbits/sec                  
[  5]   7.00-8.00   sec   445 MBytes  3.72 Gbits/sec                  
[  5]   8.00-9.00   sec   438 MBytes  3.68 Gbits/sec                  
[  5]   9.00-10.00  sec   408 MBytes  3.43 Gbits/sec                  
[  5]  10.00-10.04  sec  13.6 MBytes  2.74 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-10.04  sec  0.00 Bytes  0.00 bits/sec                  sender
[  5]   0.00-10.04  sec  4.03 GBytes  3.45 Gbits/sec                  receiver

运行结果说明

第一行说明了服务器端地址和端口

第二行为客户端连接服务端使用的地址和端口

第三行之后:

Interval 表示传输数据的时间间隔

Transfer  每秒传输的数据量   

Bandwidth       传输数据使用的网络带宽

Retr  重传次数
Cwnd  不清楚干嘛的

分割线之后的说明了本次测试的发送端和接收端概要

本次测试结果说明:10秒内,客户端发送了4.03 GBytes数据,服务端接收了4.03 GBytes,客户端重发了115次?总带宽3.46 Gbits/sec

修改测试频率 -t -i

[root@node03 ~]# iperf3 -c 10.0.0.52 -t 20 -i 5
Connecting to host 10.0.0.52, port 5201
[  4] local 10.0.0.53 port 33532 connected to 10.0.0.52 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-5.00   sec  2.14 GBytes  3.67 Gbits/sec   62   1.76 MBytes       
[  4]   5.00-10.00  sec  2.19 GBytes  3.77 Gbits/sec   47   1.83 MBytes       
[  4]  10.00-15.00  sec  2.20 GBytes  3.78 Gbits/sec   27   1.82 MBytes       
[  4]  15.00-20.00  sec  2.18 GBytes  3.74 Gbits/sec   52   1.76 MBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-20.00  sec  8.71 GBytes  3.74 Gbits/sec  188             sender
[  4]   0.00-20.00  sec  8.71 GBytes  3.74 Gbits/sec                  receiver

iperf Done.


20秒内,没5秒输出一次结果,可以看到唯一变化的是重传次数增加了

使用-n参数指定传输数据量

[root@node03 ~]# iperf3 -c 10.0.0.52 -n 5000000000 -i 10
Connecting to host 10.0.0.52, port 5201
[  4] local 10.0.0.53 port 33544 connected to 10.0.0.52 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-10.00  sec  3.85 GBytes  3.31 Gbits/sec   67   1.80 MBytes       
[  4]  10.00-12.01  sec   828 MBytes  3.46 Gbits/sec   22   1.45 MBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-12.01  sec  4.66 GBytes  3.33 Gbits/sec   89             sender
[  4]   0.00-12.01  sec  4.66 GBytes  3.33 Gbits/sec                  receiver

可以看到,当一次传输5G数据的时候,失败重传次数增多了,传输速率下降

 -P选项开启多线程处理

默认的iperf使用单线程传输数据,下面通过例子进行对比单线程和多线程

(1)单线程

[root@node2 ~]# iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 10.0.0.53, port 39656
[  5] local 10.0.0.52 port 5201 connected to 10.0.0.53 port 39658
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-1.00   sec   347 MBytes  2.91 Gbits/sec                  
[  5]   1.00-2.00   sec   410 MBytes  3.44 Gbits/sec                  
[  5]   2.00-3.00   sec   368 MBytes  3.09 Gbits/sec                  
[  5]   3.00-4.00   sec   367 MBytes  3.08 Gbits/sec                  
[  5]   4.00-5.00   sec   425 MBytes  3.57 Gbits/sec                  
[  5]   5.00-6.00   sec   393 MBytes  3.30 Gbits/sec                  
[  5]   6.00-7.00   sec   385 MBytes  3.23 Gbits/sec                  
[  5]   7.00-8.00   sec   360 MBytes  3.02 Gbits/sec                  
[  5]   8.00-9.00   sec   400 MBytes  3.36 Gbits/sec                  
[  5]   9.00-10.00  sec   371 MBytes  3.11 Gbits/sec                  
[  5]  10.00-11.00  sec   335 MBytes  2.81 Gbits/sec                  
[  5]  11.00-12.00  sec   379 MBytes  3.18 Gbits/sec                  
[  5]  12.00-12.59  sec   227 MBytes  3.22 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-12.59  sec  0.00 Bytes  0.00 bits/sec                  sender
[  5]   0.00-12.59  sec  4.66 GBytes  3.18 Gbits/sec                  receiver


[root@node03
~]# iperf3 -c 10.0.0.52 -i 10 -f M -n 5000000000 Connecting to host 10.0.0.52, port 5201 [ 4] local 10.0.0.53 port 39658 connected to 10.0.0.52 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-10.00 sec 3.75 GBytes 384 MBytes/sec 80 1.64 MBytes [ 4] 10.00-12.55 sec 928 MBytes 364 MBytes/sec 53 1.56 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-12.55 sec 4.66 GBytes 380 MBytes/sec 133 sender [ 4] 0.00-12.55 sec 4.66 GBytes 380 MBytes/sec receiver iperf Done.

我们使用-f选项指定了传输结果以MBytes/sec来展示,从上面结果可以看出传输5GB数据用了12.55秒,平均带宽速率为380 MBytes/sec,下面为多线程时iperf的总体概览:

服务端
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 10.0.0.53, port 39660
[  5] local 10.0.0.52 port 5201 connected to 10.0.0.53 port 39662
[  7] local 10.0.0.52 port 5201 connected to 10.0.0.53 port 39664
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-1.00   sec   207 MBytes  1.74 Gbits/sec                  
[  7]   0.00-1.00   sec   187 MBytes  1.57 Gbits/sec                  
[SUM]   0.00-1.00   sec   394 MBytes  3.30 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   1.00-2.00   sec   198 MBytes  1.66 Gbits/sec                  
[  7]   1.00-2.00   sec   223 MBytes  1.87 Gbits/sec                  
[SUM]   1.00-2.00   sec   420 MBytes  3.53 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   2.00-3.00   sec   221 MBytes  1.85 Gbits/sec                  
[  7]   2.00-3.00   sec   229 MBytes  1.92 Gbits/sec                  
[SUM]   2.00-3.00   sec   449 MBytes  3.76 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   3.00-4.00   sec   201 MBytes  1.69 Gbits/sec                  
[  7]   3.00-4.00   sec   244 MBytes  2.05 Gbits/sec                  
[SUM]   3.00-4.00   sec   445 MBytes  3.73 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   4.00-5.00   sec   242 MBytes  2.03 Gbits/sec                  
[  7]   4.00-5.00   sec   218 MBytes  1.83 Gbits/sec                  
[SUM]   4.00-5.00   sec   460 MBytes  3.87 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   5.00-6.00   sec   254 MBytes  2.13 Gbits/sec                  
[  7]   5.00-6.00   sec   196 MBytes  1.65 Gbits/sec                  
[SUM]   5.00-6.00   sec   450 MBytes  3.78 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   6.00-7.00   sec   213 MBytes  1.79 Gbits/sec                  
[  7]   6.00-7.00   sec   217 MBytes  1.82 Gbits/sec                  
[SUM]   6.00-7.00   sec   431 MBytes  3.61 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   7.00-8.00   sec   206 MBytes  1.73 Gbits/sec                  
[  7]   7.00-8.00   sec   237 MBytes  1.99 Gbits/sec                  
[SUM]   7.00-8.00   sec   443 MBytes  3.72 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   8.00-9.00   sec   183 MBytes  1.53 Gbits/sec                  
[  7]   8.00-9.00   sec   204 MBytes  1.71 Gbits/sec                  
[SUM]   8.00-9.00   sec   387 MBytes  3.24 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   9.00-10.00  sec   195 MBytes  1.64 Gbits/sec                  
[  7]   9.00-10.00  sec   243 MBytes  2.04 Gbits/sec                  
[SUM]   9.00-10.00  sec   439 MBytes  3.67 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]  10.00-10.98  sec   209 MBytes  1.80 Gbits/sec                  
[  7]  10.00-10.98  sec   237 MBytes  2.04 Gbits/sec                  
[SUM]  10.00-10.98  sec   446 MBytes  3.84 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-10.98  sec  0.00 Bytes  0.00 bits/sec                  sender
[  5]   0.00-10.98  sec  2.27 GBytes  1.78 Gbits/sec                  receiver
[  7]   0.00-10.98  sec  0.00 Bytes  0.00 bits/sec                  sender
[  7]   0.00-10.98  sec  2.38 GBytes  1.86 Gbits/sec                  receiver
[SUM]   0.00-10.98  sec  0.00 Bytes  0.00 bits/sec                  sender
[SUM]   0.00-10.98  sec  4.65 GBytes  3.64 Gbits/sec                  receiver


客户端
[root@node03 ~]# iperf3 -c 10.0.0.52 -i 10 -f M -n 5000000000 -P 2
Connecting to host 10.0.0.52, port 5201
[  4] local 10.0.0.53 port 39662 connected to 10.0.0.52 port 5201
[  6] local 10.0.0.53 port 39664 connected to 10.0.0.52 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-10.00  sec  2.08 GBytes   213 MBytes/sec  245    641 KBytes       
[  6]   0.00-10.00  sec  2.16 GBytes   221 MBytes/sec  248    819 KBytes       
[SUM]   0.00-10.00  sec  4.24 GBytes   434 MBytes/sec  493             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]  10.00-10.94  sec   201 MBytes   215 MBytes/sec    0    834 KBytes       
[  6]  10.00-10.94  sec   229 MBytes   244 MBytes/sec    0    997 KBytes       
[SUM]  10.00-10.94  sec   430 MBytes   460 MBytes/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.94  sec  2.28 GBytes   213 MBytes/sec  245             sender
[  4]   0.00-10.94  sec  2.27 GBytes   213 MBytes/sec                  receiver
[  6]   0.00-10.94  sec  2.38 GBytes   223 MBytes/sec  248             sender
[  6]   0.00-10.94  sec  2.38 GBytes   223 MBytes/sec                  receiver
[SUM]   0.00-10.94  sec  4.66 GBytes   436 MBytes/sec  493             sender
[SUM]   0.00-10.94  sec  4.65 GBytes   436 MBytes/sec                  receiver

iperf Done.

可以看到传输时间减少了2s,传输速率上也提高到436 MBytes/sec

测试UDP传输丢包和延迟

iperf可以用于UDP协议的数据包传输测试,但由于UDP协议是非面向连接协议,不提供可靠的传输服务,对UDP传输不关注传输速度,只关注丢包率和延迟。

使用-u选项测试UDP协议

客户端结果展示

[root@node03 ~]# iperf3 -c 10.0.0.52 -u -b 100M -f M -i 3
Connecting to host 10.0.0.52, port 5201
[  4] local 10.0.0.53 port 52036 connected to 10.0.0.52 port 5201
[ ID] Interval           Transfer     Bandwidth       Total Datagrams
[  4]   0.00-3.00   sec  34.8 MBytes  11.6 MBytes/sec  25210  
[  4]   3.00-6.00   sec  35.9 MBytes  12.0 MBytes/sec  25962  
[  4]   6.00-9.00   sec  35.6 MBytes  11.9 MBytes/sec  25814  
[  4]   9.00-10.00  sec  12.0 MBytes  12.0 MBytes/sec  8658 
- - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-10.00 sec 118 MBytes 11.8 MBytes/sec 0.103 ms 0/85644 (0%) [ 4] Sent 85644 datagrams iperf Done.

我们重点关注虚线以下内容

Jitter        表示抖动时间或者网络延迟
Lost/Total    分别表示丢包数量和总数据包数量,百分数表示平均丢包比率
Datagrams     总的数据包数量

下面是服务端结果

Server listening on 5201
-----------------------------------------------------------
Accepted connection from 10.0.0.53, port 39666
[  5] local 10.0.0.52 port 5201 connected to 10.0.0.53 port 52036
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  5]   0.00-1.00   sec  11.1 MBytes  92.9 Mbits/sec  0.018 ms  0/8021 (0%)  
[  5]   1.00-2.00   sec  11.8 MBytes  99.4 Mbits/sec  0.119 ms  0/8581 (0%)  
[  5]   2.00-3.00   sec  11.9 MBytes  99.7 Mbits/sec  0.018 ms  0/8608 (0%)  
[  5]   3.00-4.00   sec  11.9 MBytes   100 Mbits/sec  0.018 ms  0/8635 (0%)  
[  5]   4.00-5.00   sec  12.0 MBytes   101 Mbits/sec  0.098 ms  0/8702 (0%)  
[  5]   5.00-6.00   sec  11.9 MBytes   100 Mbits/sec  0.017 ms  0/8625 (0%)  
[  5]   6.00-7.00   sec  11.8 MBytes  99.1 Mbits/sec  0.094 ms  0/8562 (0%)  
[  5]   7.00-8.00   sec  12.0 MBytes   101 Mbits/sec  0.018 ms  0/8710 (0%)  
[  5]   8.00-9.00   sec  11.8 MBytes  99.0 Mbits/sec  0.020 ms  0/8542 (0%)  
[  5]   9.00-10.00  sec  12.0 MBytes   100 Mbits/sec  0.103 ms  0/8658 (0%)  
[  5]  10.00-10.04  sec  0.00 Bytes  0.00 bits/sec  0.103 ms  0/0 (0%)  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  5]   0.00-10.04  sec  0.00 Bytes  0.00 bits/sec  0.103 ms  0/85644 (0%)  
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

 

对于丢包和延迟可以通过改变应用程序来缓解,通过增加缓存的方式可以容忍更大的延迟。

以上是关于Linux网络性能评估工具iperf CHARIOT测试网络吞吐量的主要内容,如果未能解决你的问题,请参考以下文章

Linux网络性能评估工具iperf CHARIOT测试网络吞吐量

Linux网络性能评估工具iperf CHARIOT测试网络吞吐量

【iperf】网络性能评估工具iperf的安装使用

网络性能评估工具iperf

iperf网络新能评估

网络性能测试工具iperf的使用与参数解析