【浪潮信息KeyarchOS (KOS)】手把手教你玩转Iperf:从零配置到常见网络测试场景操作实战

目录

1 概述

2 工具优点

3 安装准备

3.1 操作系统环境

3.2 软件版本

4 编译安装

5 工具功能介绍

6 常用测试场景

6.1 测试TCP

6.2 测试UDP

7 结果分析

7.1 结果指标

7.2 结果数据整理

7.3 结果数据分析

8 最佳实践

8.1 TCP最佳实践

8.2 UDP最佳实践


1 概述

浪潮信息KOS是浪潮信息基于Linux Kernel、OpenAnolis等开源技术自主研发的一款服务器操作系统,支持x86、ARM等主流架构处理器,性能和稳定性居于行业领先地位,具备成熟的 CentOS 迁移和替换能力,可满足云计算、大数据、分布式存储、人工智能、边缘计算等应用场景需求。详细介绍见官网链接https://www.ieisystem.com/kos/product-kos-xq.thtml?id=12126

iPerf - TCP、UDP 和 SCTP 的终极速度测试工具。常用的的网络限制 + 互联网中立性测试工具。被广为认可。目前有2.0、3.0和3.1版本,3.0最为常用,3.0支持大部分2.0的内容,并在其基础上新增了很多功能,我们这篇文章主要来讲一下iperf3.0。

iperf3是iperf的3.0版本,是一款网络性能测试工具,可以测试最大TCP和UDP带宽性能。使用Iperf3测试时必须将一台主机设置为客户端,一台主机设置为服务器。

iperf3测试TCP带宽的原理比较简单,在客户端和服务端建立三次握手连接后,客户端带宽的大小等于发送的总数据除以发送的总时间。对服务端测得的带宽,则是接收的总数据除以所花时间。

iperf3测试UDP性能时,客户端可以指定UDP数据流的速率。客户端发送数据时,将根据客户端提供的速率计算数据报发送之间的时延。

客户端还可以指定发送数据报的大小。每个发送的数据报包含一个ID号,用来唯一标识报文,服务器端根据该ID号来确定数据报丢失和乱序。

当把UDP报文大小设置可以将整个报文放入IP层的包(packet)内时,那么UDP所测得的报文丢失数据即为IP层包的丢失数据,这提供了一个有效的测试包丢失情况的方法。

数据报传输延迟抖动 (Jitter)的测试由服务器端完成,客户发送的报文数据包含有发送时间戳,服务器端根据该时间信息和接收到报文的时间戳来计算传输延迟抖动。传输延迟抖动反映传输过程中是否平滑。由于它是一个相对值,所以并不需要客户端和服务器端时间同步。

2 工具优点

iperf3具有多种参数和UDP特性,可以根据需要调整。Iperf3可以报告带宽,延迟抖动和数据包丢失。相较于iperf2,iperf3增加了许多内容,所以常用来做性能测试。

iPerf 3.0 的新功能:

动态服务器(客户端/服务器参数交换) – iPerf2 中的大多数服务器选项现在都可以由客户端动态设置

客户端/服务器结果交换

iPerf3 服务器同时接受单个客户端(iPerf2 同时接受多个客户端)

iPerf API (libiperf) – 提供一种使用、自定义和扩展 iPerf 功能的简单方法

-R,反向测试模式 – 服务器发送,客户端接收

-O, --omit N :省略前 n 秒(忽略 TCP 慢启动)

TCP 为 -b, --bandwidth n[KM](IPERF 2 仅为 UDP):将目标带宽设置为 n 位/秒(UDP 默认为 1 Mbit/秒,TCP 无限制)。

-V, --verbose :比以前更详细的输出

-J, --json :JSON 格式的输出

-Z, --zerocopy :使用“零复制”sendfile() 方法发送数据。这使用的 CPU 要少得多。

-T, --title str :在每个输出行前加上此字符串的前缀

-F, --file name : xmit/recv 指定的文件

-A, --affinity n/n,m : 设置 CPU 亲和力(内核编号从 0 - 仅限 Linux 和 FreeBSD)

-k, --blockcount #[KMG] :要传输的块数(数据包)(而不是 -t 或 -n)

-4, --version4 : 仅使用 IPv4

-6, --version6 : 仅使用 IPv6

-L, --flowlabel : 设置 IPv6 流标签(仅限 Linux)

-C, --linux-congestion : 设置拥塞控制算法(仅限 Linux 和 FreeBSD)(iPerf2 中的 -Z)

-d, --debug :发出调试输出。主要(也许是唯一)供开发人员使用。

-s, --server :iPerf2 可以处理多个客户端请求。iPerf3 一次只允许一个 iperf 连接

3 安装准备

3.1 操作系统环境

操作系统版本:KOS 5.8 sp2u1(5.10.134-17.2.2.kos5.x86_64)

测试架构:x86_64,8核4G虚拟机

3.2 软件版本

Iperf 3.0.6

4 编译安装

下载iperf3安装包(双击蓝色方块即可下载)

解压:tar -zxvf 【安装包】

在解压出来的文件夹中打开终端,执行下列指令进行编译安装:

./configure && make && make install

5 工具功能介绍

iperf3常用参数如表1所示:

表1 iperf3参数

Command line option (命令行参数)Description(描述说明)
-p, --port n1、服务端:服务端监听的端口,默认5201端口,同时监听TCP/UDP2、客户端:客户端去连接的端口,默认5201,如果同时有-u参数,则用UDP发起连接,如果没有,则默认使用TCP连接)使用方式:iperf3 -s -p 6666, 在6666端口监听iperf3 -c 192.168.0.1 -p 6666, 去连接服务端的6666端口
--cport n本参数提供了一个指定客户端本地端口的选项,区分于-p指定的是服务端的远端端口使用方式:iperf3 -s --cport 8888, 在服务端指定客户端本地端口只能是8888? 从测试结果看,这个选项在服务端不起任何作用,但执行命令不会报错iperf3 -c 192.168.0.1 --cport 8888,指定客户端选择本地端口为8888
-f, --format [kmKM]指定打印测试结果的带宽(bitrate比特率这一列)时用什么格式显示:k表示:千比特/秒, K表示:千字节/秒, m表示:兆比特/秒, K表示:兆字节/秒。客户端和服务端可以用不同的参数,各自按照各自指定的方式打印出带宽测试结果使用方式:iperf3 -s -f Miperf3 -c 192.168.0.1 -f k
-i, --interval n以秒为单位,设置带宽(还有抖动,丢包等)测试报告打印输出的周期。不使用这个选项时,默认周期是1秒,可以使用0和任何0.1秒到60秒之间的参数,如果是0表示不打印周期性的报告,只在整个测试完成时,输出一次报告结果。使用方式:iperf3 -s -i 0iperf3 -c 192.168.0.1 -i 3.6
-F, --file name客户端:从文件中读取数据,并发送到网络里,如果不加这个选项默认系统会产生随机数据发送到网络里服务端:把网络上收到的数据写入文件中,默认系统会丢弃收到的数据文件格式未知,在google上也找不到什么说明,待后续更新()使用方式:iperf3 -s -F ./log.txtiperf3 -c 192.168.0.1 -F ./input.txt
-A, --affinity n/n,m-F客户端和服务端都可以设置CPU亲和性,n表示CPU编号(Linux下如何查看CPU编号及其它CPU相关的信息)。此外在客户端可以通过"-A n,m"的形式,覆盖server端的CPU亲和性设置(就是覆盖运行server端时,指定运行在哪个CPU上的设置),指定本次运行时iperf3的服务端跑在m号CPU上,但只对这一次运行生效。注意如果用了这个参数,意味着iperf3只会在指定的CPU上运行(默认不加这个参数时,操作系统会自行调度CPU,负荷重(加多线程?)有可能会把iperf3同时运行在多个CPU上)使用方式:iperf3 -s -A 2,指定服务端运行在2号CPU上iperf3 -c 192.168.0.1 -A 0,指定客户端运行在0号CPU上或者iperf3 -c 192.168.0.1 -A 0,3,指定本次运行客户端运行在0号CPU上而服务端运行在2号CPU上
-B, --bind host绑定到主机,主机的一个地址。对客户端来说,这个设置数据发送从哪个接口发送。对服务端来说,这是设置数据从哪个接口接收。这个命令只在多宿主主机(二个或者二个以上网络接口)中有用。
-V, --verbose输入更多的详细信息
-J, --json运行结束时,用JSON的格式输出测试结果,默认打印到屏幕上,可以结合下面"--logfile"或者linux本身的重定向命令">"将输出报告打印到指定文件里
--logfile file把测试结果存到指定的log文件
-d, --debug打印出更多的调试用的log,主要是给开发者用的,如果不是碰到需要调试的问题,这个参数基本没什么用。
-v, --version只要加了-v这个参数,iperf3会显示版本号,然后自动退出
-h, --help只要加了-h这个参数,iperf3会显示帮助信息(包括命令使用格式,各个参数的简明的使用说明),然后自动退出
SERVER SPECIFIC OPTIONS(服务器端专用参数)
Command line option (命令行参数)Description(具体描述)
-s, --server本次iperf3运行在服务端模式(-c和-s是互斥的,二者必居其一),括号里的这句话:这只允许一次一个iperf connection,是指iperf服务端同一时间只接受一个TCP或者UDP连接。意味着同一时间只有一个客户端可以给这个iperf3服务端进程打流。(但可以在通过-p参数,指定在同一个主机的同一个IP地址的不同的端口同时开多个iperf3服务端进程)使用方式:iperf3 -s
-D, --daemon以daemon的形式在后台运行(不会向控制台窗口输出,可以通过ps -aux | grep iperf3看到对应的后台进程号)和用iperf3 -s &命令(注意命令最后的&号)类似,都可以让iperf3在后台运行,但iperf3 -s &命令的话,控制台终端还是可以得到iperf3的打印输出的。但用&的后台运行,在你关闭终端时,程序也会关闭,而用-D的,则在终端关闭后,iperf3 -s会继续在后台运行。使用方式:iperf3 -s -D
-I, --pidfilefile这介需要iperf3.1以上版本才支持,提供了一个将本次运行的iperf3进程的PID写入到指定文件里的功能,正常的情况下也没啥用,大概率在将程序运行成Daemon程序,并用需要通过PID去监控,KILL或者其它控制这个进程的自动化功能时用到(原文件是这么说的,但我觉得这个指供的功能和ps -aux | grep iperf3得到的信息是一样的,对于工作在Linux下的人来说并没有什么实际意义,估计是给其它平台的工作者用的)使用方式:iperf3 -s -I /home/user/iperf.pid注意:1)当前用户一定要有/home/user目录的写权限2)文件可以事先用touch命令创建好,也可以不用创建3)iperf3当前进各结束后/home/user/iperf.pid文件会被主动删除4)/home/user/iperf.pid一定要使用全路径,不能使用默认的当前路径
Command line option (命令行参数)Description(具体描述)
-c, --client host本次iperf3运行在客户端状态,host指向的是iperf服务端的ip地址使用方式:iperf3 -c 192.168.0.10, 本机做为客户端连接到192.168.0.10(服务端运行在这人ip地址上),并做打流量测试
--sctp使用sctp协议(不加这人选项的话默认使用TCP),iperf3.1及更新的版本开始支持使用方式:iperf3 -c 192.168.0.10 --sctp
-u, --udp使用UDP协议(不加这人选项的话默认使用TCP),使用这个选项的话,还需要查看-b选项,因为UDP是面向数据报的协议,所以一般要用-b指定打多大带宽的数据(不指定-b的话,默认值见对-b参数的解释)使用方式:iperf3 -c 192.168.0.10 -u
-b, --bandwidth n[KM]设置本次测试的发送带宽成n 比特/秒(对UDP来说默认是1M 比特/秒,对TCP来说默认是不限制),如果同时还设置了多线程(-P选项),当前这个-b的带宽指定的是每个线程的发送带宽。我们还可以在带宽后面加上/和一个数字。我们称这个为“突发脉冲模式”。加了这个“/数字”后,iperf3客户端会一次连续发送指定的数量的数据包,中间不做任何间隔(不加这个 "/数字"时,iperf3会根据每个报文的长度,算出为了达到指定的带宽,每秒需要发送几个报文,然后每个数据报文会被以平均的时间间隔进行发送),即使中间会有偶尔的超出带宽限制使用方式:iperf3 -c 192.168.0.10 -u -b 100M,报文平均的落在时间线上或者iperf3 -c 192.168.0.10 -u -b 100M/40,报文以40个为一组,连续发送40个报文,每一组平均的落在时间线上,每一组发送时可能超出-b指定的带宽,但iperf3保证整个打流期间的平均带宽不超过指定值。
-t, --time n定义本次发送报文测试要持续的时间,单位为秒iPerf通常工作的模式是:持续-t定义的时间(秒)不停的重复发送一组长度为-l定义的数据包。默认值是10秒。参照-l, -k和-n选项使用方式:iperf3 -c 127.0.0.1 -u -t 11注意这个参数不能和-n或者-k同时使用,上述例子表示连续发送11秒钟时间后停止测试
-n, --num n[KM]定义本次发送报文要发送的总的数据长度,单位是字节。默认情况下iperf持续发送10秒时间。加了-n选项后,就不覆盖了10秒这个默认设置,而是发送-n指定长度的数据,发送完后停止。参照-l,-k和-t选项使用方式:iperf3 -c 127.0.0.1 -u -n 40M注意这个参数不能和-t或者-k同时使用,长度后面不带单位的话默认单位是字节,也可以用K/M表示千/兆字节,上述例子表示总共要发送40M字节的报文
-k, --blockcount n[KM]定义本次发送报文要发送的报文个数。发送-k指定个数的报文,发送完后停止。参照-l,-n和-t选项使用方式:iperf3 -c 127.0.0.1 -u -k 37注意这个参数不能和-t或者-n同时使用,上面例子表示总共要发送37个报文
-l, --length n[KM]每次发报的报文长度。iperf发送一组长度为-l指定的数据报文,每个数据报文的长度都是-l指定的长度。默认TCP是128KB, UDP是8KB。参照-n, -k和-t选项。使用方式:iperf3 -c 192.168.3.15 -u -l 2K注意: 这个参数可以和-n, -k和-t参数一起使用。
-P, --parallel n到iperf3服务器端并行的连接数量,默认值是1。使用方式:iperf3 -c 192.168.3.15 -u -P 3
-R, --reverse工作在反向连接模式(服务器端发送,客户端接收)使用方式:iperf3 -c 192.168.3.15 -u -R
-w, --window n[KM]设置socket缓冲的大小。对TCP来说,这个用于设置 TCP 窗口接收的大小(这个选项会被发送到服务器端,同样的参数会在服务器端生效)iperf3 -c 192.168.3.15 -w 100k对于UDP来说,通常不需要设置这个参数,这个数设置得太小了,会导致发送端发送速度慢,对于TCP来说,这个参数的设置值的计算和选择方法详见:TCP滑动窗口协议与窗口大小的计算。
-M, --set-mss n尝试去设置TCP的MSS最大分片长度。MSS通常是MTU减去40字节的TCP/IP首部。对以达网来说MSS是1460(MTU是1500字节)使用方式:iperf3 -c 192.168.3.15 -M 100MSS设置得很小,会导致TCP分成很多个小包进行发送,过小会导致带宽测试结果偏小。
-N, --no-delay设置TCP的不延时选项,关闭Nagle's算法,通常这个选项只用于交互式人机对话的应用程序中,比如Telnet使用方式:iperf3 -c 192.168.3.26 -N
-4, --version4只使用IPv4
-6, --version4只使用IPv6, 注意这个要配合IPv6的地址一起使用
-S, --tos n设置被发送出去的报文的TOS字段。(目前很多路由器是不处理TOS字段的),可以用0x打头输入16进制数,0打头输入8进制数,或者不需要前缀则默认是10进制数。比如: 16进制的"0x10"表示8进制的"020"表示十进制的16。TOS定义如下: IPTOS_LOWDELAY 最小延时 0x10 IPTOS_THROUGHPUT 最大带宽 0x08 IPTOS_RELIABILITY 可靠性最好 0x04 IPTOS_LOWCOST 最便宜 0x02使用方式:iperf3 -c 192.168.3.15 -S 0x10
-L, --flowlabel n设置IPv6的流标签(目前只有Linux版本的iperf3能支持
-Z, --zerocopy使用“零拷贝”办法来发送数据,比如使用sendfile(2)代替write(2).这会减少CPU的占用率使用方式iperf3 -c 192.168.3.15 -u -Z
-O, --omit n忽略最前面n秒的测试结果,通常用来跳过TCP慢启动过程使用方式:iperf3 -c 192.168.3.15 -O 20 -t 40忽略最前面的20秒,然后再打40秒的流(见-t参数)
-T, --title str每行打印输出内容前加一个前缀使用方式:iperf3 -c 192.168.3.15 -T 这是前缀在每行输入前面加了“这是前缀”这4个字
-C, --linux-congestion algo设置TCP拥塞控制算法(在LINUX上3.0以上支持,在LINUX和FREEBSD上3.1以下版本支持)

6 常用测试场景

6.1 测试TCP

TCP上行测试:

在服务端运行 iperf3 命令启动服务端:iperf3 -s

图 1 服务端tcp效果

在客户端运行 iperf3命令:iperf3 -c 100.2.252.240 -i 1 -t 10

#作为客户端,连接服务端ip地址100.2.252.240,报告回显间隔1s,测试时间10s

图 2 客户端tcp效果

TCP下行测试:

在服务端运行 iperf3 命令启动服务端:iperf3 -s

图 1 服务端tcp效果

在客户端运行 iperf3命令:iperf3 -c 100.2.252.193 -i 1 -t 10 -R

#作为客户端,连接服务端ip地址100.2.252.193,报告回显间隔1s,测试时间10s

-R为反向测试,这个参数也是iperf3的主要亮点,支持直接转换数据发送方向

6.2 测试UDP

UDP上行测试:

在服务端运行iperf3,输入命令iperf3 –s

图 3 服务端udp效果

在客户端运行iperf3,运行于 UDP模式,输入命令iperf3 -u -c server-ip -i 1 -t 10

#作为客户端,连接服务端ip地址100.2.252.240,报告回显间隔1s,测试时间10s

图 4 客户端udp效果

UDP下行测试:

在服务端运行iperf3,输入命令iperf3 –s

图 3 服务端udp效果

在客户端运行iperf3,运行于 UDP模式,输入命令iperf3 -u -c 100.2.252.193 -i 1 -t 10 -R

#作为客户端,连接服务端ip地址100.2.252.240,报告回显间隔1s,测试时间10s

7 结果分析

iperf3结果数据含义如表2所示:

表2 数据指标

结果含义
Interval表示时间间隔
Transfer表示时间间隔里面传输的数据量。
Bandwidth表示时间间隔里的传输速率
Retr表示重传的数量
Jitter表示抖动
lost/total表示丢包数量
Datagrams表示包数量

7.1 结果指标

iperf3结果数据含义如表2所示:

表2 数据指标

结果含义
Interval表示时间间隔
Transfer表示时间间隔里面传输的数据量。
Bandwidth表示时间间隔里的传输速率
Retr表示重传的数量
Jitter表示抖动
lost/total表示丢包数量
Datagrams表示包数量

7.2 结果数据整理

测试五次,取平均值。TCP模式下主要是整理其传输的带宽:输出结果中的Bitrate值;UDP模式下主要整理其丢包情况及抖动情况:Lost/Total及jitter值。

7.3 结果数据分析

TCP模式下观察传输过程中带宽稳定情况及平均带宽大小是否符合当前网络额定带宽大小(例如:万兆网卡平均传输速率一般在9.4G左右;千兆网卡在940M左右);UDP模式下分析丢包率及抖动原因。

若网络带宽较小,可以排查是否存在服务端CPU压力过高等问题;丢包率和抖动方面可以从网卡MTU的大小、网卡队列情况等方面分析。(仅供参考,具体情况请依据实际表现分析)

8 最佳实践

8.1 TCP最佳实践

服务端:nuamctl -C 0 -m 0 iperf3 -s

cat /proc/interrupts查看当前网卡中断分布位置:

图 5 查看中断分布情况

绑定网卡硬中断至某个core,具体流程如下:

systemctl stop irqblance.service 中止中断均衡服务

echo X > /proc/irq/Y/smp_affinity_list X代表需要指定的core,Y代表需要绑定的中断号--将硬中断绑定在指定core上

客户端:nuamctl -C 2 -m 0 iperf3 -c serverIP -i 1 -t 30 客户端起任务进程至非绑定中断的core上,效果图如下所示

图 6 绑核绑中断后效果

注:因本次实验是在虚拟机上进行,若后续使用直连的方式进行测试可考虑以下几种方式是否影响网络带宽。

更改网卡mtu值:ifconfig 网口名 mtu 1500

调整ring buffer缓冲区:sysctl -w net.core.wmem_max=4096

查看是否存在丢包现象:ifconfig 网口名

查看网卡队列:ethtool -g 网口名

8.2 UDP最佳实践

服务端:nuamctl -C 0 -m 0 iperf3 -s

客户端:numactl -C 0 -m 0 iperf3 -c severip -u -P 125 -b 10G -t 60 -l 50120

图 7 客户端效果

注:因本次实验是在虚拟机上进行,若后续使用直连的方式进行测试可考虑以下几种方式是否影响网络带宽。

在直连环境中,万兆网卡UDP可达到10G左右,若未达到此带宽可增加UDP端口连接数即更改-P后的参数。

更改网卡mtu值:ifconfig 网口名 mtu 1500

UDP协议测试中,丢包是正常现象但丢包率不应超过5%。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值