PCIe固態儲存與HDD普通硬碟效能對比測試
經過兩週的測試,得出以下結果
MySQL-OLTP測試結果:(50張表,每張表1000萬資料,1000個執行緒)
TPS:MySQL在PCIe固態儲存上執行是在HDD上執行的5.63倍
writes:MySQL在PCIe固態儲存上執行是在HDD上執行的5.58倍
reads:MySQL在PCIe固態儲存上執行是在HDD上執行的5.55倍
Response_time:MySQL在PCIe固態儲存上執行比在HDD上執行響應時間快44.45倍
Errors:MySQL在PCIe固態儲存上執行是在HDD上執行錯誤率低83.5倍
隨機IO測試結論:
PCIe固態儲存隨機讀寫IO處理能力是HDD隨機讀寫IO處理能力的20倍
以下是詳細測試過程
準備工作
作業系統:CentOS6.4 64位
D B:MySQL5.6.22 64位
硬 盤:PCIe(Shannon Direct-IO 1.6TB)、HDD
測試工具:sysbench0.5
監控工具:zabix
一、安裝sysbench 0.5
sysbench 0.5相比0.4版本的主要變化是,oltp測試結合了lua指令碼,不需要修改原始碼,通過自定義lua指令碼就可以實現不同業務型別的測試。同時0.5相比0.4需要消耗更多的cpu資源。更新和安裝依賴包
yum -y install gcc yum -y install libtool
安裝bzr客戶端
yum -y install bzr
線上獲取0.5的版本,#下載到當前目錄,檔名為: sysbench_0.5
bzr branch lp:sysbench
cd sysbench_0.5/
執行命令:./autogen.sh,對環境進行清理
./autogen.sh
./configure --with-mysql-includes=/usr/local/mysqla/include/ --with-mysql-libs=/usr/local/mysqla/lib/
# with-mysql-includes 指定MySQL安裝目錄
# with-mysql-libs 指定MySQL lib所在目錄
make && make install
如果遇到以下錯誤
../libtool: line 841: X--tag=CC: command not found
../libtool: line 874: libtool: ignoring unknown tag : command not found
../libtool: line 841: X--mode=link: command not found
../libtool: line 1007: *** Warning: inferring the mode of operation is deprecated.: command not found
../libtool: line 1008: *** Future versions of Libtool will require --mode=MODE be specified.: command not found
../libtool: line 2234: X-g: command not found
../libtool: line 2234: X-O2: command not found
../libtool: line 1954: X-L/usr/local/mysqla/lib/: No such file or directory
../libtool: line 2403: Xsysbench: command not found
../libtool: line 2408: X: command not found
../libtool: line 2415: Xsysbench: command not found
../libtool: line 2550: X-lmysqlclient_r: command not found
../libtool: line 2550: X-lrt: command not found
../libtool: line 2550: X-lm: command not found
../libtool: line 2632: X-L/home/sysopt/src/sysbench-0.4.12/sysbench: No such file or directory
../libtool: line 2550: X-lmysqlclient_r: command not found
../libtool: line 2550: X-lrt: command not found
../libtool: line 2550: X-lm: command not found
../libtool: line 2632: X-L/home/sysopt/src/sysbench-0.4.12/sysbench: No such file or directory
../libtool: line 2550: X-lmysqlclient_r: command not found
../libtool: line 2550: X-lrt: command not found
../libtool: line 2550: X-lm: command not found
可能原因:
1、沒裝依賴包libtool
2、安裝的版本不對(libtool版本過舊)
3、其它原因
解決方法:
1、安裝依賴包libtool
2、libtoo更新到新版本
3、用autoreconf代替autogen.sh,方法如下:
autoreconf -i
configure
make
make install
安裝成功後可通過help命令檢視sysbench幫助
[[email protected] src]# sysbench --help
Missing required command argument.
Usage:
sysbench [general-options]... --test=<test-name> [test-options]... command
General options:
--num-threads=N number of threads to use [1]#使用執行緒數量
--max-requests=N limit for total number of requests [10000]#請求數,預設為10000
--max-time=N limit for total execution time in seconds [0]#執行時間,預設為0表示表示不限制
--forced-shutdown=STRING amount of time to wait after --max-time before forcing shutdown [off]
--thread-stack-size=SIZE size of stack per thread [64K]
--tx-rate=N target transaction rate (tps) [0]
--report-interval=N periodically report intermediate statistics with a specified interval in seconds. 0 disables intermediate reports [0]#0.5的新增引數(預設值0,表示禁用該功能)在指定的時間間隔報告測試資訊,<span style="font-size:12px;">不用等到執行結束時再得到反饋</span>
--report-checkpoints=[LIST,...]dump full statistics and reset all counters at specified points in time. The argument is a list of comma-separated values representing the amount of time in seconds elapsed from start of test when report checkpoint(s) must be performed. Report checkpoints are off by default. []
--test=STRING test to run
--debug=[on|off] print more debugging info [off]
--validate=[on|off] perform validation checks where possible [off]
--help=[on|off] print help and exit
--version=[on|off] print version and exit [off]
--rand-init=[on|off] initialize random number generator [off]#初始化時生成隨機的資料,預設關閉
--rand-type=STRING random numbers distribution {uniform,gaussian,special,pareto} [special]
--rand-spec-iter=N number of iterations used for numbers generation [12]
--rand-spec-pct=N percentage of values to be treated as 'special' (for special distribution) [1]
--rand-spec-res=N percentage of 'special' values to use (for special distribution) [75]
--rand-seed=N seed for random number generator, ignored when 0 [0]
--rand-pareto-h=N parameter h for pareto distibution [0.2]
Log options:
--verbosity=N verbosity level {5 - debug, 0 - only critical messages} [3]
--percentile=N percentile rank of query response times to count [95]
Compiled-in tests:測試專案
fileio - File I/O test #磁碟IO測試
cpu - CPU performance test #CPU運算效能
memory - Memory functions speed test #記憶體分配及傳輸速度
threads - Threads subsystem performance test #POSIX執行緒效能
mutex - Mutex performance test #互斥效能測試
Commands: prepare run cleanup help version
See 'sysbench --test=<name> help' for a list of options for each test.
二、測試
1.MySQL-OLTP測試
資料準備
[[email protected] sysbench_0.5]# sysbench --mysql-db=sbtest --num-threads=24 --mysql-engine-trx=yes --mysql-table-engine=innodb --rand-type=special --mysql-host=localhost --mysql-port=3307 --mysql-user=root --mysql-password= --mysql-socket=/data1/lib/mysql/mysql.sock
--test=sysbench/tests/db/oltp.lua --oltp_tables_count=50 --oltp-table-size=10000000 --rand-init=on prepare
引數說明:
--mysql-db:指定在哪個資料庫建立測試表,預設為sbtest庫,需要提前建立好
--num-threads:使用多執行緒建立多表,節省準備時間
--mysql-engine-trx=yes 支援事務
--mysql-table-engine:指定儲存引擎,如myisam,innodb,heap,ndbcluster,bdb,maria,falcon,pbxt 預設InnoDB
--test=tests/db/oltp.lua 表示呼叫 tests/db/oltp.lua 指令碼進行 oltp 模式測試
--oltp_tables_count=10 表示會生成 10 個測試表
--oltp-table-size=1000000 表示每個測試表填充資料量為 1000000
--db-driver:指定驅動,預設為Mysql
--rand-init=on 表示每個測試表都是用隨機資料來填充的
#使用1000個執行緒開始測試,讀寫模式。
模擬 對50個表併發OLTP測試,每個表1000萬行記錄,持續壓測時間為 1小時
[[email protected] sysbench_0.5]# sysbench --mysql-engine-trx=yes --mysql-table-engine=innodb --mysql-host=localhost --mysql-port=3307 --mysql-user=root --mysql-password= --mysql-socket=/data1/lib/mysql/mysql.sock --test=sysbench/tests/db/oltp.lua --oltp_tables_count=50
--oltp-table-size=100000000 --num-threads=1000 --oltp-read-only=off --report-interval=10 --rand-type=uniform --max-time=3600 --max-requests=0 --percentile=95 run >>/data1/sysbench-rw.txt
引數說明
--oltp-read-only=off 表示不要進行只讀測試,也就是會採用讀寫混合模式測試
--report-interval=10 表示每10秒輸出一次測試進度報告
--rand-type=uniform:資料分佈模式,special表示存在熱點資料,uniform表示非熱點資料模式: uniform(固定),gaussian(高斯),special(特定的),pareto(帕累託)
--max-time=3600 表示最大執行時長為 3600秒
--max-requests=0 表示總請求數為 0,因為上面已經定義了總執行時長,所以總請求數可以設定為 0;也可以只設定總請求數,不設定最大執行時長
--percentile=95 表示設定取樣比例,預設是 95%,即丟棄5%的長請求,在剩餘的95%裡取最大值
可選引數:
--oltp-point-selects:在一個事務裡面Point select的數量,預設為10
--oltp-range-size:range查詢的範圍大小,預設100,應該小於oltp-table-size
--oltp-simple-ranges:在一個事務裡面簡單range查詢的數量,預設1
--oltp-sum-ranges:在一個事務裡面SUM range查詢的數量,預設1
--oltp-order-ranges:在一個事務裡面ORDER range查詢的數量,預設1
--oltp-distinct-ranges:在一個事務裡面DISTINCT range查詢的數量,預設1
注意:我這裡將測試中輸出資訊存放到一個文字檔案裡,便於用監控展示成圖表形式,這樣更直觀
監控結果:
PCIe固態儲存-IO
HDD-IO
PCIe固態儲存-TPS
HDD-TPS
PCIe固態儲存-writes
HDD-Writes
PCIe固態儲存-reads
HDD-Reads
PCIe固態儲存-Response-time
HDD-Response_time
PCIe固態儲存-errors
HDD-Errors
結論:(監控引數相同的情況下--oltp_tables_count=50 --oltp-table-size=100000000 --num-threads=1000 --oltp-read-only=off --rand-type=uniform )
TPS:MySQL在PCIe固態儲存上執行是在HDD上執行的5.63倍
writes:MySQL在PCIe固態儲存上執行是在HDD上執行的5.58倍
reads:MySQL在PCIe固態儲存上執行是在HDD上執行的5.55倍
Response_time:MySQL在PCIe固態儲存上執行比在HDD上執行響應時間快44.45倍
Errors:MySQL在PCIe固態儲存上執行是在HDD上執行錯誤率低83.5倍
2、隨機IO測試(這裡就不再上圖了)
資料準備(建立70G檔案)注意:檔案大小需要大於記憶體大小
sysbench --test=fileio --file-total-size=70G --file-test-mode=rndrw --init-rng=on --max-time=300 --max-requests=0 prepare
測試階段
sysbench --test=fileio --file-total-size=70G --file-test-mode=rndrw --init-rng=on --max-time=300 --max-requests=0 run
清楚測試資料
sysbench --test=fileio --file-total-size=70G --file-test-mode=rndrw --init-rng=on --max-time=300 --max-requests=0 clean
隨機讀寫混合
PCIe固態儲存
Operations performed: 1789098 reads, 1192732 writes, 3816704 Other= 6798534 Total
Read 27.299Gb Written 18.2Gb Total transferred 45.499Gb (155.3Mb/sec)
9939.43 Requests/sec executed
General statistics:
total time: 300.0001s
total number of events: 2981830
total time taken by event execution: 214.9376s
response time:
min: 0.00ms
avg: 0.07ms
max: 7.26ms
approx. 95 percentile: 0.23ms
Threads fairness:
events (avg/stddev): 2981830.0000/0.00
execution time (avg/stddev): 214.9376/0.00
HDD
Operations performed: 85851 reads, 57234 writes, 183040 Other =326125 Total
Read 1.31Gb Written 894.28Mb Totaltransferred 2.1833Gb (7.4523Mb/sec)
476.95 Requests/sec executed
General statistics:
total time: 300.0024s
total number of events: 143085
total time taken by event execution: 291.8164s
response time:
min: 0.01ms
avg: 2.04ms
max: 170.33ms
approx. 95 percentile: 5.22ms
Threads fairness:
events (avg/stddev): 143085.0000/0.00
execution time (avg/stddev): 291.8164/0.00
隨機寫
PCIe固態儲存
Operations performed: 0 reads, 10441500 writes, 13365074 Other =23806574 Total
Read 0b Written 159.32Gb Totaltransferred 159.32Gb (271.91Mb/sec)
17402.24 Requests/sec executed
General statistics:
total time: 600.0090s
total number of events: 10441500
total time taken by event execution: 168.8168s
response time:
min: 0.00ms
avg: 0.02ms
max: 0.71ms
approx. 95 percentile: 0.02ms
Threads fairness:
events (avg/stddev): 10441500.0000/0.00
execution time(avg/stddev): 168.8168/0.00
HDD
Operationsperformed: 0 reads, 427200 writes,546689 Other = 973889 Total
Read 0b Written 6.5186Gb Total transferred 6.5186Gb (11.125Mb/sec)
712.00 Requests/sec executed
Generalstatistics:
total time: 600.0002s
total number of events: 427200
total time taken by event execution:10.5053s
response time:
min: 0.01ms
avg: 0.02ms
max: 29.30ms
approx. 95 percentile: 0.03ms
Threadsfairness:
events (avg/stddev): 427200.0000/0.00
execution time (avg/stddev): 10.5053/0.00
隨機讀
PCIe固態儲存
Operationsperformed: 3898994 reads, 0 writes, 0Other = 3898994 Total
Read59.494Gb Written 0b Total transferred 59.494Gb (203.07Mb/sec)
12996.64Requests/sec executed
Generalstatistics:
total time: 300.0001s
total number of events: 3898994
total time taken by event execution:294.7603s
response time:
min: 0.00ms
avg: 0.08ms
max: 30.09ms
approx. 95 percentile: 0.24ms
Threadsfairness:
events (avg/stddev): 3898994.0000/0.00
execution time (avg/stddev): 294.7603/0.00
HDD
Operationsperformed: 131643 reads, 0 writes, 0Other = 131643 Total
Read2.0087Gb Written 0b Total transferred 2.0087Gb (6.8564Mb/sec)
438.81 Requests/sec executed
Generalstatistics:
total time: 300.0014s
total number of events: 131643
total time taken by event execution:299.7703s
response time:
min: 0.00ms
avg: 2.28ms
max: 121.94ms
approx. 95 percentile: 5.34ms
Threadsfairness:
events (avg/stddev): 131643.0000/0.00
execution time (avg/stddev): 299.7703/0.00
結論:
PCIe固態儲存隨機讀寫IO處理能力是HDD隨機讀寫IO處理能力的20倍
相關推薦
PCIe固態儲存與HDD普通硬碟效能對比測試
經過兩週的測試,得出以下結果 MySQL-OLTP測試結果:(50張表,每張表1000萬資料,1000個執行緒) TPS:MySQL在PCIe固態儲存上執行是在HDD上執行的5.63倍 writes:MySQL在PCIe固態儲存上執行是在HDD上執行的5.58倍 read
go-gob序列化/反序列化與讀寫檔案效能對比測試
測試目的:個人開源專案ZCache需對資料進行持久化儲存,在此驗證兩種技術方案:gob序列化/反序列化和直接讀寫檔案的效能 待測試程式碼 package main import ( gob "encoding/gob" "encoding/json" "fmt" "
MyISAM與InnoDB兩者之間區別與選擇,總結,效能對比
1、MyISAM:預設表型別,它是基於傳統的ISAM型別,ISAM是Indexed Sequential Access Method (有索引的順序訪問方法) 的縮寫,它是儲存記錄和檔案的標準方法。不是事務安全的,而且不支援外來鍵,如果執行大量的select,insert MyISAM比較適合。 2、Inn
DocumentFragment物件詳解,與傳統DOM操作效能對比
一、前言 最近專案不是很忙,所以去看了下之前總想整理的重匯和迴流的相關資料,關於迴流優化,提到了DocumentFragment的使用,這個物件在3年前我記得是有看過的,但是一直沒深入瞭解過,所以這裡做個整理。後面會把重匯,迴流也做個整理,不鴿。 二、DocumentFragment物件是什麼? MDN
ngx_lua與go高併發效能對比
nginx在處理高併發能力上非常出色,而go作為新時代網際網路語言,在設計之初就為實現高併發。 ngx_lua由nginx來處理網路事件,並使用協程來實現非阻塞,從而實現高併發。 go語言級別提供非阻塞的api,同樣使用協程來提供高併發處理。 我們來測試對比一下兩者的效能。 ngx_lua:Tengin
evpp效能測試(2): 與Boost.Asio進行吞吐量對比測試
簡介 Boost.Asio是用於網路和低層IO程式設計的跨平臺C++庫,為開發者提供了C++環境下穩定的非同步程式設計模型。也是業內公認的優秀的C++網路庫代表。一般來講,其他的網路庫的效能如果不能與asio做一下全面的對比和評測,就不能令人信服。 本次測試
HAWQ與Hive查詢效能對比測試
一、實驗目的 本實驗通過模擬一個典型的應用場景和實際資料量,測試並對比HAWQ內部表、外部表與Hive的查詢效能。二、硬體環境1. 四臺VMware虛機組成的Hadoop叢集。2. 每臺機器配置如下:(1)15K RPM SAS 100GB(2)Intel(R)
YDB與spark SQL在百億級資料上的效能對比測試
按照時間逆序排序可以說是很多日誌系統的硬指標。在延雲YDB系統中,我們改變了傳統的暴力排序方式,通過索引技術,可以超快對資料進行單列排序,不需要全表暴力掃描,這個技術我們稱之為blockSort,目前支援tlong,tdouble,tint,tfloat四種
通過稀疏擴充套件資訊濾波實現SLAM,並與EKF-SLAM進行效能對比
綜述:對於EKF-SLAM需要對已存在的環境特徵點和機器人本身,計算一個符合高斯分佈的後驗概率 模型,不幸的是EKF-SLAM計算需要很大的記憶體空間,並且隨著路標的增加,記憶體需求和計算量成平 方倍增長,計算量大約為路標N的平方。對於EKF-SLAM只能處理包含幾百個
Mysql資料庫Innodb與MyISAM的效能對比測試
由於近期有個專案對系統性能要求很高,技術選型上由於種種原因已經確定使用Mysql資料庫,接下來就是要確定到底使用哪種儲存引擎。我們的應用是典型的寫多讀少,寫入內容為也很短,對系統的穩定性要求很高。所以儲存引擎肯定就定在廣泛使用的Innodb和MyISAM之中了。
紅黑樹與小根堆效能對比
因為nginx與libevent採用了不同的資料結構來維護超時事件,其中nginx採用了紅黑樹,libevent採用的是小根堆,所以一直比較好奇,這兩種資料結構誰在這種應用場景下更合適(當做優先權佇列來用) 好吧,好奇那就試一下就好了。。。 小根堆就用前面的那篇文章中自己實現的那個程式碼,程式碼比較挫,也沒
tmpfs與ext3效能對比測試
author:skate time:2011/08/22 磁碟的大檔案的copy測試 [email protected] ~]# du -m --max-depth=1 /tmp/dhexp 1189 /tmp/dhexp [[email pr
POI與JXL的實戰效能對比
目前我所負責的系統中有POI和JXL兩種方式的匯出資料實現。 專案初期資料量不大一般使用JXL的方式,可以滿足需求,後來在進行一些盤點,等月度出入庫查詢報表統計的時候出現了超過最大sheet
Quarkus框架入門之三:Quarkus與Spring Boot啟動效能對比
開篇 為什麼要從安逸的Spring全家桶切換到Quarkus框架呢?Quarkus有什麼優勢?除了能夠編譯成Native Appl
類與結構體效能對比測試——以封裝網路心跳包為例
[toc] #1.背景 接上篇文章[深入淺出C#結構體——封裝乙太網心跳包的結構為例](https://www.cnblogs.com/JerryMouseLi/p/12606920.html),使用結構體效能不佳,而且也說明了原因。本篇文章詳細描述了以類來封裝網路心跳包的優缺點,結果大大提升瞭解析效能。
ASP.NET Core 程序內與程序外的效能對比
# ASP.NET Core 程序內與程序外的效能對比 本文內容是《深入去淺出ASP.NET Core》提供的擴充套件內容,畢竟在書裡說程序內外的效能說明對比,對於初學者而言,稍微複雜了點。 我在B站的視訊是基於.NET Core 2.2提供的案例,在書籍中提供的是.NET Core 3.1的案例。有人
Oracle Spatial分區應用研究之二:按縣分區與按省分區對比測試報告
oracle 出了 ali 明顯 基礎上 實驗方法 樣本 空間查詢 使用場景 1、實驗目的 在上一輪的實驗中,oracle 11g r2版本下,在87縣市實驗數據的基礎上,比較了分表與分區的效率,得出了分區+全局索引效率較高的結論(見上一篇博客)。不過我們尚未比較過
Flutter和iOS原生效能對比測試
開篇 剛剛起步看了兩個月Flutter,感覺和之前那些跨平臺框架略有不同,我認為已經到跨平臺時代的3.0(隨便說說哈)。 現在Flutter是谷歌主推的一個東西,感覺還是有點期待。下面是一個Flutter的Demo和自己做的一個基本功能差不多的iOS原生Demo做一個性能對比。 正文 下文使用,從記憶體
傳統、VHD、VHDX效能對比測試(轉帖)
nkc3g4發表於 2014-4-30 16:24:41 傳統、VHD、VHDX效能對比測試 - Windows To Go優盤系統 - 蘿蔔頭IT論壇 - Powered by Discuz! https://bbs.luobotou.org/forum.php?mod=viewthread&ti
java工作筆記:web 程式設計中關於jni和jna兩種工具操作和效能對比測試
第一次發部落格有點緊張哈。 最近剛剛公司轉崗從底層C語言的編寫到做Java的web restful架構。其中需要呼叫底層C++程式碼庫。所以對於選擇哪種方法從Java呼叫C的程式碼做了簡單地學習和對比測試。在這裡把他們貼出了。希望能有大神出來指點