RAID10與RAID5比較[轉]

  一直以來,看到關於raid5與raid10的性能之爭還是非常多的,甚至很多人那拿出了測試數據,但是,到底誰是誰非。這裏,我就這兩種raid的內部運行原理來分析一下,我們在什麼情況下應當適合選哪一種raid方式。

   爲了方便對比,我這裏拿同樣多驅動器的磁盤來做對比,raid5選擇3D+1P的raid方案,raid10選擇2D+2D的Raid方案,分別如圖:

1、安全性方面的比較

其實在安全性方面,勿須質疑,肯定是RAID10的安全性高於RAID5。我們也可以從簡單的分析來得出。當盤1損壞時,對於RAID10,只有當盤1對應的鏡象盤損壞,才導致RAID失效。但是對於RAID5,剩下的3塊盤中,任何一塊盤故障,都將導致RAID失效。

在恢復的時候,RAID10恢復的速度也快於RAID5。

2、空間利用率的比較

RAID10的利用率是50%,RAID5的利用率是75%。硬盤數量越多,RAID5的空間利用率越高。

3、讀寫性能方面的比較

那麼,我們分析如下三個過程:讀,連續寫,隨機寫,但是,在介紹這三個過程之前,我需要介紹一個特別重要的概念:cache。 
cache技術最近幾年,在磁盤存儲技術上,發展的非常迅速,作爲高端存儲,cache已經是整個存儲的核心所在,就是中低端存儲,也有很大的cache存在,包括最簡單的raid卡,一般都包含有幾十,甚至幾百兆的raid cache。 
       cache的主要作用是什麼呢?體現在讀與寫兩個不同的方面,如果作爲寫,一般存儲陣列只要求寫到cache就算完成了寫操作,所以,陣列的寫是非常快速的,在寫cache的數據積累到一定程度,陣列才把數據刷到磁盤,可以實現批量的寫入,至於cache數據的保護,一般都依賴於鏡相與電池(或者是UPS)。 
       cache的讀一樣不可忽視,因爲如果讀能在cache中命中的話,將減少磁盤的尋道,因爲磁盤從尋道開始到找到數據,一般都在6ms以上,而這個時間,對於那些密集型io的應用可能不是太理想。但是,如果cache能命中,一般響應時間則可以在1ms以內。 
       不要迷信存儲廠商的iops(每秒的io數)數據,他們可能全部在cache命中的基礎上做到的,但是實際上,你的cache命中率可能只有10%。 
介紹完cache,我們就可以解釋raid5與raid10在不同的模式下,工作效率問題了,那麼我們來分別分析以上三個問題。 

3.1、讀操作

因爲raid5與raid10的磁盤都可以提供服務,所以,在讀上面他們基本是沒有差別的,除非是讀的數據能影響cache命中率,導致命中率不一樣。

3.2、連續寫

連續寫的過程,一般表示寫入連續的大批量的數據,如媒體數據流,很大的文件等等,這個寫操作過程,如果有寫cache存在,並且算法沒有問題的話,raid5比raid10甚至會更好一些(這裏要假定存儲有一定大小足夠的寫cache,而且計算校驗的cpu不會出現瓶頸)。因爲這個時候的校驗是在cache中完成,如4塊盤的raid5,可以先在內存中計算好校驗,同時寫入3個數據+1個校驗。而raid10只能同時寫入2個數據+2個鏡相。

如,4塊盤的raid5可以在同時間寫入1、2、3到cache,並且在cache計算好校驗之後,我這裏假定是6(實際的校驗計算並不是這樣的,我這裏僅僅是假設),同時把三個數據寫到磁盤。而4塊盤的raid10不管cache是否存在,寫的時候,都是同時寫2個數據與2個鏡相。 
但是,我前面也說過了,寫cache是可以緩存寫操作的,等到一定時期再寫到磁盤,但是,寫操作不比讀操作,這個寫是遲早也要發生的,也就是說,最後落到磁盤上的寫還是避免不了的,不過,如果不是連續性的強連續寫,只要不達到磁盤的寫極限,差別都不是太大。 

3.3、離散寫

這裏可能是最難理解,但是,也是最重要的部分,數據庫,如oracle 數據庫大部分操作就是離散寫,如每次寫一個數據塊的數據,如8K;聯機日誌雖然看起來是連續寫,但是因爲每次寫的量不多,不保證能添滿raid5的一個條帶(保證每張盤都能寫入),所以很多時候也是離散寫入。

我們再接上圖,假定要把一個數字2變成數字4,那麼對於raid5,實際發生了4次io, 
       先讀出2與校驗6,可能發生讀命中 
       然後在cache中計算新的校驗 
       寫入新的數字4與新的校驗8 
對於raid10,我們可以看到,同樣的單個操作,最終raid10只需要2個io,而raid5需要4個io。但是,這裏我忽略了raid5在那兩個讀操作的時候,還可能會發生讀命中操作,也就是說,如果需要讀取的數據已經在cache中,可能是不需要4個io的,也證明了cache對raid5 的重要性,不僅僅是計算校驗需要,而且對性能的提升由爲重要。曾經測試過,在raid5的陣列中,如果關閉寫cache,raid5的性能將差很多倍。 
這裏,並不是說cache對raid10就不重要了,因爲寫緩衝,讀命中等,都是提高速度的關鍵所在,不過的是,raid10對cache的依賴性沒有raid5那麼明顯而已。 
到這裏,大家應當也大致明白了raid5與raid10的原理與差別了,一般來說,象小io的數據庫類型操作,建議採用raid10,而大型文件存儲,數據倉庫,則從空間利用的角度,可以採用raid5。

3.4、磁盤的IOPS對比

        我們假定一個case,業務應用的IOPS是10000,讀cache命中率是30%,讀IOPS爲60%,寫IOPS爲40%,磁盤個數爲120,那麼分別計算在RAID5與RAID10的情況下,每個磁盤的IOPS爲多少。

    RAID5: 
    1. 單塊盤的IOPS = (10000*(1-0.3)*0.6 + 4 * (10000*0.4))/120 
    2.              = (4200 + 16000)/120 
    3.              = 168

    這裏的10000*(1-0.3)*0.6表示是讀的IOPS,比例是0.6,除掉cache命中,實際只有4200個讀IOPS。

    而4 * (10000*0.4) 表示寫的IOPS,因爲每一個寫,在RAID5中,實際發生了4個io,所以寫的IOPS爲16000個。

    爲了考慮RAID5在寫操作的時候,那2個讀操作也可能發生命中,所以更精確的計算應該爲: 
    1. 單塊盤的IOPS = (10000*(1-0.3)*0.6 + 2 * (10000*0.4)*(1-0.3) + 2 * (10000*0.4))/120 
    2.              = (4200 + 5600 + 8000)/120 
    3.              = 148

    這樣我們計算出來單個盤的IOPS爲148個,基本達到磁盤IOPS極限,在這種情況下,磁盤的工作狀態是非常不理想的。

RAID10對IOPS性能的影響 
    1. 單塊盤的IOPS = (10000*(1-0.3)*0.6 + 2 * (10000*0.4))/120 
    2.              = (4200 + 8000)/120 
    3.              = 102

    可以看到,因爲RAID10對於一個寫操作,只發生2次io,所以,同樣的壓力,同樣的磁盤,每個盤的IOPS只有102個,還遠遠低於磁盤的極限IOPS。

    這裏回到我們先前討論的case上來,在我們先前採用RAID5的時候,通過分析,每個磁盤的IOPS在高峯時期,快達到200了,導致響應速度巨慢無比。改造成RAID10,每個磁盤的IOPS降到100左右,很好的避免了這個性能問題。

3.5、小結

    影響讀數據的關鍵因素是cache命中率,在讀數據的情況下,RAID5與RAID10性能本身沒有太大差別。但是對於寫數據的一些應用,尤其是小I/O頻繁寫入的一些應用,安全性要求很高,不計成本,小數據量頻繁寫入的系統。如企業ERP生產系統等等,RAID10相比RAID5可能產生較大的性能差異。而大型文件存儲,數據倉庫,如醫療PACS系統、視頻編輯系統則從空間利用的角度,建議採用RAID5。

    我們知道,在存儲系統的採購過程中,廠商往往能夠提供漂亮的性能參數,但實際運行中,該系統的實際性能表現並不能達到我們所期望的狀態,那麼在運行環境中存儲系統的實際性能究竟受哪些環節和瓶頸的影響呢?

    

    之所以要和大家來討論這個問題,是因爲在本人的工作中曾遇到一個實際的Case,在這個case中,一個恢復壓力很大的standby(這裏主要是寫,而且是小io的寫),採用了RAID5的方案,發現性能很差,後來改造成了RAID10,就很好的避免了性能的問題。

    建議在閱讀本文前,首先閱讀本文上篇「 RAID5和RAID10,哪種RAID適合你 」,因爲性能瓶頸的出現,本身與RAID方式還是有很大關係,同時本文性能討論的基礎,本身建立在上文的一些結論之上。

    陣列的瓶頸主要體現在2個方面,帶寬與IOPS(單位時間傳輸的數據量,和單位時間完成的I/O數)。

 

影響帶寬的主要因素

    存儲系統的帶寬主要取決於陣列的構架,光纖通道的大小(我們今天討論的陣列一般都是光纖陣列, SCSI這樣的SSA陣列,暫時不在討論範圍之列)以及硬盤的個數。

    所謂陣列構架影響存儲系統帶寬,指的是存儲系統內部架構會存在一些內部帶寬,類似於PC的系統總線,儘管陣列的構架因不同廠商不同型號的產品而各有不同,不過一般情況下,內部帶寬都設計的很充足,不會是瓶頸的所在。

    光纖通道對帶寬的影響還是比較大的,例如數據倉庫環境中,對數據的流量要求很大,而一塊2Gb的光纖卡,所能支撐的最大流量應當是2GB/8=250Mb/s的實際流量,必須配備4塊光纖卡才能達到1Gb/s的實際流量,所以對於數據倉庫的環境來說,升級到光纖4Gb並非是廠商過於超前的產品更新,在大流量的數據環境下絕對有必要考慮更換4GB的光纖卡。

    但是對於存儲系統的帶寬來說,硬盤接口的帶寬限制是最重要的。當前面的瓶頸不再存在的時候,帶寬就完全取決於硬盤的個數了,我下面列一下不同規格的硬盤所能支撐的流量大小,數據取自硬盤廠商的標準參數:

    

    如果我們假定一個陣列有120塊15K rpm轉速的光纖硬盤,那麼硬盤上最大的可以支撐的數據流量爲120*13=1560Mb/s,當前端接口不成爲瓶頸的時候,1560Mb/s就是理論上的最大數據流量。

    而如果要實現上述的最大帶寬,如果前端採用2GB的光纖卡,可能需要配置6塊才能夠,而4GB的光纖卡,配置3-4塊就夠了。因此我們可以知道,前端的光纖接口必須與後端磁盤個數相匹配。

    但是否考慮到這些因素就足夠了呢,存儲系統的整體性能還受到多方面因素的影響,下面我們將分析存儲系統的另外一個重要的性能指標:IOPS。

 

影響IOPS的主要因素

    我們前面已經說過了,廠商所提供的IOPS值是在理想狀態下測試出來的,對實際的運行性能的參考並不大,所以我們有必要通過以下幾個方面來衡量該系統的實際IOPS的可能表現。

    決定IOPS的主要因素取決於陣列的算法,cache命中率,以及磁盤個數。

    陣列的算法也因爲不同廠商不同型號的產品而不同,如我們最近遇到在HDS USP上面,可能因爲ldev(lun)存在隊列或者資源限制,而單個ldev的IOPS就上不去。所以,決定採購某型號的存儲之前,有必要了解這個存儲的一些算法規則與限制。

    cache命中率對實際IOPS有決定性的影響,Cache命中率取決於數據的分佈,cache size的大小,數據訪問的規則,以及cache的算法,如果完整的討論下來,這裏將變得很複雜,可以有一天來慢慢討論。

    我們這裏把這些內部原理都省略掉,只強調:對於一個存儲陣列來說,讀cache的命中率越高,一般就表示它可以支持更多的IOPS,爲什麼這麼說呢?這個就與我們下面要討論的硬盤IOPS有關係了。

    每個物理硬盤能處理的IOPS是有限制的,如

    

    同樣,如果一個陣列有120塊15K rpm轉速的光纖硬盤,那麼,它能支撐的最大IOPS爲120*150=18000,這個爲硬件限制的理論值,如果超過這個值,硬盤的響應可能會變的非常緩慢而不能正常提供業務。較高的讀cache命中率,能降低硬盤的IOPS負荷,讓硬盤在較小的壓力下良好工作。