1. Netperf 介绍
Netperf 是一种网络性能的测量工具,主要针对基于TCP 或UDP 的传输。Netperf 根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式。Netperf 测试结果所反映的是一个系统能够以多快的速度向另外一个系统发送数据,以及另外一个系统能够以多块的速度接收数据。Netperf工具以client/server 方式工作。server 端是netserver,用来侦听来自client 端的连接,client端是netperf,用来向server 发起网络测试。在 client 与server 之间,首先建立一个控制连接,传递有关测试配置的信息,以及测试的结果;在控制连接建立并传递了测试配置信息以后, client 与server 之间会再建立一个测试连接,用来来回传递着特殊的流量模式,以测试网络的性能。其官方网址是:http://www.netperf.org/netperf/DownloadNetperf.html测试的时候请注意,设置的测试文件的大小一定要大过你的内存(最佳为内存的两倍大小),不然linux 会给你的读写的内容进行缓存。会使数值非常不真实。
2. 安装与使用
2.1 安装
netperf 的安装对于我们的系统而言,非常简单,直接下载压缩包并安装即可,安装后路径可按具体的测试目录文件而定。对本系统来说,安装在:/tmp/usb 下。其安装过程为:
(1). 将存有netperf‐2.4.4 工具的优盘加载:
#mount –o auto /dev/sdb1 /mnt/usb
(2) . 将netperf‐2.4.4 压缩包解压到/tmp/usb 下:
#tar –zxvf netperf‐2.4.4.tar.gz ‐C /tmp/usb/
(3). 将解压后的文件进行配置:
#./configure
(4). 进行文件的制作:
# make
(5). 进行网络终端连接:
#netserver
到此netperf‐2.4.4 文件已经安装成功,可以进行网络功能测试。
3. 常用参数分析
1) Netperf 的常用参数:
在linux 系统中,可以直接运行可执行程序来启动netserver,也可以让inetd 或xinetd 来自动启动netserver。当netserver 在server 端启动以后,就可以在client 端运行netperf 来测试网络的性能。netperf通过命令行参数来控制测试的类型和具体的测试选项。根据作用范围的不同,netperf 的命令行参数可以分为两大类:全局命令行参数、测试相关的局部参数,两者之间使用‐‐分隔:
netperf [global options]‐‐ [test‐specific options] |
这里我们只解释那些常用的命令行参数,其它的参数读者可以查询netperf 的man 手册。
‐H host :指定远端运行netserver 的server IP 地址。
‐l testlen:指定测试的时间长度(秒)
‐t testname:指定进行的测试类型,包括TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,
UDP_RR,在下文中分别对它们说明。
在后面的测试中,netserver 运行在192.168.0.28,server 与client 通过局域网连接(100M Hub)。
1) TCP 网络性能
由于TCP 协议能够提供端到端的可靠传输,因此被大量的网络应用程序使用。但是,可靠性的建立是要付出代价的。TCP 协议保证可靠性的措施,如建立并维护连接、控制数据有序的传递等都会消耗一定的网络带宽。
netperf 可以模拟三种不同的TCP 流量模式:
- 单个TCP 连接,批量(bulk)传输大量数据
- 单个TCP 连接,client 请求/server 应答的交易(transaction)方式
- 多个TCP 连接,每个连接中一对请求/应答的交易方式
2) UDP 网络性能
UDP 没有建立连接的负担,但是UDP 不能保证传输的可靠性,所以使用UDP 的应用程序需要自行跟踪每个发出的分组,并重发丢失的分组。
netperf 可以模拟两种UDP 的流量模式:
- 从client 到server 的单向批量传输
- 请求/应答的交易方式
由于UDP 传输的不可靠性,在使用netperf 时要确保发送的缓冲区大小不大于接收缓冲区大小,否则数据会丢失,netperf 将给出错误的结果。因此,对于接收到分组的统计不一定准确,需要结合发送分组的统计综合得出结论。
3. Netperf 工作原理
netperf 是围绕着基本的客户‐服务器模式设计的。主要有两个可执行部分:客户端程序netperf 和服务器端程序netserver.。netserver 可单独在一台机器上运行,也可与客户端程序netperf 在同一机器上运行。测试时,netperf 首先建立和远程系统的控制连接。该操作通过调用establish‐control(host‐name,test‐port)为测试打开一个使用相应协议的端口.然后,根据测试者指定的测试类型,调用相应的函数(如测试TCP 流性能,则调用send‐tcp‐stream(hostname)函数)进行处理,并等待测试结果,当测试完成时显示测试结果,关闭连接,退出该次测试。
服务器端运行的netserver 是一个系统守护程序,它在一个指定的监听端口循环等待测试请求,当有测试请求时,进行初始化,读取测试的类型,调用相应的模块进行处理,并读取发送方和接收方的套接字和消息大小以及此次测试所用的时间,计算出网络的吞吐量返回计算结果,然后继续等待下一轮测试。