任务目的
1、 掌握iPerf的功能和基本命令,利用iPerf测试主机之间的吞吐量,熟悉基本命令参数的作用,为后期实验做准备。
2、 掌握Netperf的功能和基本命令,能够根据不同的测试需求使用不同的命令参数。
任务环境
设备名称 | 软件环境(镜像) | 硬件环境 |
---|---|---|
控制器 | Floodlight 1.0桌面版 | CPU:1核 内存:2G 磁盘:20G |
交换机 | Open vSwitch 2.3.1命令行版 | CPU:1核 内存:2G 磁盘:20G |
主机 | Ubuntu14.04命令行版 | CPU:1核 内存:2G 磁盘:20G |
注:系统默认的账户为root/root@openlab,openlab/user@openlab。
任务内容
1、 使用 iPerf测试SDN网络的性能,熟悉iPerf常用的测试命令。
2、 使用Netperf测试SDN网络的性能,熟悉Netperf常用的测试命令。
3、 总结Netperf与iPerf的不同之处。
实验原理
在构建或管理一个网络系统时,除了关心网络的可用性,也要注意其整体的性能,这时就要用合适的工具对网络的各项性能进行测试。iPerf和Netperf是用于衡量网络性能的测试工具,本实验将对这两款工具进行具体介绍。
一、 iPerf工具
iPerf 是一种网络性能测试工具,可以运行于Linux、BSD、Unix及Windows等操作系统。 iPerf具有多种参数和特性,支持协议、定时、缓冲区等参数的配置调整,能够测试TCP/UDP最大带宽、延迟抖动、数据包丢失等统计信息,可以根据需求采用不同的参数从而达到不同的测试目的。iPerf基于Server/Client的工作模式,如下图所示。
客户端向服务端发送一定数量的数据,服务端统计并记录带宽、延时抖动等信息。客户端将数据全部发送后,服务端会回复一个数据包给客户端,将测试数据反馈给客户端。不过,如果网络较为拥塞或者误码率较高,客户端无法收到服务端回复的数据包,则只能显示本地记录的部分测试结果,所以服务端和客户端的测试结果可能有所不同。iPerf命令语法格式和参数解释如下:
1、 命令格式:
iperf [-s|-c host] [options]
3、 参数配置如下表所示:
表 1 客户端/服务器端通用参数
参数 | 作用 |
---|---|
-f/--format | [kmKM]分别表示以Kbits, Mbits, KBytes, MBytes显示报告,默认以Mbits为单位 |
-i/--interval | 以秒为单位显示报告间隔 |
-l/--len | 读写的缓冲区大小,默认8KB |
-m/--print_mss | 打印最大的TCP数据段大小 (MTU - TCP/IP header) |
-o/--output | 将报告和错误信息输出到指定文件 |
-p/--port | 指定服务器端使用的端口或客户端所连接的端口 |
-u/--udp | 使用udp协议 |
-w/--window | 指定TCP窗口(socket缓冲区)大小,默认是8KB |
-B/--bind | 绑定一个主机地址或接口 |
-C/--compatibility | 兼容旧版本(当server端和client端版本不一样时使用) |
-M/--mss | 设置TCP最大数据段大小(MTU - 40 bytes) |
-N/--nodelay | 设置无延迟TCP,禁用 Nagle’s Algorithm |
-V/--IPv6Version | 设置传输Ipv6数据包 |
表 2. 服务器端参数
参数 | 作用 |
---|---|
-s/--server | |
-U/-- single_udp | 单线程UDP模式下运行 |
-D/-- daemon | 以守护进程模式运行服务器 |
表 3. 客户端参数
参数 | 作用 |
---|---|
-b/-- bandwidth | 对于UDP,使用bits/sec (默认 1 Mbit/sec, 亦即 -u)传送带宽 |
-c/-- client | 运行为客户端,连接到“主机” |
-d/-- dualtest | 同步进行双向测试 |
-n/-- num | 传输的字节量 |
-r/-- tradeoff | 分别进行双向测试 |
-t/-- time | 传输持续时间 (默认10 secs) |
-F/-- fileinput | 从文件中读取要传输的数据 |
-I/-- stdin | 从标准输入(stdin)中读取要传输的数据 |
-L/-- listenport | 双向测试接受端口 |
-P/-- parallel | 并行客户线程数量 |
-T/-- ttl | 多点传送的生存时间(默认1) |
二、Netperf工具
Netperf是一种网络性能测量工具,主要用于测试TCP或UDP和Berkeley套接字接口的批量数据传输(bulk data transfer)和请求/应答(request/reponse)性能。Netperf工具以Client/Server方式工作,如下图所示。
服务端是netServer,用来侦听来自客户端的连接,客户端是netperf,用来向服务发起网络测试。在客户端与服务端之间,首先建立一个控制连接,传递有关测试配置的信息,以及测试的结果。在控制连接建立并传递了测试配置信息以后,客户端与服务端之间会再建立一个测试连接,用于来回传递特殊的流量,以测试网络的性能。当netServer在服务端启动后,就可在客户端运行netperf来测试网络的性能。netperf通过命令行参数来控制测试的类型和具体的测试选项,根据作用范围的不同,netperf的命令行参数可以分为两大类:全局命令行参数和测试相关的局部参数,两者之间使用—分隔。Netperf命令语法格式和参数解释如下:
1、 命令格式:
netperf [global options] —[test-specific options]
2、 [global options]可选参数,可选的参数有如下几个:
表 4. 全局命令行参数
参数 | 作用 |
---|---|
-H host | 指定远端运行netserver的server IP地址 |
-l testlen | 指定测试的时间长度(秒) |
-t testname | 指定进行的测试类型(TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,UDP_RR) |
3、 [test-specific options] 可选参数,可选的参数有如下几个:
表 5. 测试相关的局部参数
参数 | 作用 |
---|---|
-s size | 设置本地系统的socket发送与接收缓冲大小 |
-S size | 设置远端系统的socket发送与接收缓冲大小 |
-m size | 设置本地系统发送测试分组的大小 |
-M size | 设置远端系统接收测试分组的大小 |
-D | 对本地与远端系统的socket设置TCP_NODELAY选项 |
-r req,resp | 设置request和reponse分组的大小 |
四、 网络性能指标
学习网络性能测试工具不仅要掌握基本使用方法,还要学会分析测试结果,所以常见的网络性能参数一定要如数家珍。
1、 网络吞吐量:单位时间内通过某个网络(信道或接口)的数据量,吞吐量受网络的带宽或者网络的额定速率限制,单位通常表示为bit/s或bps。
2、 网络延时:一个数据包从用户的计算机发送到网站服务器,然后再立即从网站服务器返回用户计算机的来回时间。影响网络延时的主要因素是路由的跳数和网络的流量。交换机延时(Latency)是指从交换机接收到数据包到开始向目的端口复制数据包之间的时间间隔。有许多因素会影响交换机延时大小,比如转发技术等等。
3、 抖动:用于描述包在网络中的传输延时的变化,抖动越小,说明网络质量越稳定越好。抖动是评价一个网络性能的最重要的因素。
4、 丢包率:理想状态下是发送了多少数据包就能接收到多少数据包,但是由于信号衰减、网络质量等诸多因素的影响并不能达到理想状态,而丢包率就是指测试中所丢失的数据包数量占所发送的数据包的比率。
五、 iPerf和Netperf比较
iPerf和Netperf都是开源软件,都可以支持TCP、UDP协议,可以指定端口号、指定TCP发送缓冲区大小、指定测试时间,都可以禁用Nagle’s算法。以下是进行的一些简单比较:
比较项 | iPerf | Netperf |
---|---|---|
支持多线程 | 是 | 是 |
可以设置服务器关闭之前保持的连接数 | 是 | 否 |
支持多播 | 是 | 否 |
支持除TCP、UDP之外的协议 | 否 | 是 |
支持IPv6 | 一定程度上 | 是 |
可以输出TCP MSS值 | 是 | 否 |
设置测试分组大小 | 否 | 是 |
支持多种测试范式 | 否 | 是 |
实验步骤
一、 实验环境检查
步骤1 以root用户登录交换机,执行如下命令初始化OVS。
#cd /home/fnic #./ovs_init
步骤2 登录主机1,执行ifconfig命令查看主机1的IP地址,如下图所示。
步骤3 登录主机2,执行ifconfig命令查看主机2的IP地址,如下图所示。
步骤4 登录主机3,执行ifconfig命令查看主机3的IP地址,如下图所示。
二、基于iPerf测试SDN网络
- 场景一 TCP测试
步骤1 在主机1上执行iperf -s命令,以主机1为服务器端进行TCP测试,如下图所示。
说明:服务器端默认端口为5001,默认测试时间为10s。
步骤2 在主机2上执行iperf -c 10.0.0.8命令,以主机2为客户端去连接主机1,测试主机1与主机2之间的吞吐量,如下图所示。
上图结果表明主机1与主机2之间的带宽是874Mbits/sec。
步骤3 服务器端保持运行状态,在主机2上执行如下命令,测试主机1与主机2之间的网络性能。
# iperf -c 10.0.0.8 -t 32 -i 8
其中:“-t 32”表示测试时间为32s,“-i 8”表示输出频率为8s。该命令表示每8s输出一次测试结果,直到达到32s为止,结果如下图所示。
上图显示,输出5次测试结果,带宽基本在892Mbits/sec左右。
步骤4 在主机2上执行如下命令,测试主机1与主机2之间的网络性能。
# iperf -c 10.0.0.8 -n 2000M -i 5
其中:“-n 2000M”表示传输的数据量为2000M,“-i 5”表示输出频率为5s。该命令表示每5s输出一次测试结果,到最接近总时间为止,最后再输出总的测试结果,结果如下图所示。
由上图可知带宽依旧稳定保持在892 Mbits/sec左右。
步骤5 依旧将主机1作为服务器端,主机2、主机3都作为客户端,分别登录主机2、主机3多次执行以下命令,测试主机1与主机2、主机1与主机3之间的带宽。并在主机1上查看最后的测试结果,如下图所示。
# iperf -c 10.0.0.8
对比可以看出同一时间段内主机1与主机2、主机1与主机3的带宽接近,不过主机1与主机2、主机1与主机3之间的带宽都不稳定,不同时间段的带宽相差比较大。
- 场景二 UDP测试
步骤1 选择主机1,按Ctrl+c键,停止主机1上的iPerf服务。
步骤2 执行iperf -s -u命令,以主机1为服务器端进行UDP测试,如下图所示。
步骤3 在主机2上执行如下命令,以主机2为客户端去连接主机1,测试主机1与主机2之间的网络性能。
# iperf -c 10.0.0.8 -u -b 2000M -i 5 -l 1380
其中:“-b 2000M”指定客户端以2000Mbps为数据发送速率,“-i 5”表示输出频率为5s,“-l 1380”表示数据包大小是1380个字节,客户端测试结果如下图所示。
上图显示,输出2次测试结果,带宽是752Mbits/sec左右。
服务器端测试结果如下图所示。
上图显示,主机1与主机2之间带宽为519Mbit/s,抖动(Jitter)为0.012ms,丢包率(Lost/Total Datagrams)为32%。
说明:若发现sever端收不到client端发过来的包,即没有任何输出,请检查是不是client端发的数据包大小大于server端的网卡设置的MTU值。当不设置“-l”时,client端默认发送的数据包的大小为1470。
步骤4 选择主机1,按Ctrl+C键,停止主机1上的iPerf服务。
三、基于Netperf测试SDN网络
- 场景一 TCP测试
步骤1 在主机1上执行以下命令运行服务器端,用-p指定监听端口为9991。
# netserver -p 9991
步骤2 在主机2上运行客户端,指定服务器端的IP地址以及端口。缺省情况下Netperf进行TCP批量传输,即-t TCP_STREAM。执行以下命令:
# netperf -H 10.0.0.8 -p 9991
从测试结果可以看出,服务器端使用87380字节大小的socket接收缓冲,客户端使用16384字节大小的socket发送缓冲。缺省情况下,Netperf向服务器端发送的测试分组大小也是16384字节,用时10.03s,吞吐量为888.57Mbits/sec。
步骤3 执行以下命令再次发起测试,-m设置客户端发送的数据为1024比特。
# netperf -H 10.0.0.8 -p 9991 -- -m 1024
上图表示测试时间10.01秒,吞吐量871.29Mbits/sec。
- 场景二 UDP测试
在主机2上执行以下命令,测试主机1与主机2之间的网络性能,如下图所示。
# netperf -t UDP_STREAM -H 10.0.0.8 -p 9991 -- -m 1024
说明:不同于iPerf,Netperf测试UDP数据包无需在服务器端指定参数,所以不用重启服务器端,只需要在客户端加上-t UDP_STREAM。
由上图可知,UDP测试结果有两行,第一行显示的是客户端的发送统计,这里的吞吐量表示Netperf向本地socket发送分组的能力。第二行显示的是服务器端接收的情况,由于UDP协议的不可靠性,远端系统的接收吞吐量要远远小于发送出去的吞吐量,只有791.85Mbits/sec。
-
登录用户名:root 密码:user@openlab×