1. 程式人生 > 其它 >使用sysbench 壓測

使用sysbench 壓測

1.sysbench基礎知識

sysbench的cpu測試是在指定時間內,迴圈進行素數計算

素數(也叫質數)就是從1開始的自然數中,無法被整除的數,比如2、3、5、7、11、13、17等。程式設計公式:對正整數n,如果用2到根號n之間的所有整數去除,均無法整除,則n為素數

它主要包括以下幾種方式的測試型別:
1. cpu 處理器效能
2. threads 執行緒排程器效能
3. mutex 互斥鎖效能
4. memory 記憶體分配及傳輸速度
5. fileio 檔案IO效能
6. oltp 資料庫效能(OLTP基準測試)
 

2.sysbench安裝

# CentOS7下可使用yum安裝
yum install sysbench

3.CPU壓測

1)壓測命令

 # 預設引數,素數上限10000,時間10秒,單執行緒 sysbench cpu run

2)常用引數

--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個素數, 如果時間還有剩就再進行一輪素數計算,直到時間耗盡。 每完成一輪就叫一個event
- 預設值為10
- 相同時間,比較的是誰完成的event多

--time: 執行時長,單位秒
- 若設定為100,則表示當完成100次event後,即使時間還有剩,也停止執行
- 預設值為0,則表示不限event次數
- 相同event次數,比較的是誰用時更少

3)案例結果分析

執行命令
# 素數上限2萬,預設10秒,2個執行緒
sysbench cpu --cpu-max-prime=20000 --threads=2 run

結果分析
sysbench 1.0.9 (using system LuaJIT 2.0.4)
Running the test with following options:
Number of threads: 2 // 指定執行緒數為2
Initializing random number generator from current time
Prime numbers limit: 20000 // 每個執行緒產生的素數上限均為2萬個
Initializing worker threads...
Threads started!

CPU speed:
    events per second: 650.74 // 所有執行緒每秒完成了650.74次event

General statistics:
    total time: 10.0017s // 共耗時10秒
    total number of events: 6510 // 10秒內所有執行緒一共完成了6510次event

Latency (ms):
         min: 3.03 // 完成1次event的最少耗時3.03秒
         avg: 3.07 // 所有event的平均耗時3.07毫秒
         max: 3.27 // 完成1次event的最多耗時3.27毫秒
         95th percentile: 3.13 // 95%次event在3.13秒毫秒內完成
         sum: 19999.91 // 每個執行緒耗時10秒,2個執行緒疊加耗時就是20秒

Threads fairness:
    events (avg/stddev): 3255.0000/44.00 // 平均每個執行緒完成3255次event,標準差為44
    execution time (avg/stddev): 10.0000/0.00 // 每個執行緒平均耗時10秒,標準差為0
event: 完成了幾輪的素數計算
stddev(標準差): 在相同時間內,多個執行緒分別完成的素數計算次數是否穩定,如果數值越低,則表示多個執行緒的結果越接近(即越穩定)。該引數對於單執行緒無意義。

4)結果分析

如果有2臺伺服器進行CPU效能對比,當素數上限和執行緒數一致時:

  • 相同時間,比較event
  • 相同event,比較時間
  • 時間和event都相同,比較stddev(標準差)

參考:linux sysbench (一): CPU效能測試詳解 - seasonzone - 部落格園 (cnblogs.com)

 

4.fileio 檔案IO效能壓測

1)測試命令

# 執行緒數=4 每隔4s輸出一次結果 測試時間=60s
# 檔案數=2 檔案總大小=4G 檔案操作模式=隨機讀寫
# 塊大小 16384
sysbench --threads=4 --report-interval=4 --time=60 --test=fileio --file-num=2 --file-total-size=4G --file-test-mode=rndrw prepare

sysbench --threads=4 --report-interval=4 --time=60 --test=fileio --file-num=2 --file-total-size=4G --file-test-mode=rndrw run

sysbench --threads=4 --report-interval=4 --time=60 --test=fileio --file-num=2 --file-total-size=4G --file-test-mode=rndrw cleanup

2)I/O效能測試引數

# fileio options([]為預設引數):
  --file-num=N                  # 建立的檔案數量 [128]
  --file-block-size=N           # 在所有IO操作中使用的塊大小 [16384]
  --file-total-size=SIZE        # 要建立的檔案的總大小 [2G]
  --file-test-mode=STRING       # 測試模式 {seqwr(順序寫), seqrewr(順序重寫), seqrd(順序讀), rndrd(隨機讀), rndwr(隨機寫), rndrw(隨機讀寫)}
  --file-io-mode=STRING         # 檔案操作模式 {sync(同步),async(非同步),mmap} [sync]
  --file-extra-flags=[LIST,...] # 用於開啟檔案的附加標誌列表 {sync,dsync,direct} []
  --file-fsync-freq=N           # 執行N條請求數量後執行fsync() (0 - don't use fsync()) [100]
  --file-fsync-all[=on|off]     # 每條寫指令後執行fsync() [off]
  --file-fsync-end[=on|off]     # 測試執行後執行fsync() [on]
  --file-fsync-mode=STRING      # 同步方式 {fsync, fdatasync} [fsync]
  --file-merged-requests=N      # 允許範圍內,最多合併IO請求數量 (0 - don't merge) [0]
  --file-rw-ratio=N             # 組合測試讀/寫比率 [1.5]

3)案例結果分析

Extra file open flags: (none)
2 files, 2GiB each
4GiB total file size
Block size 16KiB
Number of IO requests: 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
Initializing worker threads...

Threads started!

[ 4s ] reads: 155.03 MiB/s writes: 103.35 MiB/s fsyncs: 329.73/s latency (ms,95%): 0.099 # 讀速度 寫速度 fsyncs()呼叫次數
[ 8s ] reads: 141.36 MiB/s writes: 94.24 MiB/s fsyncs: 302.25/s latency (ms,95%): 0.095
[ 12s ] reads: 187.62 MiB/s writes: 125.08 MiB/s fsyncs: 400.25/s latency (ms,95%): 0.097
...# 中間輸出部分刪除
[ 56s ] reads: 139.68 MiB/s writes: 93.11 MiB/s fsyncs: 297.98/s latency (ms,95%): 0.097
[ 60s ] reads: 178.84 MiB/s writes: 119.23 MiB/s fsyncs: 381.53/s latency (ms,95%): 0.099

File operations:
    reads/s:                      9536.35 			# 讀操作/s
    writes/s:                     6357.60			# 寫操作/s
    fsyncs/s:                     318.01			# fsyncs操作/s

Throughput:
    read, MiB/s:                  149.01			 # 讀速度
    written, MiB/s:               99.34				 # 寫速度

General statistics:
    total time:                          60.0075s    # 測試時間
    total number of events:              972876		 # events總數

Latency (ms):
         min:                                    0.00 # 最小耗時 數值太小,輸出精度不夠
         avg:                                    0.24 # 平均耗時
         max:                                 1569.96 # 最大耗時
         95th percentile:                        0.10 # 95%events操作耗時
         sum:                               237799.11 # 所有執行緒的耗時總和

Threads fairness:
    events (avg/stddev):           243219.0000/683.34 # 平均每執行緒完成events數/標準差
    execution time (avg/stddev):   59.4498/0.00 	  # 平均每執行緒執行時間/標準差

參考:(6條訊息) Sysbench效能測試(四): 檔案I/O效能測試_-Obliviate的部落格-CSDN部落格

 

5.OLTP資料庫效能(OLTP基準測試)

 使用sysbench 做資料庫效能壓測。需要現在伺服器上建立測試庫

》》create database db1;

1.初始化壓測資料, 壓測完成之後需要刪除

sysbench --db-driver=mysql --time=90 --threads=4 --report-interval=10 --mysql-host=127.0.0.1  --mysql-port=3306 --mysql-user=root --mysql-password='11111111111' --mysql-db=db1 --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable  prepare 

引數:

–mysql-db=test         //測試資料庫

–mysql-user=root        //使用者名稱

–myssql-password=123456   //密碼

--tables / –oltp-tables-count=8      //表的數量

--table_size / –oltp-table-size=100000    //每張表記錄為10萬

–mysql-sock=/var/lib/mysql/mysql.sock //mysql.sock路徑,本地連線時可指定host ip連線,也可直接使用Mysql.sock連線