RAID 級別對 IOPS 的影響
關於 IOPS,我在網上看到了幾個消息來源,它們表明給定磁碟數量的 IOPS 只是單個磁碟的 IOPS 乘以磁碟數量。
如果我對 IOPS 的理解是正確的(而且我完全不確定它是否正確),我會認為現實將取決於 - 除許多其他因素外 - RAID 級別。使用 RAID 1/10,所有數據至少在兩個磁碟上複製,從而減少特定磁碟上某些 IO 模式的爭用。但是,在條帶化 RAID 級別(例如 RAID 0/5/6)中,數據是分佈的而不是重複的,這意味著連續的讀取請求可能針對同一個主軸,從而導致在前一個 IO 完成時發生阻塞。寫入的爭論更加激烈。
我應該補充一點,由於各種優化和其他因素,我意識到現實要復雜得多。我的問題實際上只是在非常基本的層面上推動我對 IOPS 含義的理解是否走在正確的軌道上。我斷言 IOPS 甚至會以這種方式受到 RAID 級別的影響,這可能表明對該概念的基本誤解。
對於 HDD 來說,IOPS 一般以磁碟的訪問時間為主,即尋軌延遲 + 旋轉延遲 + 傳輸延遲之和。由於這些變數在很大程度上取決於訪問模式,並且與特定的 RAID 佈局(即:條帶大小)和控制器(即:預讀調整)具有不明顯的互動作用,因此任何簡單的回复都將是錯誤的。
但是,讓我們嘗試有一個大概的數字。在第一個近似值上,n 磁碟陣列保證的 IOPS 應該是單個磁碟 IOPS 的 n 倍。但是,RAID 級別和數據訪問模式都通過在查找/旋轉/傳輸延遲之間轉移權重,極大地改變了這種一階近似。
讓我們做一些範例,假設每個磁碟 100 IOPS(7200 RPM 磁碟的典型值)和 4 磁碟陣列(RAID1 除外,通常僅限於 2 路):
- 單個磁碟是 100 IOPS,讀取和寫入(注意:由於寫入合併,寫入 IOPS 通常高於讀取 IOPS,但為簡單起見我們忽略)
- RAID0(4 路條帶化)具有高達4 倍的隨機 IOPS 和高達4 倍的順序 IOPS。這裡的關鍵詞是“最多”:由於條帶化和數據對齊的性質,如果隨機訪問的扇區普遍駐留在單個磁碟上,那麼您將以低得多的 IOPS 結束。
- RAID1(2 路鏡像)的配置更複雜。由於不同的磁碟可以在不同的數據上尋找,它具有高達 2 倍的隨機讀取 IOPS,但相同的 1 倍(或略低,由於成本)隨機寫入 IOPS。如果所有事情都對齊良好(即:大但不是 100% 的順序讀取,即使在鏡像模式下使用塊/條帶概念/處理的 RAID 控制器,預讀工作正常等)順序讀取有時可能高達單次讀取的 2倍磁碟值,而順序寫入的上限仍為單個磁碟的 1 倍(即:無加速)
- RAID10(4 路鏡像)在性能方面介於 4 路 RAID0 條帶化和 2 路鏡像之間。它具有高達 4 倍的隨機讀取 IOPS 和高達 2 倍的隨機寫入 IOPS。對於順序傳輸,RAID1 警告適用:它有時具有高達 4 倍的順序讀取 IOPS,但只有 2 倍的順序寫入 IOPS。請注意,一些 RAID10 實現(即 Linux MDRAID)為 RAID10 陣列提供不同的佈局,具有不同的性能配置文件。
- RAID5(條帶奇偶校驗)具有高達 4 倍的隨機讀取 IOPS,而隨機寫入 IOPS,取決於許多因素,例如寫入相對於條帶大小的大小、大型條帶記憶體的可用性、條帶重建算法本身(讀取-重構-寫入與讀取-修改-寫入)等,可以是單個磁碟 IOPS 的 0.5 倍(或更低)到 2 倍之間的任何地方。順序工作負載更可預測,IOPS 是單個磁碟的 3 倍(讀取和寫入)
- RAID6(條帶雙奇偶校驗)的行為與其 RAID5 兄弟非常相似,但寫入性能較低。它的隨機讀取 IOPS 高達單盤的 4 倍,但其隨機寫入性能甚至低於 RAID5,絕對值相同(0.5x - 2x)但實際字平均值較低。順序讀取和寫入的上限是單個磁碟 IOPS 的 2 倍。
*讓我重複一遍:以上是簡單且幾乎被破壞的近似值。*無論如何,如果您想使用(嚴重不完整的)RAID IOPS 計算器,請看這裡。
現在,回到現實世界。在實際工作負載中,**RAID10 通常是更快和首選的選擇,即使面對降級的陣列也能保持高性能。RAID5 和 RAID6 不應用於對性能敏感的工作負載,除非它們本質上是以讀取為中心或順序的。值得注意的是,嚴重的 RAID 控制器具有大功率損耗保護寫回記憶體,主要是為了克服(通過大量條帶記憶體)RAID5/6 低隨機寫入性能。切勿將 RAID5/6 與無記憶體 RAID 控制器一起使用,除非您真的不關心陣列的速度。
***SSD 是不同的野獸,我想。***由於它們本質上具有低得多的平均訪問時間,因此基於奇偶校驗的 RAID 的性能成本要低得多,並且比 HDD 更可行。但是,在以隨機寫入為中心的小型工作負載中,無論如何我都會使用 RAID10 設置。