使用sysbench进行基准测试(摘自gentoo linux)

安装sysbench

在Debian / Ubuntu上,可以按以下方式安装sysbench

sudo apt-get install sysbench

测试文件读写负载测试

您将需要创建一组测试文件才能使用。建议该大小大于可用内存,以确保文件缓存不会对工作负荷产生太大影响。

sysbench --test=fileio --file-total-size=128G prepare
sysbench --test=fileio --file-total-size=128G --file-test-mode=rndrw --max-time=300 --max-requests=0 run
sysbench --test=fileio --file-total-size=128G cleanup

由于这是文件I / O基准测试,因此您可以告诉sysbench您要运行哪种工作负载:顺序读取,写入或随机读取,写入或组合。在上面的示例中,使用了随机读/写(rndrw)。通过–max-time选项提供测试持续时间(以秒为单位)。

运行的输出如下所示:

user $sysbench --test=fileio --file-total-size=32G --file-test-mode=rndrw --max-time=300 --max-requests=0 run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1

Extra file open flags: 0
128 files, 256Mb each
32Gb total file size
Block size 16Kb
Number of random requests for random IO: 0
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!
Time limit exceeded, exiting...
Done.

Operations performed:  14788 Read, 9858 Write, 31488 Other = 56134 Total
Read 231.06Mb  Written 154.03Mb  Total transferred 385.09Mb  (1.2836Mb/sec)
   82.15 Requests/sec executed

Test execution summary:
    total time:                          300.0149s
    total number of events:              24646
    total time taken by event execution: 173.9797
    per-request statistics:
         min:                                  0.01ms
         avg:                                  7.06ms
         max:                                 92.72ms
         approx.  95 percentile:              16.57ms

Threads fairness:
    events (avg/stddev):           24646.0000/0.00
    execution time (avg/stddev):   173.9797/0.00

需要注意的参数指标

Operations performed:  14788 Read, 9858 Write, 31488 Other = 56134 Total
 Read 231.06Mb  Written 154.03Mb  Total transferred 385.09Mb  (1.2836Mb/sec)

可以将这些数字与在不同文件系统,其他系统等上的运行进行比较。

CPU负载测试

当使用CPU工作负载运行时,sysbench将通过将数字除以2到该数字的平方根之间的所有数字进行标准除法来验证素数。如果任何数字的余数为0,则计算下一个数字。您可以想象,这将给CPU带来一些压力,但只会对非常有限的一组CPU功能造成压力。

可以配置基准测试并发线程数和最大数量以验证它是否是素数。

user $sysbench --test=cpu --cpu-max-prime=20000 --num-threads=2 run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 2

Doing CPU performance benchmark

Threads started!
Done.

Maximum prime number checked in CPU test: 20000


Test execution summary:
    total time:                          18.0683s
    total number of events:              10000
    total time taken by event execution: 36.1322
    per-request statistics:
         min:                                  3.44ms
         avg:                                  3.61ms
         max:                                  6.77ms
         approx.  95 percentile:               5.05ms

Threads fairness:
    events (avg/stddev):           5000.0000/7.00
    execution time (avg/stddev):   18.0661/0.00

需要注意的参数指标

 total time:                          18.0683s
 total time taken by event execution: 36.1322

事件执行时间是纯计算部分。如果您使用多个线程运行测试,则它是所有线程时间的总和。总时间是端到端时间,因此包括线程共享内存访问的开销(尽管通常可以忽略不计)。与事件执行时间不同,总时间是从开始到结束的持续时间(因此线程的各个时间都不会达到顶点)。

尽管旧版本的sysbench限制了事件数量,但是sysbench> = 1.0默认情况下会限制总执行时间,在这种情况下,应将事件总数或每秒事件数用作性能指标,而不是总执行次数时间。

多线程负载测试

随着线程的工作量,每个工作线程将被分配一个互斥锁(一种锁),并且对于每次执行,都会循环多次(记录为yield的数量),在该循环中,它会获取该锁,yield(意味着它要求调度程序停止运行,然后将其放回运行队列的末尾),然后在再次计划执行时,将其解锁。

通过调整各种参数,可以模拟具有相同锁的高并发线程,或具有几个不同锁的高并发线程等情况。

user $sysbench --test=threads --thread-locks=1 --max-time=20s run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1

Doing thread subsystem performance test
Thread yields per test: 1000 Locks used: 1
Threads started!
Time limit exceeded, exiting...
Done.


Test execution summary:
    total time:                          20.0052s
    total number of events:              1894
    total time taken by event execution: 19.9653
    per-request statistics:
         min:                                 10.22ms
         avg:                                 10.54ms
         max:                                 13.42ms
         approx.  95 percentile:              10.71ms

Threads fairness:
    events (avg/stddev):           1894.0000/0.00
    execution time (avg/stddev):   19.9653/0.00

使用该–max-time选项时,要用于比较系统的数字是每个请求的统计信息。在上述情况下,单个请求(平均为10.54ms)已运行lock-yield-unlock过程1000次。或换种说法,平均锁定产出率解锁过程平均花费约10.54微秒。

互斥量负载测试

使用互斥量工作负载时,sysbench应用程序将为每个线程运行一个请求。该请求首先会给CPU带来一些压力(使用简单的递增循环,通过–mutex-loops参数),之后它会接受随机互斥锁(锁),增加全局变量并再次释放锁。重复执行此过程几次,次数由锁数(–mutex-locks)标识。随机互斥量取自根据–mutex-num参数确定大小的池。

user $sysbench --test=mutex --num-threads=64 run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 64

Doing mutex performance test
Threads started!
Done.


Test execution summary:
    total time:                          0.5510s
    total number of events:              64
    total time taken by event execution: 27.9994
    per-request statistics:
         min:                                 15.40ms
         avg:                                437.49ms
         max:                                520.51ms
         approx.  95 percentile:             516.51ms

Threads fairness:
    events (avg/stddev):           1.0000/0.00
    execution time (avg/stddev):   0.4375/0.07

尽管必须考虑线程将从可用池中获取随机互斥量,但是这种运行的持续时间很重要。这个随机因素可能会稍微影响结果。

内存负载测试

在sysbench中使用内存测试时,基准测试应用程序将分配一个内存缓冲区,然后每次对其指针大小(例如32bit或64bit)进行读取或写入,并执行直到读取总缓冲区大小为止来自或写入。然后重复此操作,直到达到提供的体积()。用户可以提供多个线程(),缓冲区()中的不同大小以及请求的类型(读或写,顺序或随机)。 --memory-total-size–num-threads–memory-block-size

user $sysbench --test=memory --num-threads=4 run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 4

Doing memory operations speed test
Memory block size: 1K

Memory transfer size: 102400M

Memory operations type: write
Memory scope type: global
Threads started!
Done.

Operations performed: 104857600 (2320057.25 ops/sec)

102400.00 MB transferred (2265.68 MB/sec)


Test execution summary:
    total time:                          45.1961s
    total number of events:              104857600
    total time taken by event execution: 117.7050
    per-request statistics:
         min:                                  0.00ms
         avg:                                  0.00ms
         max:                                 18.72ms
         approx.  95 percentile:               0.00ms

Threads fairness:
    events (avg/stddev):           26214400.0000/124550.07
    execution time (avg/stddev):   29.4263/0.18

需要注意的参数指标

Operations performed: 104857600 (2320057.25 ops/sec)
 102400.00 MB transferred (2265.68 MB/sec)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值