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