zoukankan      html  css  js  c++  java
  • Sysbench

    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.51

    测试案例:

    创建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

     

  • 相关阅读:
    《Linux命令行与shell脚本编程大全 第3版》高级Shell脚本编程---07
    《Linux命令行与shell脚本编程大全 第3版》高级Shell脚本编程---05
    shell-查看手机分辨率
    imageView-scaleType 图片压缩属性
    actionbar-displayOptions 属性分析
    setting.system-全局属性的设定
    ActivityChooserView-如何隐藏选择的应用图标
    mIsFunui-判断Funui方法
    setting-在设置中添加新的选项
    install-软件安装跟push的区别
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3221603.html
Copyright © 2011-2022 走看看