Linux

Linux 軟體 raid-10 性能不佳

  • January 30, 2016

我有一台帶有 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:

如果我在緊密循環中使用 putdd命令寫入安裝在該設備上的 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 數據集可能會非常快。如果為數據集啟用壓縮,零不會寫入磁碟,而只是連結到全零塊。

引用自:https://serverfault.com/questions/751752