導致兩家 HDD 製造商在 iozone O_SYNC 基准上的性能存在巨大差異
我有兩台伺服器 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-trough
或write-back
模式下執行沒有區別。