Hard-Drive

導致兩家 HDD 製造商在 iozone O_SYNC 基准上的性能存在巨大差異

  • April 1, 2016

我有兩台伺服器 A 和 B,配置如下:

  • A:4TB 硬碟,帶 RAID 1 (MegaRAID SAS 2008),128MB 記憶體,無 BBU,直寫模式,7.2k RPM,製造商 A。
  • B:1.5TB 硬碟,帶 RAID 1 (MegaRAID SAS 3108),64MB 記憶體,帶 BBU,但直寫模式,10.5k RPM,製造商 B。

我在單個 RAID 分區上執行以下基準測試:iozone -a -s 10240 -r 4 -+r

A 的結果(摘錄):

                                                           random  random    bkwd   record   stride
         kB  reclen   write rewrite    read    reread    read   write    read  rewrite     read   fwrite frewrite   fread  freread
      10240       4     108     474  4193564  6667334 6556395     701 4058822      475  3653175  2303202  2616201 6785306  6101840

B 的結果(摘錄):

                                                           random  random    bkwd   record   stride
         kB  reclen   write rewrite    read    reread    read   write    read  rewrite     read   fwrite frewrite   fread  freread
      10240       4    3332   46961  5478410  6836065 4994841    2951 2853077      728  2299133  1722202  2008983 4549365  4712594

兩台伺服器都啟用了直寫記憶體,但我無法解釋為什麼與伺服器 B(3332 kB/秒)相比,伺服器 A(108kB/秒)的寫入吞吐量性能非常慢,假設我正在解釋結果正確。

可能是什麼原因?兩台伺服器具有相同的其他文件系統選項(ext4/相同的預設選項)。

對於涉及大量同步寫入的工作負載,製造商 B 的磁碟是否優於 A 的磁碟?

謝謝。

關於測量結果之間的 33 倍差異,跟進我們在評論中的討論,MegaCli64 -LDGetProp -DskCache -Lall -aAll結果表明,設置 B預設啟用了磁碟驅動器記憶體,而在設置 A上禁用了它。

使用MegaCli64 -LDSetProp -DisDskCache -Immediate -Lall -aAll導致兩個系統顯示出相似的性能。

在啟用磁碟驅動器記憶體的情況下執行 RAID 是否安全?

在啟用磁碟驅動器記憶體的情況下執行 RAID 實際上類似於在啟用寫記憶體的情況下執行具有非 BBU 支持的易失性記憶體的 RAID 控制器(強制回寫模式)。它提高了性能,但同時增加了斷電時數據失去和數據不一致的可能性。

如果您想避免這種機會,同時仍具有不錯的 I/O 性能,建議您使用帶有 BBU 支持記憶體的控制器,並將您的捲配置為禁用磁碟記憶體的回寫模式。

兩個 RAID 控制器之間的區別

我不知道您是否已經知道,但軟體和硬體 RAID 之間還有更多內容(這是一篇關於此的有趣文章)。

最後,MegaRAID SAS 2008或多或少是具有附加 RAID 功能的 HBA 或 IO 控制器,而MegaRAID SAS 3108真正的 RAID Controller™(也稱為 ROC 或 RAID-on-Chip),具有專用處理器用於處理 RAID 計算。

SAS 2008 以使用一些 OEM 韌體(​​比如我在評論中提到的 PERC H310 中的 DELL 韌體)的糟糕寫入性能而聞名。

尤其是同步模式與您選擇的記錄長度和文件大小相結合,似乎會導致軟體/假 RAID 的結果非常糟糕。

作為參考,這是我在軟體 RAID1 中使用 10k WD Velocity Raptors 在我的工作站上得到的:

                                                   random  random    bkwd   record   stride                                   
     KB  reclen   write rewrite    read    reread    read   write    read  rewrite     read   fwrite frewrite   fread  freread
  10240       4     182     181  1804774  2127084 2110984     167 1673159      153  1760968   954589  1203989 2022512  2062824

如果您在同步模式 (O_SYNC) 下執行,那麼就可以通過軟/假 RAID 提供的內容而言,您的結果 A似乎是合理的。


直寫記憶體模式是否會隨著時間的推移導致陣列性能下降?

**我不這麼認為。**通過啟動的寫入記憶體,控制器能夠執行某些操作以優化待處理的寫入操作。

例如,記憶體操作的描述取自HP Smart Array 控制器的白皮書:

在高工作負載環境中,寫入記憶體通常會填滿並在大部分時間保持滿狀態。控制器利用這個機會分析待處理的寫命令以提高它們的效率。控制器可以使用寫入合併,將相鄰邏輯塊的小寫入組合成單個較大的寫入,以加快執行速度。控制器還可以執行命令重新排序,重新排列記憶體中寫入的執行順序,以減少整體磁碟延遲。

如您所見,記憶體用於進一步增強陣列的寫入性能,但這似乎對任何後續寫入或讀取操作的性能沒有任何影響。

關於磁碟碎片,這是一個文件系統/作業系統級別的問題。RAID 控制器 - 在塊級別上執行 - 根本無法優化文件系統碎片,因此它在write-troughwrite-back模式下執行沒有區別。

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