工欲利其事,必先利其器。在基准测试中,我们首先介绍以下几个神器:
sysbench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。项目地址
它可以进行以下几项测试:
1.cpu性能
2.磁盘io性能
3.调度程序性能
4.内存分配及传输速度
5.POSIX线程性能
6.数据库性能(OLTP基准测试,MySQL,pgsql,oracle )
本文只用来测试cpu和内存性能。
下载最新稳定版源码包。项目地址 接下来,按照以下步骤安装:
tar zxf sysbench*
cd sysbench*
./configure --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib && make && make install
strip /usr/local/bin/sysbench
iozone 是一个文件系统的benchmark工具,可以测试不同的操作系统中文件系统 的读写性能。可以测试 Read, write, re-read,re-write, read backwards, read strided, fread, fwrite, random read, pread,mmap, aio_read, aio_write 等等不同的模式下的硬盘的性能。项目地址
安装方法:
下载源码包最新稳定版:下载链接
tar xvf iozone*
cd iozone*
make
netperf是一个基于C/S结构的网络性能测试工具,主要针对基于TCP和UDP的传输。针对不通的业务,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式。Netperf测试结果所反映的是两个系统之间发送和接受数据的速度和效率。项目地址
安装方法:
svn co http://www.netperf.org/svn/netperf2/trunk/
cd netperf*
./configure
make&&make install
使用sysbench对cpu进行性能测试。
sysbench --test=cpu --cpu-max-prime=20000 run
# 通过计算最大素数来测试CPU性能
返回结果示例
Maximum prime number checked in CPU test: 20000
Test execution summary:
total time: 27.3193s
total number of events: 10000
total time taken by event execution: 27.3180
per-request statistics:
min: 2.73ms
avg: 2.73ms
max: 3.09ms
approx. 95 percentile: 2.73ms
Threads fairness:
events (avg/stddev): 10000.0000/0.00
execution time (avg/stddev): 27.3180/0.00
结果分析:
execution time 值越小,性能越好
使用sysbench对内存进行性能测试
sysbench --test=memory --num-threads=64 --memory-block-size=8192 --memory-total-size=4G run
#测试过程为在内存中传输4G的数据量,每个block大小为8K
返回结果示例:
Operations performed: 524288 (942532.69 ops/sec) (1)
4096.00 MB transferred (7363.54 MB/sec) (2)
Test execution summary:
total time: 0.5563s
total number of events: 524288
total time taken by event execution: 21.2037 (3)
per-request statistics:
min: 0.00ms
avg: 0.04ms
max: 478.24ms
approx. 95 percentile: 0.00ms
Threads fairness:
events (avg/stddev): 8192.0000/6258.63
execution time (avg/stddev): 0.3313/0.06
结果分析:
(3)越短,Operations (1)(2)越大 性能越好
使用IOZone对文件系统进行测试
iozone –Rab –g [最大文件大小] output.xls
#最大文件大小应大于内存大小,避免使用缓存,由于数据比较多,把数据存到excel里,可视化处理。
结果分析: 测试结果为不同的块大小,不同文件大小的时候,文件系统在不同场景的表现(读写速度和ops,越大说明性能越好)。可以用excel绘图,横向和纵向做比较。
使用后netperf进行测试,需要2个机器,拓扑如下
被测机器<=======>测试机
被测机器服务端用法:
netserver -p < port > #启动netperf服务端,< prort >
测试机客户端用法:
netperf [global options] --[test-specific options]
选项:
-
[global options] 可选参数,其中可选的参数有如下几个:
-H host 指定远端运行netserver的server IP地址 -l testlen 指定测试的时间长度(秒)
-t testname 指定进行的测试类型(TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,UDP_RR) -
[test-specific options] 可选参数,其中可选的参数有如下几个:
-s size 设置本地系统的socket发送与接收缓冲大小 -S size 设置远端系统的socket发送与接收缓冲大小 -m size 设置本地系统发送测试分组的大小 -M size 设置远端系统接收测试分组的大小 -D 对本地与远端系统的socket设置TCP_NODELAY选项 -r req,resp 设置request和reponse分组的大小
用例:
-
批量(bulk)网络流量的性能
-
TCP
netperf -t TCP_STREAM -H < 被测机器IP > -l 60
-
UDP
netperf -t UDP_STREAM -H < 被测机器IP > -l 60
-
返回示例:
Recv Send Send Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes sec 10^6bits/sec
87380 16384 2048 60.00 87.62
结果分析:
1.远端系统(即server)使用大小为87380字节的socket接收缓冲
2.本地系统(即client)使用大小为16384字节的socket发送缓冲
3.向远端系统发送的测试分组大小为16384字节
4.测试经历的时间为60秒
5.吞吐量的测试结果为88Mbits/秒
衡量标准:
吞吐量越大性能越好。
- 请求/应答(request/response)网络流量的性能
返回示例
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 9502.73
衡量标准
Rate(平均交易率 次/秒)越大性能越好,
* TCP_RR 单次TCP连接,多次交互。
netperf -t TCP_RR -H < 被测机器IP >
* TCP_CRR 单次TCP连接,单次交互。
netperf -t TCP_CRR -H < 被测机器IP >
* UDP_RR 类似于TCP_RR
netperf -t UDP_RR -H < 被测机器IP >
备注:
实际中可以根据业务类型,调节[ test-specific options ]的参数进行测试,对网络栈进行优化。
参考文档: