sysbench是一个非常经典的综合性能测试工具,它支持CPU,IO,内存,尤其是数据库的性能测试。那它是怎么做到通用性的呢,总结一句话是大量运用了重载的方法。

sysbench总体架构
sysbench是一个总体框架,它用来操作各个测性能的计算,那各个部门只需要做的一件事情是声明需要的实现。只要理解了这三个struct就可以了:

/ 某个测试用例的整体结构 /
typedef struct sb_test
{
const char *sname;
const char *lname;
/ 下面有具体说明 /
sb_operations_t ops;
sb_builtin_cmds_t builtin_cmds;
sb_arg_t *args;

sb_list_item_t listitem;
} sb_test_t;
/ 某个测试用例的具体操作实现结构 /
typedef struct
{
sb_op_init init; / initialization function */
sb_op_prepare prepare; / called after timers start, but

                                         before thread execution */

sb_op_thread_init thread_init; / thread initialization

                                         (called when each thread starts) */

sb_op_print_mode print_mode; / print mode function */
sb_op_next_event next_event; / event generation function */
sb_op_execute_event execute_event; / event execution function */
sb_op_report report_intermediate; / intermediate reports handler */
sb_op_report report_cumulative; / cumulative reports handler */
sb_op_thread_run thread_run; / main thread loop */
sb_op_thread_done thread_done; / thread finalize function */
sb_op_cleanup cleanup; / called after exit from thread,

                                         but before timers stop */ 

sb_op_done done; / finalize function */
} sb_operations_t;
/ 某个测试用例的三阶段实现结构 /
typedef struct
{
sb_builtin_cmd_func_t help; / print help */
sb_builtin_cmd_func_t prepare; / prepare for the test */
sb_builtin_cmd_func_t run; / run the test */
sb_builtin_cmd_func_t cleanup; / cleanup the test database, files, etc. */
} sb_builtin_cmds_t;
拿最简单的CPU性能计算举例,它需要实现的是:

static sb_test_t cpu_test =
{
.sname = "cpu", /case简称/
.lname = "CPU performance test",/case全称/
.ops = {

.init = cpu_init, /* 初始化case */
.print_mode = cpu_print_mode, /* case启动前,做说明 */
.next_event = cpu_next_event, /* 拿到下一个event的数据 */
.execute_event = cpu_execute_event, /* 具体执行这个event */
.report_cumulative = cpu_report_cumulative,  /* 阶段性报告输出 */
.done = cpu_done /* case结束后,处理干净 */

},
.args = cpu_args /子case需要的参数说明/
};
看到这个后,把一个case需要做的事情描述很清楚了,从需要什么参数,到初始化,逐个event执行,函数定义很清晰。sysbench的其他case也都这样需要一个完整的结构说明,如io操作,则需要多一个case的prepare和cleandown声明。
那sysbench的完整流程是怎样呢?黄色部分是测试用例需要实现的。

至此,可以清晰地看到sysbench的框架还是非常好理解。
上面struct里面有个event概念,不同的测试event的定义都不一样:比如CPU的测试case,一个event是完成求得小于某数(默认10000)的所有质数。比如fileio的测试case,一次read或者一次write操作就是一个event。

sysbench的线程介绍
worker_thread具体实现是怎样呢:欣赏下sysbench.c里面某子线程是如何执行的,代码非常清晰易懂:
static int thread_run(sb_test_t *test, int thread_id)
{
sb_event_t event;
int rc = 0;

while (sb_more_events(thread_id) && rc == 0)
{

event = test->ops.next_event(thread_id);
if (event.type == SB_REQ_TYPE_NULL)break;sb_event_start(thread_id);rc = test->ops.execute_event(&event, thread_id);sb_event_stop(thread_id);

}

return rc;
}
intermediate_report线程:周期性输出性能数据,参数项为:--report-interval=N,对CPU的测试用例举例:sysbench cpu --report-interval=1,截取部分输出结果如下:
Threads started!

[ 1s ] thds: 1 eps: 922.10 lat (ms,95%): 1.08
[ 2s ] thds: 1 eps: 925.19 lat (ms,95%): 1.08
[ 3s ] thds: 1 eps: 926.00 lat (ms,95%): 1.08
[ 4s ] thds: 1 eps: 926.00 lat (ms,95%): 1.08
[ 5s ] thds: 1 eps: 926.00 lat (ms,95%): 1.08
[ 6s ] thds: 1 eps: 926.00 lat (ms,95%): 1.08
[ 7s ] thds: 1 eps: 925.00 lat (ms,95%): 1.08
[ 8s ] thds: 1 eps: 926.02 lat (ms,95%): 1.08
[ 9s ] thds: 1 eps: 925.99 lat (ms,95%): 1.08
[ 10s ] thds: 1 eps: 924.98 lat (ms,95%): 1.08
每一秒输出一个结果,eps是每一秒的event数,lat单位是毫秒,95分位延迟数据是1.08

checkpoints_report线程:如果嫌周期性输出不够多,那么可以在某几个时间点整体输出,参数项为: --report-checkpoints=[LIST,...]
还是对CPU测试用例举例:sysbench cpu --report-checkpoints=3,8 run,截取部分输出结果如下:
Threads started!

[ 3s ] Checkpoint report:
CPU speed:

events per second:   923.01

General statistics:

total time:                          3.0001s
total number of events:              2771

Latency (ms):

     min:                                  1.08avg:                                  1.08max:                                  1.2295th percentile:                      1.08sum:                               3000.88

Threads fairness:

events (avg/stddev):           2773.0000/0.00
execution time (avg/stddev):   3.0009/0.00

[ 8s ] Checkpoint report:
CPU speed:

events per second:   924.47

General statistics:

total time:                          8.0001s
total number of events:              4622

Latency (ms):

     min:                                  1.08avg:                                  1.08max:                                  1.1695th percentile:                      1.08sum:                               4998.04

Threads fairness:

events (avg/stddev):           4621.0000/0.00
execution time (avg/stddev):   4.9980/0.00

tx_rate_controll线程,控制每秒输出量的一个线程:参数项为: --rate=N,默认是不做控制的。
还是拿CPU测试用例举例,控制每秒跑10个event:sysbench cpu run --rate=10,截取部分输出结果如下:
Running the test with following options:
Number of threads: 1
Target transaction rate: 10/sec
Initializing random number generator from current time

Prime numbers limit: 10000

Initializing worker threads...

Threads started!

CPU speed:

events per second:     8.87 #没那么精准哈

输出速率控制在哪里呢?眼尖的人马上可以看到是在sb_more_events函数。那sb_more_events函数主要是做什么呢:

判断是否超时,默认是10秒
判断是否到达最大event数,如果设置了的话
就是速率控制。
综上,大概介绍了sysbench框架的总体实现,关于数据库性能测试容下篇再介绍。

sysbench的框架实现介绍 1相关推荐

  1. sysbench的框架实现介绍

    sysbench是一个非常经典的综合性能测试工具,它支持CPU,IO,内存,尤其是数据库的性能测试.那它是怎么做到通用性的呢,总结一句话是大量运用了重载的方法. sysbench总体架构 /* 某个测 ...

  2. NET Core微服务之路:自己动手实现Rpc服务框架,基于DotEasy.Rpc服务框架的介绍和集成...

    原文:NET Core微服务之路:自己动手实现Rpc服务框架,基于DotEasy.Rpc服务框架的介绍和集成 本篇内容属于非实用性(拿来即用)介绍,如对框架设计没兴趣的朋友,请略过. 快一个月没有写博 ...

  3. Django - Django框架 简单介绍

    Django框架 简单介绍 本文地址: http://blog.csdn.net/caroline_wendy/article/details/29172271 1. 介绍 Django是一个开放源码 ...

  4. python nose测试框架全面介绍十---用例的跳过

    又来写nose了,这次主要介绍nose中的用例跳过应用,之前也有介绍,见python nose测试框架全面介绍四,但介绍的不详细.下面详细解析下 nose自带的SkipTest 先看看nose自带的S ...

  5. .Net Core应用框架Util介绍(四)

    上篇介绍了Util Angular Demo的目录结构和运行机制,本文介绍Util封装Angular的基本手法及背后的动机. Angular应用由Ts和Html两部分构成,本文介绍第一部分. Angu ...

  6. .Net Core应用框架Util介绍(三)

    上篇.Net Core应用框架Util介绍(二)介绍了Util的开发环境,并让你把Demo运行起来.本文将介绍该Demo的前端Angular运行机制以及目录结构. 目录结构 在VS上打开Util De ...

  7. .Net Core应用框架Util介绍(二)

    Util的开源地址 https://github.com/dotnetcore/util Util的开源协议 Util以MIT协议开源,这是目前最宽松的开源协议,你不仅可以用于商业项目,还能把Util ...

  8. python单元测试框架unittest介绍和使用_Python+Selenium框架设计篇之-简单介绍unittest单元测试框架...

    前面文章已经简单介绍了一些关于自动化测试框架的介绍,知道了什么是自动化测试框架,主要有哪些特点,基本组成部分等.在继续介绍框架设计之前,我们先来学习一个工具,叫unittest. unittest是一 ...

  9. Spring框架Runtime介绍(导包)

    一.Spring框架Runtime介绍,如图 1.1 Test: Spring提供测试功能 1.2 Core Container:Spring核心容器,Spring启动的基本条件, 1.2.1 Bea ...

  10. 云计算仿真框架CloudSim介绍

    幻灯片1 云计算仿真框架CloudSim介绍 jiangzw#ihep.ac.cn (以下为本人某次报告做的调研的PPT及其它一些实践记录,为保证清晰度,一些插入的图片较大,可在新标签页中打开) (  ...

最新文章

  1. MySQL数据库 高级查询(一)
  2. 使用xshell上传本地文件到服务器
  3. 推荐使用:Vue.js ReactJS Angular 2 AngularJS
  4. netty cpu 占用率 高_Netty 是如何支撑高性能网络通信的?
  5. linux服务器非root用户安装Anaconda,并配置tensorflow/pytorch
  6. 商户管理后台/消费统计管理/云平台商户端管理后台原型/PaaS金融服务平台商户端管理后台原型/企业管理系统后台/账户管理/工单管理/充值管理/汇款单管理/余额管理/用户管理/认证管理/web后台原型
  7. php pg connect 扩展,php安装gnupg扩展
  8. 深度访谈: 怎样玩转天猫?看这九本书就够了
  9. 热敏打印机解析(非热转印)
  10. Windows自建虚拟机搭建kms激活服务器激活正版系统教程
  11. windows 双开微信
  12. 和张哥的那些天,互联网人的潜规则
  13. 详解 C语言 青蛙跳台阶问题
  14. python 3 爬取12306余票:升级版-----图形化界面
  15. vuepress-theme-reco 博客主题使用
  16. 【C语言航路】第一站:初识C语言(三)
  17. 程序员普遍用gmail_使Gmail更好的最佳Chrome扩展程序
  18. 商业智能在医疗卫生领域的应用与前景
  19. ybt1003:对齐输出
  20. 华为ensp园区网络设计与实施

热门文章

  1. 5.20 考试 20 未完
  2. DOM的利用冒泡做的一个小程序
  3. 最大值、数据排序、九九乘法表、杨辉三角
  4. 中国历史上成功的两人合作, 改进, 提高的例子
  5. JAVA总结实录01 : 异常处理 try-catch-finally
  6. Java Socket编程(一)TCP/IP简介
  7. 免费CMS系统的广告如何去掉
  8. 业务员的3个经典故事
  9. Bellman-ford算法与Dijkstra算法(RIP和OSPF的基本算法)
  10. FeelYourSound MelodicFlow for Mac - 旋律制作神器