本节自序来自华章计算机《高性能Linux服务器建立实战:系统安全、故障排查、自动化运维与集群构架》一书中的第2章,第2.3节,作者:高俊峰著,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
2.3网路性能评估工具iperf
网路性能评估主要是检测网路带宽的使用率,将网路带宽借助最大化是保证网路性能的基础,并且因为网路设计不合理、网络存在安全漏洞等诱因,就会引起网路带宽借助率低。要找到网路带宽借助率低的缘由,可以对网路传输进行监控,此时就须要用到一些网路性能评估工具,而iperf就是这样一个网路带宽测试工具,本节将详尽介绍iperf的使用方法。
2.3.1iperf能做哪些
iperf是一个基于TCP/IP和UDP/IP的网路性能测试工具,它可以拿来检测网路带宽和网路质量,还可以提供网路延后晃动、数据包遗失率、最大传输单元等统计信息。网路管理员可以按照这种信息了解并判定网路性能问题,因而定位网路困局,解决网路故障。
下边介绍iperf的主要功能。
(1)TCP方面
测试网路带宽。
支持多线程,在顾客端与服务器端支持多重联接。
报告MSS/MTU值的大小。
支持TCP窗口值自定义并可通过套接字缓冲。
(2)UDP方面
可以设置指定带宽的UDP数据流。
可以测试网路晃动值、丢包数。
支持多播测试。
支持多线程,在顾客端与服务器端支持多重联接。
2.3.2iperf的安装与使用
iperf可以运行在任何IP网路上,包括本地以太网、接入因特网、Wi-Fi网路等。在工作模式上,iperf运行于服务器端、客户端模式下,其服务器端主要用于窃听抵达的测试恳求,而顾客端主要用于发起联接会话,因而要使用iperf,须要两台服务器,一台运行在服务器模式下,另一台运行在顾客端模式下。
1.安装iperf
iperf支持Win32、Linux、FreeBSD、MacOSX、OpenBSD和Solaris等多种操作系统平台。读者可以从iperf官方网站:下载各类版本,目前最新的版本是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的命令行选项共分为三类,分别是顾客端与服务器端公用选项、服务器端专用选项和顾客端专用选项,下边对常用的选项进行介绍。
服务器端专用选项的含意如表2-4所示。
顾客端专用选项的含意如表2-5所示。
顾客端与服务器端公用选项的含意如表2-6所示。
2.3.3iperf应用实例
要使用iperf,首先启动一个服务器端,这儿假设服务器端的IP地址为192.168.12.168,在此服务器上运行“iperf3-s”即可开启iperf的服务器端模式。在默认情况下,iperf3将在服务器端打开一个5201窃听端口,此时就可以将另一台服务器作为顾客端执行iperf功能测试。
1.测试TCP吞吐量
为了确定网卡的最大吞吐量,可以在任意顾客端运行iperf命令,iperf将尝试从顾客端尽可能快地向服务器端发送数据恳求,而且会输出发送的数据量和网卡平均带宽值。图2-14展示了通过一个最简单的带宽测试命令的输出结果。
从图2-14可以看出,iperf默认的运行时间是10s,每隔1s输出一次传输状态,同时还可以见到每秒传输的数据量在112MB左右,正好与“Bandwidth”列的值对应上去,网卡的带宽速度维持在941Mbits/sec左右,而测试的服务器是百兆网卡,这个测试值也基本合理。在输出的最后,iperf还给出了总的数据发送、接收量,以及带宽速度平均值,通过这种值,基本可以判定网路带宽是否正常,网路传输状态是否稳定。
iperf提供好多参数,可以多角度、全方位地测试网路带宽借助率,比如,要改变iperf运行的时间和输出频度,可以通过“-t”和“-i”参数来实现,如图2-15所示。
从图2-15可以看出,输出状态的间隔变为每5s一次,总共执行测试时间为20s,测试的带宽速度始终保持在941Mbits/sec左右,惟一变化的是失败重传次数降低了。
为了模拟大量的数据传输,也可以指定要发送的数据量,这可以通过“-n”参数来实现。在指定“-n”参数后,“-t”参数失效,iperf在传输完毕指定大小的数据包后linux设置环境变量,手动结束linux下socket编程,如图2-16所示。
图2-16的事例是指定发送一个5GB左右的数据包,但是每隔10s输出一次传输状态,从这个输出可以看出,当失败重传次数较多时,传输速度飞速增长。
有时侯,为了模拟更真实的TCP应用,iperf顾客端容许从一个特定的文件发送数据,这可以通过“-F”参数实现,如图2-17所示。
在图2-17的事例中,通过“-F”参数指定了一个webdata.tar.gz文件作为iperf要传输的数据。在使用此参数时,须要同时指定一个“-t”参数来设置要测试传输的时间高性能linux服务器构建实战:运维监控、性能调优与集群应用,这个时间尽量设置长一些,由于在默认传输时间10s内,这个文件可能还没有传完。
在使用iperf进行网路带宽测试时,假若没有指定发送方法,iperf顾客端只会使用单一的线程,而iperf是支持多线程的,可以使用iperf提供的“-P”参数来设置多线程的数量,通过使用多线程,可以在一定程度上降低网路的吞吐量。
下边通过两个反例进行简单对比,图2-18是iperf使用单线程传输1.86GB数据所消耗的时间和带宽使用情况。为了速度单位统一,这儿使用“-f”参数将输出结果都通过MBytes/sec来显示。
从图2-18中可以看出,传输1.86GB的数据消耗了17s的时间,平均带宽速度为112MBytes/sec(注意单位)。下边再瞧瞧使用多线程后,iperf传输同样大小数据量所消耗的时间和平均带宽速度,如图2-19所示。
这儿通过“-P”参数开启了2个多线程,从传输时间上看,传输1.86GB的数据,消耗时间为10.79s,比之前单线程的传输时间少了近7s,在平均带宽速度上,从之前单线程的112MBytes/sec提升到177MBytes/sec,从这个结果可以看出,多线程对网路传输性能的提升不小。
2.测试UDP丢包和延后
iperf也可以用于UDP数据包吞吐量、丢包率和延后指标,并且因为UDP合同是一个非面向联接的轻量级传输合同,但是不提供可靠的数据传输服务,因而对UDP应用的关注点不是传输数据有多快,而是它的丢包率和延时指标。通过iperf的“-u”参数即可测试UDP应用的传输性能,图2-20测试的是在iperf顾客端传输100MB的UDP数据包的输出结果。
在图2-20中,重点关注实线下的一段内容,在这段输出中,“Jitter”列表示晃动时间,或则称为传输延后,“Lost/Total”列表示遗失的数据包和总的数据包数目,前面的0.33%是平均丢包的百分比,“Datagrams”列显示的是总共传输数据包的数目。
这个输出结果过分简单,要了解更详尽的UDP丢包和延时信息,可以在iperf服务端查看,由于在顾客端执行传输测试的同时,服务器端也会同时显示传输状态,如图2-21所示。
在这个输出中,详尽记录了在传输过程中高性能linux服务器构建实战:运维监控、性能调优与集群应用,每位阶段的传输延时和丢包率,在UDP应用中随着传输数据的减小,丢包率和延时也骤然降低。对于延时和丢包可以通过改变应用程序来减缓或修补,比如视频流应用,通过缓存数据的方法可以容忍更大的延时。
文章评论