Sysbench - 一种系统性能benchmark
SysBench是一款开源的、跨平台的、模块化的、多线程的性能测试工具,通过高负载地运行在数据库上,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。用于评估操作系统的性能参数。
1 sysbench简介
Sysbench使得我们无需采用真正的复杂的数据库benchmark而获取系统的性能概况。
目前主要支持的数据库有mysql、oracle、postgresql。
可评估的系统性能参数有:
1. Cpu性能
2. 内存分配与传输速度测试
3. 互斥体测试
4. 文件I/O性能
5. 线程调度性能
6. 数据库服务性能(OLTP基准)
本来sysbench主要是为mysql编写的benchmark。但是现在SysBench将进一步扩展,以支持更多的数据库backends,distributed benchmarks和第三方插件模块。
sysbench按照指定的数量开启线程,每个线程与mysql建立一个连接,每个线程不停地进行事务操作,打开事务,然后进行一些查询、更新、插入操作,提交事务,再开始新的事务;所有的sql只访问一个表-sbtest,是由sysbench的prepare命令建好的。其中的记录数,也是在prepare时指定好并创建的。测试结束,会有一个统计结果,包括例如每秒事务数、平均响应时间等等;
2 sysbench下载与安装
1.下载
下载地址:http://sourceforge.net/projects/sysbench/
获得sysbench-0.4.8.tar.gz源码。sysbench-0.4.8.tar.gz编译未通过。
2.安装
默认支持MySQL,如果需要测试Oracle/PostgreSQL,则在configure时需要加上–with-oracle或者–with-pgsql参数
[root@RedHat sysbench-0.4.8]# ./configure --without-mysql [root@RedHat sysbench-0.4.8]# make [root@RedHat sysbench-0.4.8]# make install |
如果需要测试mysql,则需要配置参数选项:
./configure
--with-mysql-includes=/opt/mysql/include/mysql 表示mysql头文件目录
--with-mysql-libs=/opt/mysql/lib/mysql表示mysql模块目录
如股票缺少libtool请至ftp://ftp.gnu.org/gnu/libtool/下载
3 性能测试与结果分析
请查看sysbench帮助
[root@RedHat sysbench-0.4.8]# sysbench Missing required command argument. Usage: sysbench [general-options]... --test=<test-name> [test-options]... command General options: --num-threads=N number of threads to use [1] --max-requests=N limit for total number of requests [10000] --max-time=N limit for total execution time in seconds [0] --thread-stack-size=SIZE size of stack per thread [32K] --init-rng=[on|off] initialize random number generator [off] --test=STRING test to run --debug=[on|off] print more debugging info [off] --validate=[on|off] perform validation checks where possible [off] --help=[on|off] print help and exit Compiled-in tests: fileio - File I/O test cpu - CPU performance test memory - Memory functions speed test threads - Threads subsystem performance test mutex - Mutex performance test oltp - OLTP test Commands: prepare run cleanup help See 'sysbench --test=<name> help' for a list of options for each test. [root@RedHat sysbench-0.4.8]# |
其中通用参数
参数名 |
参数描述 |
--num-threads=N |
测试时使用的线程数,默认为1 |
--max-requests=N |
请求数最大现在,默认10000 |
-max-time=N |
执行时间最大限制,默认为0 |
--thread-stack-size=SIZE |
每个线程的stack大小,默认是32K |
--init-rng=[on|off] |
是否初始化随机数生成器 |
--test=STRING |
运行的测试 |
--debug=[on|off] |
是否打印更多的debug信息 |
--validate=[on|off] |
是否执行有效性检查 |
--help=[on|off] |
打印帮助并退出 |
其中--test=STRING中的STRING可选项有:
STRING |
描述 |
fileio |
文件IO测试 |
cpu |
CPU性能测试 |
memory |
内存分配与传输速度测试 |
threads |
线程子系统性能测试 |
mutex |
互斥体性能测试 |
oltp |
数据库OLTP测试 |
1. 文件IO测试
[root@RedHat test]# sysbench --test=fileio help sysbench v0.4.8: multi-threaded system evaluation benchmark fileio options: --file-num=N number of files to create [128] --file-block-size=N block size to use in all IO operations [16384] --file-total-size=SIZE total size of files to create [2G] --file-test-mode=STRING test mode {seqwr, seqrewr, seqrd, rndrd, rndwr, rndrw} --file-io-mode=STRING file operations mode {sync,async,fastmmap,slowmmap} [sync] --file-extra-flags=STRING additional flags to use on opening files {sync,dsync,direct} [] --file-fsync-freq=N do fsync() after this number of requests (0 - don't use fsync()) [100] --file-fsync-all=[on|off] do fsync() after each write operation [off] --file-fsync-end=[on|off] do fsync() at the end of test [on] --file-fsync-mode=STRING which method to use for synchronization {fsync, fdatasync} [fsync] --file-merged-requests=N merge at most this number of IO requests if poss ible (0- don't merge) [0] --file-rw-ratio=N reads/writes ratio for combined test [1.5] [root@RedHat test]# |
参数选项说明:
参数名 |
描述 |
--file-num=N |
创建的文件数目,默认为128个 |
--file-block-size=N |
所有IO操作中的block大小,默认是16384 |
--file-total-size=SIZE |
创建的文件的总大小,默认为2G |
--file-test-mode=STRING |
测试的访问模式,可选一下6个参数:seqwr(顺序写)/seqrewr(顺序读写)/seqrd(顺序读)/ rndwr(随机写)/rndrw(随机读写)/rndrd(随机读); |
--file-io-mode=STRING |
文件操作模式,有以下四种选择:sync,async,fastmmap,slowmmap默认为sync |
--file-extra-flags=STRING |
打开文件是的标识,有以下选择:sync,dsync,direct |
--file-fsync-freq=N |
在N个请求之后执行fsync(),默认值为100,0表示不执行fsync() |
--file-fsync-all=[on|off] |
是否每一次写操作之后均执行fsync() |
--file-fsync-end=[on|off] |
在测试结束时执行fsync(),默认开启 |
--file-fsync-mode=STRING |
同步使用什么方法:fsync, fdatasync,默认为fsync |
--file-merged-requests=N |
尽可能的合并N个请求,0表示不合并,默认为0 |
--file-rw-ratio=N |
读写比例默认为1.5:1 |
测试案例:
创建2个进程,创建的文件总大小为3G,文件读写模式为随机读。
可以获取读写速度~
[root@RedHat test]# sysbench --test=fileio --num-threads=2 --file-total-size=512M --file-test-mode=rndrw prepare (准备测试文件) sysbench v0.4.8: multi-threaded system evaluation benchmark 128 files, 4096Kb each, 512Mb total Creating files for the test... [root@RedHat test]# sysbench --test=fileio --num-threads=2 --file-total-size=512M --file-test-mode=rndrw run (运行测试) sysbench v0.4.8: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 2 Extra file open flags: 0 128 files, 4Mb each 512Mb total file size Block size 16Kb Number of random requests for random IO: 10000 Read/Write ratio for combined random IO test: 1.50 Periodic FSYNC enabled, calling fsync() each 100 requests. Calling fsync() at the end of test, Enabled. Using synchronous I/O mode Doing random r/w test Threads started! Done. Operations performed: 6000 Read, 4000 Write, 12800 Other = 22800 Total Read 93.75Mb Written 62.5Mb Total transferred 156.25Mb (3.2979Mb/sec) 211.07 Requests/sec executed Test execution summary: total time: 47.3783s total number of events: 10000 total time taken by event execution: 36.6912 per-request statistics: min: 0.0000s avg: 0.0037s max: 0.2687s approx. 95 percentile: 0.0230s Threads fairness: events (avg/stddev): 5000.0000/180.00 execution time (avg/stddev): 18.3456/0.19 [root@RedHat test]# sysbench --test=fileio --num-threads=2 --file-total-size=512M --file-test-mode=rndrw cleanup (清除测试文件) sysbench v0.4.8: multi-threaded system evaluation benchmark Removing test files... [root@RedHat test]# |
2. CPU性能测试
Sysbench采用寻找最大素数的方式测试CPU性能:
[root@RedHat ~]# sysbench --test=cpu help sysbench v0.4.8: multi-threaded system evaluation benchmark cpu options: --cpu-max-prime=N upper limit for primes generator [10000] [root@RedHat ~]# |
参数解析
参数名 |
描述 |
--cpu-max-prime=N |
素数的最大限制,默认为10000; |
测试案例
[root@RedHat ~]# sysbench --test=cpu --cpu-max-prime=20000 run sysbench v0.4.8: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 1 Doing CPU performance benchmark Threads started! Done. Maximum prime number checked in CPU test: 20000 Test execution summary: total time: 124.1761s total number of events: 10000 total time taken by event execution: 123.3658 per-request statistics: min: 0.0051s avg: 0.0123s max: 0.1908s approx. 95 percentile: 0.0171s Threads fairness: events (avg/stddev): 10000.0000/0.00 execution time (avg/stddev): 123.3658/0.00 [root@RedHat ~]# |
3.内存性能测试
[root@RedHat ~]# sysbench --test=memory help sysbench v0.4.8: multi-threaded system evaluation benchmark memory options: --memory-block-size=SIZE size of memory block for test [1K] --memory-total-size=SIZE total size of data to transfer [100G] --memory-scope=STRING memory access scope {global,local} [global] --memory-hugetlb=[on|off] allocate memory from HugeTLB pool [off] --memory-oper=STRING type of memory operations {read, write, none} [write] --memory-access-mode=STRING memory access mode {seq,rnd} [seq] [root@RedHat ~]# |
参数名 |
描述 |
--memory-block-size=SIZE |
内存块大小,默认为1K |
--memory-total-size=SIZE |
传输的数据量,默认为100G |
--memory-scope=STRING |
内存访问是局部local还是全局global,默认为global |
--memory-hugetlb=[on|off] |
从hugetlb中分配内存 |
--memory-oper=STRING |
内存操作类型read, write, none,默认为写 |
--memory-access-mode=STRING |
内存访问模式seq,rnd,默认为seq; |
[root@RedHat test]# sysbench --test=memory --memory-block-size=4k --memory-total-size=64M run |
4.线程性能测试
[root@RedHat ~]# sysbench --test=threads help sysbench v0.4.8: multi-threaded system evaluation benchmark threads options: --thread-yields=N number of yields to do per request [1000] --thread-locks=N number of locks per thread [8] [root@RedHat ~]# |
参数名 |
描述 |
--thread-yields=N |
内存块大小,默认为1K |
--thread-locks=N |
传输的数据量,默认为100G |
测试案例
[root@RedHat test]# sysbench --test=threads --num-threads=64 --thread-yields=100 --thread-locks=2 run sysbench v0.4.8: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 64 Doing thread subsystem performance test Thread yields per test: 100 Locks used: 2 Threads started! Done. Test execution summary: total time: 24.8159s total number of events: 10000 total time taken by event execution: 1575.5529 per-request statistics: min: 0.0002s avg: 0.1576s max: 2.0173s approx. 95 percentile: 0.5627s Threads fairness: events (avg/stddev): 156.2500/12.62 execution time (avg/stddev): 24.6180/0.08 [root@RedHat test]# |
5互斥体性能测试
[root@RedHat ~]# sysbench --test=mutex help sysbench v0.4.8: multi-threaded system evaluation benchmark mutex options: --mutex-num=N total size of mutex array [4096] --mutex-locks=N number of mutex locks to do per thread [50000] --mutex-loops=N number of empty loops to do inside mutex lock [10000] [root@RedHat ~]# |
参数名 |
描述 |
--mutex-num=N |
互斥体数据大小,默认为4096 |
--mutex-locks=N |
每个线程上互斥锁的数目,默认为50000; |
--mutex-loops=N |
互斥锁内空循环的数目,默认为10000 |
测试案例
[root@RedHat test]# sysbench --test=mutex --num-threads=16 --mutex-num=1024 --mutex-locks=10000 --mutex-loops=5000 run sysbench v0.4.8: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 16 Doing mutex performance test Threads started! Done. Test execution summary: total time: 0.0482s total number of events: 16 total time taken by event execution: 0.2271 per-request statistics: min: 0.0015s avg: 0.0142s max: 0.0312s approx. 95 percentile: 0.0126s Threads fairness: events (avg/stddev): 1.0000/0.00 execution time (avg/stddev): 0.0142/0.01 [root@RedHat test]# |
6 OLTP测试
不做分析了
参考资料:
http://sysbench.sourceforge.net/
http://blog.csdn.net/qiudakun/article/details/6891136
http://www.ningoo.net/html/2009/performance_test_tool_sysbench.html
Sysbench - 一种系统性能benchmark的更多相关文章
- sysbench的安装与使用(with MySQL)
sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试. 项目主页: http://sysbench.sourceforge.net/ 安装文档htt ...
- NtQuerySystemInformation的使用(提供50余种信息)
今天,我们主要讨论的是一个函数NtQuerySystemInformation(ZwQuerySystemInformation).当然,你不要小看这么一个函数,它却为我们提供了丰富的系统信息,同时还 ...
- mysql sysbench基准测试
git项目地址: https://github.com/akopytov/sysbench 利用sysbench很容易对mysql做性能基准测试(当然这个工具很强大,除了测试主流数据库性能,还能测试其 ...
- 利用sysbench进行MySQL OLTP基准测试
Preface In order to know clearly about the real performance threshold of database server,we ...
- Flume FileChannel优化(扩展)实践指南
本文系微博运维数据平台(DIP)在Flume方面的优化扩展经验总结,在使用Flume FileChannel的场景下将吞吐率由10M/s~20M/s提升至80M/s~90M/s,分为四个部分进行介绍: ...
- JMH--一款由OpenJDK开发的基准测试工具
什么是JMH JMH 是 OpenJDK 团队开发的一款基准测试工具,一般用于代码的性能调优,精度甚至可以达到纳秒级别,适用于 java 以及其他基于 JVM 的语言.和 Apache JMeter ...
- Linux下一种简单易行的cpu benchmark方法
用Linux自带的bc计算器计算pi值的一种benchmark手段 其实很简单,就是一行命令. time echo “scale=5000; 4*a(1)” | bc -l -q time是计时程 ...
- Ext4 ReiserFS Btrfs 等7种文件系统性能比拼
2009年02月04日 为了满足广大群众的热切需求,今天做了 Ext2.Ext3.Ext4.XFS.JFS.ReiserFS 和 Btrfs 的全面性能测试,对比结果如下: 本次测试所 ...
- 用systemtap对sysbench IO测试结果的分析1
http://www.actionsky.com/docs/archives/171 2016年5月6日 黄炎 近期在一些简单的sysbench IO测试中, 遇到了一些不合常识的测试结果. 从结 ...
随机推荐
- Windows server 2008系统下FTP服务器的安装
一.在 Windows 服务器上安装 FTP 服务 1. 在"开始"菜单上,单击"管理工具",然后单击"服务器管理器". 2. 在" ...
- docker iptables 端口映射 nat
docker iptables 端口映射 nat #!/bin/bash pro='tcp' NAT_Host='Host_A' NAT_Port=8080 Dst_Host='Host_B' ...
- Vim 自动文件头注释与模板定义
Vim 自动文件头注释与模板定义 在vim的配置文件.vimrc添加一些配置可以实现创建新文件时自动添加文件头注释,输入特定命令可以生成模板. 使用方法 插入模式输入模式输入seqlogic[Ente ...
- Dev系列控件的AJAX (转)
介绍Dev系列控件在前台也就是客户端的一些常用方法介绍以及前后台异步通信的方法. 一.Dev Data Edit控件通用属性以及方法: 属性 1.GetEnabled():返回控件是否为可操作状态 2 ...
- 在MVC中如何愉快使用Ajax
前言: 这个故事要从我老大与客户谈需求开始说起.前几天,遇见一个逗比客户,不知道是听了哪个逗比程序员的临终遗言...让我们给他做一个手机端的Web应用出来,还说要使用MVC来做(不是App).马币,客 ...
- Android WiFiDirect 学习(二)——Service Discovery
Service Discovery 简介 在Android WifiDirect学习(一 )中,简单介绍了如何使用WifiDirect进行搜索——连接——传输. 这样会有一个问题,那就是你会搜索到到附 ...
- javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
今天遇到一个问题,那就是当使用for循环批量注册事件处理函数,然后最后通过事件处理函数获取当前元素的索引值的时候会失败,先看一段代码实例: <script type="text/jav ...
- Playground
题意 :求被两点分割的凸包面积的较小值 题意已经给出顺时针啦 就是求以某一个点 和其他所有相邻点组成三角形的面积,然后sum存和求两点的时候就求出那两点的之间所有三角形的和再减掉0点和那两点的面 ...
- NOIP201504推销员
#include<iostream> #include<cstring> #include<algorithm> #include<cmath> #in ...
- hibernate像MySQL数据库里面存值是中文乱码的解决合辑
解决办法一: 1.把数据库表每一行改成gb2312_chinese(使用PHPMyAdmin) 2.导入时候还是不行,因此查网上的资料说hibernate持久化层在传输过程中未设置编码格式,这样在 ...