前言

sysbench 是一个多线程的 Linux 测试工具,可以进行 CPU 性能测试。对 CPU 的测试,主要是进行素数的加法运行。

常用参数

–cpu-max-prime: 素数生成数量的上限

如果设置为 3,则表示 2、3、5(要计算 1-5 共 5 次);如果设置为 10,则表示 2、3、5、7、11、13、17、19、23、29(要计算 1-29 共 29 次)

  • 默认值为 10000

–threads: 线程数

如果设置为 1,则 sysbench 仅启动 1 个线程进行素数的计算;如果设置为 2,则 sysbench 会启动 2 个线程,同时分别进行素数的计算

  • 默认值为 1,即单线程

–time: 运行时长,单位秒

如果设置为 5,则 sysbench 会在 5 秒内循环往复进行素数计算,从输出结果可以看到在 5 秒内完成了几次;

比如配合–cpu-max-prime=3,则表示第一轮算得 3 个素数, 如果时间还有剩就再进行一轮素数计算,直到时间耗尽。

  • 默认值为 10

相同时间,比较的是谁完成的 event 多

–events: event 上限次数

每完成一轮就叫一个 event,设置为 100,则表示当完成 100 次 event 后,即使时间还有剩,也停止运行

  • 默认值为 0,则表示不限 event 次数

相同 event 次数,比较的是谁用时更少

例子

sysbench cpu --cpu-max-prime=20000 --threads=2 --time=30 run
sysbench 1.0.15 (using system LuaJIT 2.0.5)

Running the test with following options:
Number of threads: 2             #线程个数
Initializing random number generator from current time


Prime numbers limit: 20000     #素数上线

Initializing worker threads...

Threads started!

CPU speed:
    events per second:   633.14      #所有线程平均每秒完成event的个数

General statistics:
    total time:                          30.0024s       #总共消耗的时间
    total number of events:              18997    #所有线程完成的event个数

Latency (ms):
         min:                                    3.11            #完成1次event的最少耗时
         avg:                                    3.16            #所有event的平均耗时
         max:                                    8.80           # 完成1次event的最多耗时
         95th percentile:                        3.25       #95%次event完成的时间
         sum:                                59995.90        #所有线程的时间综合

Threads fairness:
    events (avg/stddev):           9498.5000/5.50     #平均每个线程完成envet的次数,后一个值是标准差
    execution time (avg/stddev):   29.9980/0.00    #平均每个线程平均耗时,后一个值是标准差

#stddev(标准差): 在相同时间内,多个线程分别完成的素数计算次数是否稳定,如果数值越低,则表示多个线程的结果越接近(即越稳定)。该参数对于单线程无意义。

总结

如果多台服务器进行 CPU 性能对比,当线程和素数个数一定时:相同时间,比较 event;相同 event,比较时间;时间和 event 都相同,比较 stddev(标准差)。