SSD硬盤配置最佳實踐
一、測試背景
服務(wù)器升級SSD后,速度和性能沒有得到應(yīng)有的提升,原因是沒有正確使用SSD,主要是raid、linux、mysql數(shù)據(jù)庫等相關(guān)參數(shù)沒有正確的配置,本文對SSD的相關(guān)參數(shù)進行了對比性能測試,根據(jù)相關(guān)資料以及測試結(jié)果得出相關(guān)結(jié)論,了解實用場景以及對應(yīng)優(yōu)勢。
二、測試環(huán)境
- 主機:172.20.166.52
- Cpu:32 * Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz
- 內(nèi)存:129G
- 操作系統(tǒng):CentOS release 6.6
- Sysbench:Sysbench 0.5
- SSD硬盤:800G*6 raid5
- 主機:172.20.166.23
- Cpu:32 * Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz
- 內(nèi)存:129G
- 操作系統(tǒng):CentOS release 6.6
- Sysbench:Sysbench 0.5
- SSD硬盤:800G*6 raid10 /raid0
三、測試工具及內(nèi)容
使用Sysbench對相同硬件、軟件環(huán)境的raid、linux、mysql等相關(guān)參數(shù)進行io性能測試、mysql性能測試,對比io性能。
IO性能測試Sysbench參數(shù):
MySQL性能測試Sysbench參數(shù):
四、測試結(jié)果
1、Linux系統(tǒng)參數(shù)測試結(jié)果
Linux對比測試參數(shù)如下:
對Linux操作系統(tǒng)測試了5組參數(shù),分別如上圖表所示,由測試數(shù)據(jù)可得出如下結(jié)論:
- 關(guān)閉NUMA,對SSD硬盤性能提高較大;
- O調(diào)度算法采用Deadline和Noop性能差距不大,Noop調(diào)度算法性能略高于Deadline;
- rotational、read_ahead_kb、rq_affinity參數(shù)的調(diào)整對SSD硬盤性能幾乎沒有影響,建議使用默認配置。
2、Raid參數(shù)測試結(jié)果
Raid對比測試參數(shù)如下:
BGI(Background initialization):
開啟BGI,創(chuàng)建好Raid陣列后不必等待初始化完成就可以開始使用,比如分區(qū)和格式化,但是系統(tǒng)仍然在后臺檢查磁盤。
對Raid配置測試了4組參數(shù),分別如上圖表所示,由測試數(shù)據(jù)可得出如下結(jié)論:
- Raid的Write Policy設(shè)置為WriteBack,硬盤性能有很大提高,而且性能比較穩(wěn)定;
- Raid的Read Policy設(shè)置為ReadAdaptive,硬盤性能略高于Normal;
- Raid的IO Policy設(shè)置為Direct,性能明顯高于Cached;
- BGI采用默認配置的30%或者關(guān)閉BGI,性能幾乎沒有變化,建議使用默認配置。
3、Raid0的OP測試結(jié)果
OP配置對比如下:
對比測試了不設(shè)置OP和設(shè)置15%的OP,如上圖表所示,由測試數(shù)據(jù)可得出如下結(jié)論:
- io測試時線程數(shù)小于128時,15%的OP的性能明顯高于不設(shè)置OP的性能,隨著線程數(shù)的增加,15%的OP的性能優(yōu)勢逐漸減少,到1024線程時,兩者性能很接近。
- mysql測試時15%的OP的性能略高于不設(shè)置OP的性能,兩者性能很接近。
4、MySQL參數(shù)測試結(jié)果
MySQL對比測試參數(shù)如下:
對MySQL測試了5組參數(shù),分別如上圖表所示,由測試數(shù)據(jù)可得出如下結(jié)論:
- innodb_write_io_threads/ innodb_read_io_threads設(shè)置為8性能比較理想;
- innodb_log_file_size設(shè)置為1536M或者2048M,性能差別不大;
- nnodb_io_capacity測試了從500到12000的參數(shù),性能差別不大,設(shè)置為3000時出現(xiàn)測試數(shù)據(jù)的***值,從測試數(shù)據(jù)觀察,該參數(shù)設(shè)置在2000-8000范圍內(nèi)性能相對理想;
- innodb_max_dirty_pages_pct設(shè)置為75性能較為理想。
五、LINUX參數(shù)測試數(shù)據(jù)對比
對Linux操作系統(tǒng)測試了5組參數(shù),分別如上圖表所示,由測試數(shù)據(jù)可得出如下結(jié)論:
- 關(guān)閉NUMA,對SSD硬盤性能提高較大;
- IO調(diào)度算法采用Deadline和Noop性能差距不大,Noop調(diào)度算法性能略高于Deadline;
- rotational、read_ahead_kb、rq_affinity參數(shù)的調(diào)整對SSD硬盤性能幾乎沒有影響。
1、NUMA測試數(shù)據(jù)對比
1.IO性能測試
2.MySQL性能測試
2、IO調(diào)度測試數(shù)據(jù)對比
1.IO性能測試
2.MySQL性能測試
3.rotational測試數(shù)據(jù)對比
4.read_ahead_kb測試數(shù)據(jù)對比
5.rq_affinity測試數(shù)據(jù)對比
六、RAID參數(shù)測試數(shù)據(jù)對比
涉及到的raid對比測試參數(shù)如下:
BGI(Background initialization):
開啟BGI,創(chuàng)建好Raid陣列后不必等待初始化完成就可以開始使用,比如分區(qū)和格式化,但是系統(tǒng)仍然在后臺檢查磁盤。
對Raid配置測試了4組參數(shù),分別如上圖表所示,由測試數(shù)據(jù)可得出如下結(jié)論:
- Raid的Write Policy使用Writeback,硬盤性能有很大提高,而且性能比較穩(wěn)定;
- Raid的Read Policy使用ReadAdaptive,硬盤性能略高于Normal;
- Raid的IO Policy使用Direct,性能明顯高于Cached;
- BGI采用默認配置30%或者關(guān)閉BGI,性能幾乎沒有變化。
1、Write Policy測試數(shù)據(jù)對比
1.IO性能測試
2.MySQL性能測試
2、Read Policy測試數(shù)據(jù)對比
1.IO性能測試
2.MySQL性能測試
3.IO Policy測試數(shù)據(jù)對比
4.BGI測試數(shù)據(jù)對比
七、Raid0的SSD OP測試數(shù)據(jù)對比
OP是Over-provisioning(預(yù)留空間)的簡稱,是指用戶不可操作的容量,就是留出一部分容量不使用不分區(qū),OP預(yù)留的空間一般被用于優(yōu)化操作。
對比測試了不設(shè)置OP和設(shè)置15%的OP,分別如上圖表所示,由測試數(shù)據(jù)可得出如下結(jié)論:
- io測試時線程數(shù)小于128時,15%的OP的性能明顯高于不設(shè)置OP的性能,隨著線程數(shù)的增加,15%的OP的性能優(yōu)勢逐漸減少,到1024線程時,兩者性能很接近。
- mysql測試時15%的OP的性能略高于不設(shè)置OP的性能,兩者性能很接近。
1.IO性能測試
2.MySQL性能測試
八、MySQL參數(shù)測試數(shù)據(jù)對比
涉及到的MySQL對比測試參數(shù)如下:
對MySQL測試了5組參數(shù),分別如上圖表所示,由測試數(shù)據(jù)可得出如下結(jié)論:
- innodb_write_io_threads/ innodb_read_io_threads設(shè)置為8性能比較理想;
- innodb_log_file_size設(shè)置為1536M或者2048M性能較理想,兩者性能差別不大;
- innodb_io_capacity測試了從500到12000的參數(shù),性能差別不大,設(shè)置為3000時出現(xiàn)測試數(shù)據(jù)的***值,從測試數(shù)據(jù)觀察,該參數(shù)設(shè)置在2000-8000范圍內(nèi)性能相對理解;
- innodb_max_dirty_pages_pct設(shè)置為75性能較為理想。
1.innodb_write/read_io_threads測試數(shù)據(jù)
2.innodb_log_file_size測試數(shù)據(jù)
3.innodb_io_capacity測試數(shù)據(jù)
4.innodb_max_dirty_pages_pct測試數(shù)據(jù)
九、相同硬盤數(shù)不同raid測試數(shù)據(jù)對比
使用6塊ssd硬盤,分別配置了raid5、raid10、raid0、raid0-15%OP,進行了io混合隨機讀寫性能測試。
Sysbench測試參數(shù):
1、不同Raid對比分析結(jié)果
1.硬盤利用率
Raid0的硬盤空間使用率是100%,如果預(yù)留15%做OP,空間使用率只有全部硬盤大小的75%;Raid5的空間使用率是(n-1)/n(n是磁盤數(shù)量,磁盤數(shù)量越多,空間使用率越高);Raid10的硬盤使用率只有50%;硬盤使用率順序是
- Raid0 > raid0-15%OP > Raid5 > Raid10
2.讀寫性能
raid0、raid0-15%OP的讀寫性能明顯高于raid5、raid10,raid0-15%OP的性能略高于raid0。
- raid0-15%OP > raid0 > raid10 > raid5
3.穩(wěn)定安全性
Raid10是最安全穩(wěn)定的,Raid5提供了一塊盤的奇偶檢驗保證安全,Raid0沒有安全保護措施。另外當Raid5一塊盤出現(xiàn)故障時候,其性能明顯下降。
2、不同Raid測試數(shù)據(jù)
1.io混合隨機讀寫性能數(shù)據(jù)
2.一塊硬盤故障,raid10和raid5性能變化
十、SSD推薦參數(shù)配置
SSD對應(yīng)linux、raid、mysql推薦參數(shù)以及推薦參數(shù)設(shè)置方法。
1、Linux推薦參數(shù)設(shè)置
- 關(guān)閉numa
- io調(diào)度算法設(shè)置為noop
- Rotational保持默認值1
- read_ahead_kb保持默認值128
- rq_affinity保持默認值1
2、Linux推薦參數(shù)設(shè)置方法
1.關(guān)閉numa
進入System BIOS設(shè)置,選擇Memory設(shè)置,選擇Node Interteaving為Enable進行關(guān)閉numa,如下圖所示。
執(zhí)行命令“numactl --hardware”進行檢查,輸出結(jié)果available: 1 nodes (0)時表示關(guān)閉成功,如下圖。
2.修改io調(diào)度算法noop
執(zhí)行命令:
- echo noop > /sys/block/sda/queue/scheduler
檢查命令:
- cat /sys/block/sda/queue/scheduler
3.Rotational值的調(diào)整
執(zhí)行命令:
- echo 0 > /sys/block/sda/queue/rotational
查看命令:
- cat /sys/block/sda/queue/rotational
4.read_ahead_kb值的調(diào)整
執(zhí)行命令:
- echo 0 > /sys/block/sda/queue/read_ahead_kb
查看命令:
- cat /sys/block/sda/queue/read_ahead_kb
5.rq_affinity值的調(diào)整
執(zhí)行命令:
- echo 0 > /sys/block/sda/queue/rq_affinity
查看命令:
- cat /sys/block/sda/queue/rq_affinity
3、Raid推薦參數(shù)設(shè)置
- 1Write Policy設(shè)置為WriteBack(WB)
- 2Read Policy設(shè)置為ReadAdaptive
- 3IO Policy設(shè)置為Direct
- 4BGI(Background initialization)保持默認設(shè)置30%
4、Raid推薦參數(shù)設(shè)置方法
使用MegaCli命令可以修改Raid參數(shù)配置,該命名是官方提供的針對MegaRAID卡的設(shè)置命令,如果使用不同品牌Raid卡,可以參照官方提供的命令進行設(shè)置。
MegaCli查看Raid參數(shù)命令:
查看所有Raid:
- MegaCli -LDGetProp -Cache -LALL –aALL
查看其中一個Raid:MegaCli -LDGetProp -Cache -L1 -a0
MegaCli修改Raid參數(shù)命令:
- MegaCli -LDSetProp WT|WB|NORA|RA|ADRA -L1 -a0
- or
- MegaCli -LDSetProp -Cached|-Direct -L1 -a0
1.Write Policy設(shè)置為WriteBack命令
MegaCli -LDSetProp WB -L1 -a0
2.Read Policy設(shè)置為ReadAdaptive命令
MegaCli -LDSetProp ADRA -L1 -a0
3.IO Policy設(shè)置為Direct命令
MegaCli -LDSetProp -Direct -L1 -a0
4.BGI調(diào)整方法
進入Device Settings,選擇Interated RAID Controller,選擇Controller Managent,選擇Change Controller Properties,可以修改BGI參數(shù),如下圖。
5、SSD的OP推薦設(shè)置
推薦保留15%的硬盤空間不進行分區(qū),這部分空間即是OP的保留空間。
設(shè)置方法:分區(qū)時候保留15%的硬盤空間不進行分區(qū)。
4、MySQL推薦參數(shù)設(shè)置
- innodb_write_io_threads/ innodb_read_io_threads推薦設(shè)置為8
- innodb_log_file_size推薦設(shè)置為2048M
- innodb_io_capacity推薦設(shè)置為3000
- innodb_max_dirty_pages_pct設(shè)置為75
【本文為51CTO專欄作者“王偉”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】