91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行sysbench的框架實現

發布時間:2021-11-18 15:56:09 來源:億速云 閱讀:141 作者:柒染 欄目:云計算

如何進行sysbench的框架實現,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

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的框架實現cdn.com/5203d6c360f30a87864cb807a45b43890f2b481c.png">

至此,可以清晰地看到sysbench的框架還是非常好理解。
上面struct里面有個event概念,不同的測試event的定義都不一樣:比如CPU的測試case,一個event是完成求得小于某數(默認10000)的所有質數。比如fileio的測試case,一次read或者一次write操作就是一個event。

sysbench的線程介紹

  1. 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;
}
  1. 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

  1. checkpoints_report線程:如果嫌周期性輸出不夠多,那么可以在某幾個時間點整體輸出,參數項為: --report-checkpoints=[LIST,...]
    還是對CPU測試用例舉例:sysbench cpu --report-checkpoints=3,8 run,截取部分輸出結果如下:

Threads started!
[ 3s ] Checkpoint report:
CPU speed:
    events per second:   923.01General statistics:
    total time:                          3.0001s
    total number of events:              2771Latency (ms):
         min:                                  1.08
         avg:                                  1.08
         max:                                  1.22
         95th percentile:                      1.08
         sum:                               3000.88Threads 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.47General statistics:
    total time:                          8.0001s
    total number of events:              4622Latency (ms):
         min:                                  1.08
         avg:                                  1.08
         max:                                  1.16
         95th percentile:                      1.08
         sum:                               4998.04Threads fairness:
    events (avg/stddev):           4621.0000/0.00
    execution time (avg/stddev):   4.9980/0.00
  1. 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函數主要是做什么呢:

  1. 判斷是否超時,默認是10秒

  2. 判斷是否到達最大event數,如果設置了的話

  3. 就是速率控制。

綜上,大概介紹了sysbench框架的總體實現。

看完上述內容,你們掌握如何進行sysbench的框架實現的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沁水县| 榕江县| 鲁甸县| 黄浦区| 灵宝市| 龙南县| 二连浩特市| 和平区| 彭州市| 邓州市| 调兵山市| 山阴县| 湘阴县| 达拉特旗| 察哈| 望城县| 青铜峡市| 桂阳县| 临夏市| 绥中县| 望江县| 邳州市| 惠东县| 南京市| 南雄市| 普安县| 岚皋县| 尼玛县| 汉川市| 内江市| 河源市| 康平县| 新绛县| 兴义市| 根河市| 舟曲县| 云阳县| 阿拉善左旗| 咸丰县| 沙雅县| 和硕县|