在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工作负载运行时,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)