这篇文章主要介绍了Tiobench,Orion,Lmbench,netperf这4种压力测试工具的安装及简单使用,只是一个入门级的教程,大牛请绕过。
1. Tiobench 基于文件系统的IO压力测试
下载:
http://sourceforge.net/projects/tiobench/files/tiobench/0.3.3/tiobench-0.3.3.tar.gz/download
解压缩: tar xzvf tiobench-0.3.3.tar.gz
再进入到tiobench-0.3.3目录中
Make
Make install
IO测试(对文件系统读写测试工具)可以使用以下命令取得帮助。
./tiotest -h
使用预定义或者可配置测试可以使用可以命令获取帮助。
./tiobench.pl –help
执行可以如下:tiobench.pl其实只是包装了一层,里面调用了tiotest
./tiobench.pl –block 4 –random 10000 –numruns 5 –threads 10 –size 2048
上面这句话的意思是:
1个块大小为4字节 ,10个线程,执行10000个随机IO,写2048MB数据,共执行5次。
测试完之后可以看到产生的测试报告如下:
Unit information================File size = megabytes
Blk Size = bytes Rate = megabytes per second CPU% = percentage of CPU used during the test Latency = milliseconds Lat% = percent of requests that took longer than X seconds CPU Eff = Rate divided by CPU% – throughput per cpu load Sequential Reads 2.6.18-164.el5 1024 4 10 4.94 8210.% 0.004 7.27 0.00000 0.00000 0 Random Reads 2.6.18-164.el5 1024 4 10 4.64 7483.% 0.004 0.04 0.00000 0.00000 0 Sequential Writes 2.6.18-164.el5 1024 4 10 2.21 9521.% 0.015 11.56 0.00000 0.00000 0 Random Writes 2.6.18-164.el5 1024 4 10 0.02 98.51% 0.012 0.06 0.00000 0.00000 0 |
想知道各行分别代表什么含义,请执行:./tiosum.pl可以得到各行的TIILE。感觉这个地方很山寨。
组装一下就是:
Unit information================File size = megabytes
Blk Size = bytes Rate = megabytes per second CPU% = percentage of CPU used during the test Latency = milliseconds Lat% = percent of requests that took longer than X seconds CPU Eff = Rate divided by CPU% – throughput per cpu load Sequential Reads File Blk Num Avg Maximum Lat% Lat% CPU Kernel Size Size Thr Rate (CPU%) Latency Latency >2s >10s Eff —————————- —— —– — ———————————————————— 2.6.18-164.el5 1024 4 10 4.94 8210.% 0.004 7.27 0.00000 0.00000 0 Random Reads File Blk Num Avg Maximum Lat% Lat% CPU Kernel Size Size Thr Rate (CPU%) Latency Latency >2s >10s Eff —————————- —— —– — ———————————————————— 2.6.18-164.el5 1024 4 10 4.64 7483.% 0.004 0.04 0.00000 0.00000 0 Sequential Writes File Blk Num Avg Maximum Lat% Lat% CPU Kernel Size Size Thr Rate (CPU%) Latency Latency >2s >10s Eff —————————- —— —– — ———————————————————— 2.6.18-164.el5 1024 4 10 2.21 9521.% 0.015 11.56 0.00000 0.00000 0 Random Writes File Blk Num Avg Maximum Lat% Lat% CPU Kernel Size Size Thr Rate (CPU%) Latency Latency >2s >10s Eff —————————- —— —– — ———————————————————— 2.6.18-164.el5 1024 4 10 0.02 98.51% 0.012 0.06 0.00000 0.00000 0 |
发现一个读IO只要0.004毫秒,非常快,这是因为IO是基于文件系统cache的,其实测试的是内存,并非文件系统。所以,可以使用下面一个工具来测试IO。
2. 使用Orion做基于裸设备的IO压力测试
下载http://www.oracle.com/technetwork/topics/index-089595.html,需要一个OTN的免费帐号。
下载安装之后,可以以下命令获取帮助:
./orion_linux_x86-64 –help
为了避免文件系统cache,我们可以将需要测试的目录先进行umount
如:我要测试的目录为/data/对应的盘为/dev/sda8(映射关系保存在/etc/fstab中)
先执行:
umount /data
然后执行命令,命令执行完成后,再执行mount /data即可重新mount回来。
mount /data
测试如下:
2.1数据库OLTP类型,假定IO类型全部是8K随机操作,压力类型,自动加压,从小到大,一直到存储压力极限。读写比各为50%
2.2.1 测试8KB的块,这个是数据库块大小
创建一个文件名为zhoucang8k.lun的文件,内容为/dev/sda8
./orion_linux_x86-64 -run advanced -testname zhoucang8k -size_small 8 -size_large 8 -type rand -write 50 &
这里能够得到一些报告如下:
文件1:zhoucang8k_20110520_1757_lat.csv表示每个IO的延时,1,2,3,4,5分别代表并发数 | ||||||||||||||||||||||||
|
文件2:zhoucang8k_20110520_1757_iops.csvIOPS的能力,1,2,3,4,5分别代表并发数。 | ||||||||||||||||||||||||
|
文件3:zhoucang8k_20110520_1757_mbps.csv IO吞吐量,单位:MB/每秒 | |||||||||||||||||||||
|
还有两个文件trace文件内容较长,这里不贴了,另一个summary文件如下:
文件4:zhoucang8k_20110520_1757_summary.txt |
ORION VERSION 11.1.0.7.0Commandline:-run advanced -testname zhoucang8k -size_small 8 -size_large 8 -type rand -write 50
This maps to this test: Test: zhoucang8k Small IO size: 8 KB Large IO size: 8 KB IO Types: Small Random IOs, Large Random IOs Simulated Array Type: CONCAT Write: 50% Cache Size: Not Entered Duration for each Data Point: 60 seconds Small Columns:, 0 Large Columns:, 0, 1, 2 Total Data Points: 8 Name: /dev/sda8 Size: 1053115467264 1 FILEs found. Maximum Large MBPS=3.72 @ Small=0 and Large=2 Maximum Small IOPS=842 @ Small=5 and Large=0 Minimum Small Latency=3.55 @ Small=1 and Large=0 |
2.2.2 测试128KB的随机IO,这个是db_file_multiblock_read_count的默认值。
创建一个文件名为zhoucang128k.lun的文件,内容为/dev/sda8
./orion_linux_x86-64 -run advanced -testname zhoucang128k -size_small 128 -size_large 128 -type rand -write 50 &
结果(见附件):
Maximum Large MBPS=29.11 @ Small=0 and Large=2
Maximum Small IOPS=311 @ Small=5 and Large=0
Minimum Small Latency=5.93 @ Small=1 and Large=0
2.2.3 测试1MB的随机IO,这个是操作系统上能够支持的最大IO。
创建一个文件名为zhoucang1024k.lun的文件,内容为/dev/sda8
./orion_linux_x86-64 -run advanced -testname zhoucang1024k -size_small 1024-size_large 1024 –write 50 -type rand &
结果(见附件):
Maximum Large MBPS=109.76 @ Small=0 and Large=2
Maximum Small IOPS=135 @ Small=5 and Large=0
Minimum Small Latency=11.49 @ Small=1 and Large=0
2.2 IO吞吐量的测试,跟数据库归档等相关。
2.2.1 数据库吞吐量测试,假定IO全部是1M的序列性IO
./orion_linux_x86-64 -run advanced -testname zhoucang1m -size_small 1024 -size_large 1024 –write 50 -type seq &
IOPS:
Large/Small | 1 | 2 | 3 | 4 | 5 |
0 | 83 | 110 | 123 | 129 | 133 |
Lat:
Large/Small | 1 | 2 | 3 | 4 | 5 |
0 | 11.92 | 18.12 | 24.33 | 30.86 | 37.56 |
整完之后,可能需要重新创建文件系统。因为/dev/sda8的label头信息被覆盖了。
/etc/fstab内容如下
LABEL=/data /data ext3 defaults 1 2
执行以下命令创建文件系统。
mkfs -t ext3 /dev/sda8
/etc/fstab中加入:
/dev/sda8 /data ext3 defaults 1 2
mount -a
3 Lmbench 内存测试:
下载一个Lmbench:
http://www.bitmover.com/bitkeeper(里面的链接,打不开)
tar xzvf lmbench-3.0-a9.tgz
lmbench-3.0-a9
make results
输入1000,大概1G的内存测试。(这个值越大,测试结果越准确,同时,值大,测试的时间也会稍稍有点长)
其它参数可以自选,这里我选择了全部默认(调带大小等参数),漫长的执行过程。。。。
测试完毕执行make see可得到以下四个文件,
在result目录下:percent.errs percent.out summary.errs summary.out
percent.errs和summary.errs
其它:具体如何使用这个工具呢?发现这个工具BIN目录下有非常多的文件,功能很强大,具体可以参看这个链表上面有详细的介绍:
http://www.bitmover.com/lmbench/man_lmbench.html
详尽的测试结果见附件:
4 netperf针对网络做压力测试
这个工具是由HP公司开发的,测试网络栈的一个工具,详细的使用文档可以参看附件。
从官方网下载一个netperf,登录:
ftp://ftp.netperf.org/netperf/
拷贝文件:netperf-2.4.5.tar.gz
执行
Tar xzvf netperf-2.4.5.tar.gz
cd netperf-4.0.0rc2
Mkdir bin
./configure –prefix /root/zhoucang/netperf-2.4.5/bin
检测安装平台的目标特征的,能够直接linux下的makefile,
再执行make和make install
安装完成之后,进入安装目录的 bin目录。
执行以下命令可以查看帮助:
./netperf –help
4.1批量(bulk)网络流量的性能
批量数据传输典型的例子有ftp和其它类似的网络应用(即一次传输整个文件)。根据使用传输协议的不同,批量数据传输又分为TCP批量传输和UDP批量传输。
4.1.1 测试TCP_STREAM传输:
Netperf缺省情况下进行TCP批量传输,即-t TCP_STREAM。测试过程中,netperf向netserver发送批量的TCP数据分组,以确定数据传输过程中的吞吐量:
测试结果如下
[root@tstpay1 bin]# ./netperf -H 10.253.34.8 -l 60TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.253.34.8 (10.253.34.8) port 0 AF_INETRecv Send Send
Socket Socket Message Elapsed Size Size Size Time Throughput bytes bytes bytes secs. 10^6bits/sec 87380 16384 16384 60.03 949.29 |
从netperf的结果输出中,我们可以知道以下的一些信息:
1) 远端系统(即server)使用大小为87380字节的socket接收缓冲
2) 本地系统(即client)使用大小为16384字节的socket发送缓冲
3) 向远端系统发送的测试分组大小为16384字节
4) 测试经历的时间为60.03秒
5) 吞吐量的测试结果为949.29Mbits/秒
4.1.2 UDP_STREAM的测试
UDP_STREAM用来测试进行UDP批量传输时的网络性能。需要特别注意的是,此时测试分组的大小不得大于socket的发送与接收缓冲大小,否则netperf会报出错提示:
执行:./netperf -t UDP_STREAM -H 10.253.34.8 -l 60
执行结果如下:
[root@tstpay1 bin]# ./netperf -t UDP_STREAM -H 10.253.34.8 -l 60UDP UNIDIRECTIONAL SEND TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.253.34.8 (10.253.34.8) port 0 AF_INETSocket Message Elapsed Messages
Size Size Time Okay Errors Throughput bytes bytes secs # # 10^6bits/sec 262144 65507 60.00 110099 0 961.62 129024 60.00 110098 961.61 |
UDP_STREAM方式的结果中有两行测试数据,第一行显示的是本地系统的发送统计,这里的吞吐量表示netperf向本地socket发送分组的能力。但是,我们知道,UDP是不可靠的传输协议,发送出去的分组数量不一定等于接收到的分组数量。
第二行显示的就是远端系统接收的情况,由于client与server直接连接在一起,而且网络中没有其它的流量,所以本地系统发送过去的分组几乎都被远端系统正确的接收了,远端系统的吞吐量也几乎等于本地系统的发送吞吐量。但是,在实际环境中,一般远端系统的socket缓冲大小不同于本地系统的socket缓冲区大小,而且由于UDP协议的不可靠性,远端系统的接收吞吐量要远远小于发送出去的吞吐量。
4.2 请求/应答(request/response)网络流量的性能
另一类常见的网络流量类型是应用在client/server结构中的request/response模式。在每次交易(transaction)中,client向server发出小的查询分组,server接收到请求,经处理后返回大的结果数据。
4.2.1 TCP_RR
TCP_RR方式的测试对象是多次TCP request和response的交易过程,但是它们发生在同一个TCP连接中,这种模式常常出现在数据库应用中。数据库的client程序与server程序建立一个TCP连接以后,就在这个连接中传送数据库的多次交易过程。
[root@tstpay1 bin]# ./netperf -t TCP_RR -H 10.253.34.8TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.253.34.8 (10.253.34.8) port 0 AF_INETLocal /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 11294.81 |
Netperf输出的结果也是由两行组成。第一行显示本地系统的情况,第二行显示的是远端系统的信息。平均的交易率(transaction rate)为11294.81次/秒。注意到这里每次交易中的request和response分组的大小都为1个字节,不具有很大的实际意义。用户可以通过测试相关的参数来改变request和response分组的大小,TCP_RR方式下的参数如下表所示:
参数 | 说明 |
-s size | 设置本地系统的socket发送与接收缓冲大小 |
-S size | 设置远端系统的socket发送与接收缓冲大小 |
-r req,resp | 设置request和reponse分组的大小 |
-D | 对本地与远端系统的socket设置TCP_NODELAY选项 |
通过使用-r参数,我们可以进行更有实际意义的测试:
#./netperf -t TCP_RR -H 10.253.34.8 — -r 32,1024TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.253.34.8 (10.253.34.8) port 0 AF_INETLocal /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 8955.26 16384 87380 |
从结果中可以看出,由于request/reponse分组的大小增加了,导致了交易率明显的下降。注:相对于实际的系统,这里交易率的计算没有充分考虑到交易过程中的应用程序处理时延,因此结果往往会高于实际情况。
4.2.2 TCP_CRR
与TCP_RR不同,TCP_CRR为每次交易建立一个新的TCP连接。最典型的应用就是HTTP,每次HTTP交易是在一条单独的TCP连接中进行的。因此,由于需要不停地建立新的TCP连接,并且在交易结束后拆除TCP连接,交易率一定会受到很大的影响。
[root@tstpay1 bin]# ./netperf -t TCP_CRR -H 10.253.34.8TCP Connect/Request/Response TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.253.34.8 (10.253.34.8) port 0 AF_INETLocal /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 4607.63 16384 87380 |
即使是使用一个字节的request/response分组,交易率也明显的降低了,只有4607.63次/秒。TCP_CRR使用与TCP_RR相同的局部参数。
4.2.3 UDP_RR
UDP_RR方式使用UDP分组进行request/response的交易过程。由于没有TCP连接所带来的负担,所以我们推测交易率一定会有相应的提升。
[root@tstpay1 bin]# ./netperf -t UDP_RR -H 10.253.34.8UDP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.253.34.8 (10.253.34.8) port 0 AF_INETLocal /Remote
Socket Size Request Resp. Elapsed Trans. Send Recv Size Size Time Rate bytes Bytes bytes bytes secs. per sec 262144 262144 1 1 10.00 11367.45 129024 129024 |
结果证实了我们的推测,交易率为11367.45次/秒,高过TCP_RR的数值。不过,如果出现了相反的结果,即交易率反而降低了,也不需要担心,因为这说明了在网络中,路由器或其它的网络设备对UDP采用了与TCP不同的缓冲区空间和处理技术。
发表评论