Linux 軟體 raid-10 性能不佳
我有一台帶有 8 通道 LSI SAS3008 控制器晶片的機器,單獨的驅動器測試顯示我可以以 174 MB/秒和 193 MB/秒之間的速度寫入任何磁碟或所有磁碟,並具有持續的寫入速度:
這是與所有 12 個磁碟並行
dd if=/dev/zero of=/dev/mapper/mpath?p1 bs=1G count=100 oflag=direct
執行的命令的輸出:107374182400 bytes (107 GB) copied, 556.306 s, 193 MB/s 107374182400 bytes (107 GB) copied, 566.816 s, 189 MB/s 107374182400 bytes (107 GB) copied, 568.681 s, 189 MB/s 107374182400 bytes (107 GB) copied, 578.327 s, 186 MB/s 107374182400 bytes (107 GB) copied, 586.444 s, 183 MB/s 107374182400 bytes (107 GB) copied, 590.193 s, 182 MB/s 107374182400 bytes (107 GB) copied, 592.721 s, 181 MB/s 107374182400 bytes (107 GB) copied, 598.646 s, 179 MB/s 107374182400 bytes (107 GB) copied, 602.277 s, 178 MB/s 107374182400 bytes (107 GB) copied, 604.951 s, 177 MB/s 107374182400 bytes (107 GB) copied, 605.44 s, 177 MB/s
但是,當我將這些磁碟作為軟體 raid 10 設備放在一起時,我得到了大約 500 MB/秒的寫入速度。我希望得到大約兩倍的結果,因為同時訪問這些磁碟不會受到任何懲罰。
我確實注意到了 md10_raid10 程序,我假設軟體 raid 本身接近 80%,並且一個核心始終處於 100% 等待時間,並且 0% 空閒。然而,哪個核心發生了變化。
此外,當使用緩衝區記憶體寫入已掛載的 EXT4 文件系統而不是使用 oflag=direct 繞過記憶體時,性能會進一步下降。磁碟報告 25% 忙(根據 munin 監控),但磁碟顯然沒有執行熱,但我擔心 md10 設備本身可能是。
關於下一步該去哪裡的任何建議?我正在嘗試一個硬體 raid 10 配置來進行比較,雖然我似乎只能建構一個 10 磁碟單元——也就是說,我希望能夠保持 900 MB/秒的寫入速度。當我發現更多時,我會更新這個問題。
編輯1:
如果我在緊密循環中使用 put
dd
命令寫入安裝在該設備上的 ext4 分區,並且我不使用緩衝區記憶體(oflag=direct),我可以在峰值時達到 950 MB/秒以上,並且持續達到 855 MB/秒對安裝標誌進行了一些更改。如果我同時使用 iflag=direct 讀取,我現在可以獲得 480 MB/秒的寫入和 750 MB/秒的讀取。
如果我在沒有 oflag=direct 的情況下寫入,因此使用緩衝區高速記憶體,我得到 230 MB/秒的寫入和 1.2 MB/秒的讀取,但機器似乎非常緩慢。
那麼,問題來了,為什麼使用緩衝區記憶體會如此嚴重地影響性能呢?我已經嘗試了各種磁碟排隊策略,包括在驅動器級別使用“noop”並將“deadline”或“cfq”放在適當的多路徑 dm 設備上,或者在所有設備上設置截止日期,或者在 dm 上不使用,在備份驅動器上設置截止日期。似乎備份驅動器應該沒有,多路徑設備應該是我想要的,但這根本不會影響性能,至少在緩衝區高速記憶體的情況下。
編輯:
您的
dd oflag=direct
觀察結果可能是由於電源管理問題。使用PowerTOP查看您的 CPU 的 C 狀態是否在寫入負載下過於頻繁地切換到 C1 以上。如果是,請嘗試調整 PM 以確保 CPU 不會休眠並重新執行基準測試。請參閱發行版的文件以了解如何執行此操作 - 在大多數情況下,這將是intel_idle.max_cstate=0
核心引導線參數,但 YMMV。寫入和緩衝寫入之間的巨大性能差異
O_DIRECT
可能是由於:
- 使用 O_DIRECT 時,CPU 不會進入 C3+ 睡眠或
- CPU 被發送到 C3+,但由於使用 O_DIRECT 時顯著簡化的處理,這並不重要 - 只需指向一個歸零的記憶體區域並發出 DMA 寫請求比緩衝處理需要更少的周期,並且對延遲不敏感
過時的答案:
這看起來很像
md
.推理
- 控制器的數據表承諾6,000 吞吐量
- 您的並行
dd
執行顯示每個驅動器 170MB /s +,因此路徑不受連接 PCIe 頻寬的限制- 您看到 md10_raid10 的使用率很高,接近 100%
雖然多執行緒 RAID5 校驗和計算的更新檔已
mdraid
在 2013 年送出,但我找不到任何關於類似 RAID1 / RAID10 增強功能的資訊,因此它們可能根本不存在。要嘗試的事情
- 不止一個寫執行緒
dd
,只是為了看看它是否改變了什麼- 一個不同的 RAID10 實現 - LVM RAID 10浮現在腦海中,但您也可以看看 ZFS 1,它的設計正是考慮到這個案例(許多磁碟,沒有硬體 RAID 控制器)
- 可能是更新的核心版本
FWIW,您很少(如果有的話)會在使用機械儲存介質的頻寬上看到寫入性能峰值(尤其是使用非 CoW 文件系統)。大多數情況下,您會受到尋軌次數的限制,因此峰值頻寬不必太在意,只要它滿足您的最低要求即可。
1如果您使用ZFS,您應該改進您的測試方法,因為將全零塊寫入 ZFS 數據集可能會非常快。如果為數據集啟用壓縮,零不會寫入磁碟,而只是連結到全零塊。