linux下性能测试工具netperf使用
一、功能简介
netperf是一款针对网络性能的测试工具,主要基于TCP或UDP的传输。根据应用的不同,可以进行批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式的性能测试。
netperf以Client/Server方式工作。Server端是netserver,用来侦听来自client端的连接,Client端是netperf,用来向Server发起网络测试。在Client与Server之间,首先建立一个控制连接,传递有关测试配置的信息,以及测试的结果;在控制连接建立并传递了测试配置信息以后,Client与Server之间会再建立一个测试连接,来回传递特殊的流量模式,用来测试网络的性能。
netperf测试结果反映了一个系统能够以多快的速度向另外一个系统发送数据,以及另外一个系统能够以多块的速度接收数据。
二、编译安装netperf
网址:http://www.netperf.org/netperf
源码包:netperf-2.4.5.tar.gz
下载源码包->解压->./configure->make->make install。 安装完成之后即可使用netperf。
三、测试模式
1. 单个TCP连接,批量(bulk)传输大量数据;
2. 单个TCP连接,Client请求/Server应答的交易(transaction)方式;
3. 多个TCP连接,每个连接中一对请求/应答的交易方式;
4. 从Client到Server的单向批量传输;
5. 请求/应答的交易方式。
四、参数
netperf通过命令行参数来控制测试类型和具体的测试选项。根据作用范围不同,netperf的命令行参数可以分为两大类:全局参数、局部参数,两者之间使用--分隔,格式如下:
netperf [global options]-- [test-specific options]
常用的命令行参数:
-H host :指定远端运行netserver的server IP地址;
-l testlen:指定测试的时间长度(秒);
-t testname:指定测试类型,包括TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,UDP_RR。
其他参数请参考man netperf。
五、运行netperf
Client/Server通过网线与路由器直连,以下实例均运行于下列的测试环境:
-
Client (IP 172.17.109.20)
Server(IP 172.17.109.248)
内存
1G DDR2
8G DDR3
Net Card
100M
100M
Kernel
2.6.27
2.6.36
OS
Debian5
Debian6
路由器
D-Link DES-1024R 10/100 switch
(一)测试批量网络流量的性能
批量数据传输典型的例子有ftp和其它类似的网络应用(即一次传输整个文件)。根据使用传输协议的不同,批量数据传输又分为TCP批量传输和UDP批量传输。
1.TCP_STREAM
netperf缺省情况下进行TCP批量传输,即-t TCP_STREAM。测试过程中,netperf向netserver发送批量的TCP数据分组,以确定数据传输过程中的吞吐量。
执行netperf命令:netperf -H 172.17.109.248 -l 30,输出结果如下:
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
87380 16384 16384 30.19 94.47
数据含义:
(1)远端系统(即Server)使用大小为87380字节的socket接收缓冲;
(2)本地系统(即Client)使用大小为16384字节的socket发送缓冲;
(3)向远端系统发送的测试分组大小为16384字节;
(4)测试时间为30秒;
(5)吞吐量的测试结果为94.47Mbits/秒
在默认情况下,netperf发送的测试分组大小为本地系统所使用的socket发送缓冲大小。
在TCP_STREAM方式下,相关的局部参数如下表所示:
|
参数 |
说明 |
|
-s size |
设置本地系统的socket发送与接收缓冲大小 |
|
-S size |
设置远端系统的socket发送与接收缓冲大小 |
|
-m size |
设置本地系统发送测试分组的大小 |
|
-M size |
设置远端系统接收测试分组的大小 |
|
-D |
对本地与远端系统的socket设置TCP_NODELAY选项 |
例如,怀疑路由器由于缺乏足够的缓冲区空间,使得转发大的分组时存在问题,我们就可以增加测试分组(-m)的大小,再观察吞吐量的变化。
执行命令: netperf -H 172.17.109.248 -l 30 -- -m 1024,结果如下:
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
87380 16384 1024 30.18 94.47
测试分组的大小由上个例子的16384减少到1024字节,而吞吐量却没有变化,说明路由器不存在缓冲区的问题。
2.UDP_STREAM
UDP_STREAM用来测试进行UDP批量传输时的网络性能。需要注意的是,此时测试分组的大小不得大于socket的发送与接收缓冲大小,否则netperf会报出错提示。执行netperf命令:netperf -t UDP_STEAM -H 172.17.109.248 -- -m 1024,输出结果如下:
Size Size Time Okay Errors Throughput
bytes bytes secs. # # 10^6bits/sec
120832 65507 10.00 1844 0 96.62
671526075 10.00 1844 96.62
结果中有两行数据:第一行显示的是本地系统的发送统计,这里的吞吐量表示netperf向本地socket发送分组的能力。但是,我们知道,UDP是不可靠的传输协议,发送出去的分组数量不一定等于接收到的分组数量。
第二行是远端系统接收的情况,由于client与server直接连接在一起,而且网络中没有其它的流量,所以本地系统发送过去的分组几乎都被远端系统正确的接收了,远端系统的吞吐量也几乎等于本地系统的发送吞吐量。但是,在实际环境中,一般远端系统的socket缓冲大小不同于本地系统的socket缓冲区大小,而且由于UDP协议的不可靠性,远端系统的接收吞吐量要远远小于发送出去的吞吐量。
(二)测试请求/应答(request/response)网络流量的性能
另一类常见的网络流量类型是应用在client/server结构中的request/response模式。在每次交易(transaction)中,client向server发出小的查询分组,server接收到请求,处理后返回结果数据。
1.TCP_RR
TCP_RR方式的测试对象是多次TCP request和response的交易过程,但是它们发生在同一个TCP连接中,这种模式常常出现在数据库应用中。
执行netperf命令:netperf-t TCP_RR -H172.17.109.248,输出结果如下:
Local /Remote
Socket Size Request Resp. Elapsed Trans.
Send Recv Size Size Time Rate
bytes Bytes bytes bytes secs. per sec
16384 87380 1 1 10.00 6834.52
1638487380
输出的结果也是两行组成。第一行显示本地系统的情况,第二行显示的是远端系统的信息。平均交易率(transaction rate)为6834.52次/秒。这里的request和response分组的大小都为1个字节,不具有很大的实际意义。用户可以通过相关的参数来改变request和response分组的大小,TCP_RR方式下的参数如下表所示:
|
参数 |
说明 |
|
-r req,resp |
设置request和reponse分组的大小 |
|
-s size |
设置本地系统的socket发送与接收缓冲大小 |
|
-S size |
设置远端系统的socket发送与接收缓冲大小 |
|
-D |
对本地与远端系统的socket设置TCP_NODELAY选项 |
执行netperf命令:netperf -t TCP_RR -H 172.17.109.248 -- -r 32,1024,输出结果如下:
Local /Remote
Socket Size Request Resp. Elapsed Trans.
Send Recv Size Size Time Rate
bytes Bytes bytes bytes secs. per sec
16384 87380 32 1024 10.00 2889.35
1638487380
可以看出,由于request/reponse的值增加了,导致交易率明显下降。
2.TCP_CRR
与TCP_RR不同,TCP_CRR为每次交易建立一个新的TCP连接。最典型的应用就是HTTP,每次HTTP交易是在一条单独的TCP连接中进行的。因为需要不停地建立新的TCP连接,并且交易结束后拆除TCP连接,交易率一定会受到很大影响。
执行netperf命令:netperf -t TCP_CRR -H 172.17.109.248,输出结果如下:
Local /Remote
Socket Size Request Resp. Elapsed Trans.
Send Recv Size Size Time Rate
bytes Bytes bytes bytes secs. per sec
16384 87380 1 1 10.00 2459.87
1638487380
即使是使用一个字节的request/response分组,交易率也明显降低了,只有2459.87次/秒。TCP_CRR使用与TCP_RR相同的局部参数。
3.UDP_RR
UDP_RR方式使用UDP分组进行request/response的交易过程。由于没有TCP连接所带来的负担,所以我们推测交易率一定会有相应的提升。
执行命令:netperf -t UDP_RR -H 172.17.109.248,输出结果如下:
Local /Remote
Socket Size Request Resp. Elapsed Trans.
Send Recv Size Size Time Rate
bytes Bytes bytes bytes secs. per sec
120832 120832 1 1 10.00 7558.55
118784 118784
结果证实了我们的推测,交易率为7558.55次/秒,高于TCP_RR(6834.52次/秒)的数值。如果出现了相反的结果,即交易率降低了,也不需要担心,这说明在网络中,路由器或其它的网络设备对UDP采用了与TCP不同的缓冲区空间和处理技术。
linux下性能测试工具netperf使用的更多相关文章
- 哈工大 计算机系统 实验一 Linux下C工具应用
所有实验文件可见github 计算机系统实验整理 实验报告 实 验(一) 题 目 Linux下C工具应用 专 业 计算机学院 学 号 班 级 学 生 指 导 教 师 实 验 地 点 实 验 日 期 计 ...
- Linux系统性能测试工具(八)——网络性能测试工具之netperf
本文介绍关于Linux系统(适用于centos/ubuntu等)的网络性能测试工具-iperf.磁盘io性能测试工具包括: iperf: netperf 参考链接:https://www.jiansh ...
- Linux系统性能测试工具(七)——网络性能工具之iperf
本文介绍关于Linux系统(适用于centos/ubuntu等)的网络性能测试工具-iperf.磁盘io性能测试工具包括: iperf: netperf 参考链接:https://www.cnblog ...
- TCP/UDP网络性能测试工具 - Netperf (zz) ..网络测试工具
在构建或管理一个网络系统时,我们更多的是关心网络的可用性,即网络是否连通,而对于其整体的性能往往考虑不多. 除了netperf以外. 还有很多其它的网络性能测试工具. 如db, ...
- Linux下sysstat工具学习
Linux下,我们多用ssh链接服务器远程操控.对于系统的监控必不可少,sysstat很不错的监控工具包. sysstat官网:http://sebastien.godard.pagesperso-o ...
- linux如何ARP嗅探 Linux下嗅探工具Dsniff安装记录
先来下载依赖包 和一些必须要用到的工具 我这里用的是 dsniff-2.3 的版本 wget http://www.monkey.org/~dugsong/dsniff/dsniff-2.3.ta ...
- Linux下同步工具inotify+rsync使用详解
1. rsync 1.1 什么是rsync rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.它使用所谓的“Rsync演算法”来使本地和远程两个主机之间的文件达到同步,这 ...
- linux下debug工具
在linux下开发难免会遇到bug,但是由于没有图形IDE,导致debug也变得困难,其实只要掌握一些常用的debug工具,一些错误就能很快解决,本文就介绍一些常用的工具用以调试: log 输出log ...
- Linux下应急工具
Linux下的应急工具 在Linux下,应急的查看点无非那个几个,一是看表现(宕机.高CPU.高内存.高IO.高网络通信),二看连接.三看进程.四看日志.五看文件(Linux一切皆文件),再者结合起来 ...
随机推荐
- tyvj——P1002 谁拿了最多奖学金
P1002 谁拿了最多奖学金 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2005复赛提高组第一题 描述 某校的惯例是在每学期的期末考试之后发 ...
- Ubuntu下触控板手势调节软件xSwipe
楼主进了一台Thinkpad T450s,触控板支持4点触控,安装了ubuntu14.04 LTS之后,触控板只剩下双指滑动了,略有不爽,各种google,百度. 真找到办法了. 首先得知了touch ...
- 【NOIP模拟赛】【乱搞AC】【贪心】【模拟】匹配
匹配 (match.pas/match.c/match.cpp) [题目描述] 到了新的学期,Mcx痛苦的发现通用技术课居然是有实验课的,这样的话他就不得不放弃写作业的想法而去做一件类似于搭积木的事情 ...
- [BZOJ1194][HNOI2006][强连通分量Tarjan+dfs]潘多拉的盒子
[BZOJ1194][HNOI2006]潘多拉的盒子 Input 第一行是一个正整数S,表示宝盒上咒语机的个数,(1≤S≤50).文件以下分为S块,每一块描述一个咒语机,按照咒语机0,咒语机1„„咒语 ...
- Node应用的Systemd启动(转)
作者: 阮一峰 日期: 2016年3月12日 前面的文章介绍了 Systemd 的操作命令和基本用法,今天给出一个实例,如何使用 Systemd 启动一个 Node 应用. 本文是独立的,不需要前面的 ...
- Linux下分区、格式化、自动挂载
说明:现在硬盘基本没有了IDE,所以基本是从SCSI开始说起,第一块硬盘标示为sda,第二块为sdb,以此类推.那么第一块硬盘的第一个分区为sda1,也是以此类推. 一.硬盘分区 sudo fdisk ...
- centos下mysql集群初尝试
原文:http://www.lvtao.net/database/mysql-cluster.html 五台服务器篇 安装要求 安装环境:CentOS-6.3安装方式:源码编译安装软件名称:mysql ...
- Assembly.Load动态加载程序集而不占用文件 z
方式一:占用文件的加载 Assembly assembly = Assembly.Load(path); 用上面的方法可以动态的加载到dll,但是用这种方法加载到的dll一直到程序运行结束都是占用的d ...
- django book多站点学习
多个站点 Django 的多站点系统是一种通用框架,它让你可以在同一个数据库和同一个Django项目下操作多个网站. 这是一个抽象概念,理解起来可能有点困难,因此我们从几个让它能派上用场的实际情景入手 ...
- OpenSSL 有关密钥的那些事儿(HOWTO keys)
<DRAFT!> OpenSSL 有关密钥的那些事儿(HOWTO keys) 1. 介绍(Introduction) Keys are the basis of public key al ...