原文:http://blog.itpub.net/787018/viewspace-666280/算法
文檔內容3部分:
一、基本的RAID級別介紹
二、RAID10和RAID01的比較
三、RAID10和RAID5的比較數據庫
RAID10和RAID01的比較
RAID10是先作鏡象,而後再作條帶。
RAID01則是先作條帶,而後再作鏡象。
好比以6個盤爲例,RAID10就是先將盤分紅3組鏡象,而後再對這3個RAID1作條帶。RAID01則是先利用3塊盤作RAID0,而後將另外3塊盤作爲RAID0的鏡象。
下面以4塊盤爲例來介紹安全性方面的差異:
一、RAID10的狀況緩存
這種狀況中,咱們假設當DISK0損壞時,在剩下的3塊盤中,只有當DISK1一個盤發生故障時,纔會致使整個RAID失效,咱們可簡單計算故障率爲1/3。
二、RAID01的狀況安全
這種狀況下,咱們仍然假設DISK0損壞,這時左邊的條帶將沒法讀取。在剩下的3塊盤中,只要DISK2,DISK3兩個盤中任何一個損壞,都會致使整個RAID失效,咱們可簡單計算故障率爲2/3。
所以RAID10比RAID01在安全性方面要強。oracle
從數據存儲的邏輯位置來看,在正常的狀況下RAID01和RAID10是徹底同樣的,並且每個讀寫操做所產生的IO數量也是同樣的,因此在讀寫性能上二者沒什麼區別。而當有磁盤出現故障時,好比前面假設的DISK0損壞時,咱們也能夠發現,這兩種狀況下,在讀的性能上面也將不一樣,RAID10的讀性能將優於RAID01。性能
RAID10和RAID5的比較spa
爲了方便對比,這裏拿一樣多驅動器的磁盤來作對比,RAID5選擇3D+1P的RAID方案,RAID10選擇2D+2D的RAID方案,如圖:.net
一、安全性方面的比較3d
其實在安全性方面,勿須質疑,確定是RAID10的安全性高於RAID5。咱們也能夠從簡單的分析來得出。當盤1損壞時,對於RAID10,只有當盤1對應的鏡象盤損壞,才致使RAID失效。可是對於RAID5,剩下的3塊盤中,任何一塊盤故障,都將致使RAID失效。日誌
在恢復的時候,RAID10恢復的速度也快於RAID5。
二、空間利用率的比較
RAID10的利用率是50%,RAID5的利用率是75%。硬盤數量越多,RAID5的空間利用率越高。
三、讀寫性能方面的比較
主要分析分析以下三個過程:讀,連續寫,離散寫。
在介紹這三個過程以前,先介紹一個特別重要的概念:cache。
cache已是整個存儲的核心所在,就是中低端存儲,也有很大的cache存在,包括最簡單的raid卡,通常都包含有幾十,甚至幾百兆的raid cache。
cache的主要做用是什麼呢?體如今讀與寫兩個不一樣的方面,若是做爲寫,通常存儲陣列只要求寫到cache就算完成了寫操做,因此,陣列的寫是很是快速的,在寫cache的數據積累到必定程度,陣列才把數據刷到磁盤,能夠實現批量的寫入,至於cache數據的保護,通常都依賴於鏡相與電池(或者是UPS)。
cache的讀同樣不可忽視,由於若是讀能在cache中命中的話,將減小磁盤的尋道,由於磁盤從尋道開始到找到數據,通常都在6ms以上,而這個時間,對於那些密集型io的應用可能不是太理想。可是,若是cache能命中,通常響應時間則能夠在1ms之內。二者應該相差3個數量級(1000倍)。
1)讀操做方面的性能差別
RAID10可供讀取有效數據的磁盤個數爲4,RAID5可供讀取有效數據的磁盤個數也爲4個(校驗信息分佈在全部的盤上),因此二者的讀的性能應該是基本一致的。
2)連續寫方面的性能差別
在連續寫操做過程,若是有寫cache存在,而且算法沒有問題的話,RAID5比RAID10甚至會更好一些,雖然也許並無太大的差異。(這裏要假定存儲有必定大小足夠的寫cache,並且計算校驗的cpu不會出現瓶頸)。
由於這個時候的RAID校驗是在cache中完成,如4塊盤的RAID5,能夠先在內存中計算好校驗,同時寫入3個數據+1個校驗。而RAID10只能同時寫入2個數據+2個鏡相。
如上圖所示,4塊盤的RAID5能夠在同時間寫入一、二、3到cache,而且在cache計算好校驗以後,這裏假定是6,同時把三個數據寫到磁盤。而4塊盤的RAID10無論cache是否存在,寫的時候,都是同時寫2個數據與2個鏡相。
根據前面對緩存原理的介紹,寫cache是能夠緩存寫操做的,等到緩存寫數據積累到必定時期再寫到磁盤。可是,寫到磁盤陣列的過程是早晚也要發生的,因此RAID5與RAID10在連續寫的狀況下,從緩存到磁盤的寫操做速度會有較小的區別。不過,若是不是連續性的強連續寫,只要不達到磁盤的寫極限,差異並非太大。
3)離散寫方面的性能差別
例如oracle 數據庫每次寫一個數據塊的數據,如8K;因爲每次寫入的量不是很大,並且寫入的次數很是頻繁,所以聯機日誌看起來會像是連續寫。可是由於不保證可以添滿RAID5的一個條帶,好比32K(保證每張盤都能寫入),因此不少時候更加偏向於離散寫入(寫入到已存在數據的條帶中)。
咱們從上圖看一下離散寫的時候,RAID5與RAID10工做方式有什麼不一樣。如上圖:咱們假定要把一個數字2變成數字4,那麼對於RAID5,實際發生了4次io:先讀出2與校驗6,可能發生讀命中而後在cache中計算新的校驗寫入新的數字4與新的校驗8。
如上圖咱們能夠看到:對於RAID10,一樣的單個操做,最終RAID10只須要2個io,而RAID5須要4個io.
這裏我忽略了RAID5在那兩個讀操做的時候,可能會發生讀命中操做的狀況。也就是說,若是須要讀取的數據已經在cache中,多是不須要4個io的。這也證實了cache對RAID5 的重要性,不只僅是計算校驗須要,並且對性能的提高尤其重要。
固然,並非說cache對RAID10就不重要了,由於寫緩衝,讀命中等,都是提升速度的關鍵所在,只不過RAID10對cache的依賴性沒有RAID5那麼明顯而已。
4)磁盤的IOPS對比
假定一個case,業務的iops是10000,讀cache命中率是30%,讀iops爲60%,寫iops爲40%,磁盤個數爲120,那麼分別計算在raid5與raid10的狀況下,每一個磁盤的iops爲多少。
raid5:
單塊盤的iops = (10000*(1-0.3)*0.6 + 4 * (10000*0.4))/120
= (4200 + 16000)/120
= 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個讀操做也可能發生命中,因此更精確的計算爲:
單塊盤的iops = (10000*(1-0.3)*0.6 + 2 * (10000*0.4)*(1-0.3) + 2 * (10000*0.4))/120
= (4200 + 5600 + 8000)/120
= 148
計算出來單個盤的iops爲148個,基本達到磁盤極限
raid10
單塊盤的iops = (10000*(1-0.3)*0.6 + 2 * (10000*0.4))/120
= (4200 + 8000)/120
= 102
能夠看到,由於raid10對於一個寫操做,只發生2次io,因此,一樣的壓力,一樣的磁盤,每一個盤的iops只有102個,還遠遠低於磁盤的極限iops。
四、小結
因此要求較高的空間利用率,對安全性要求不是特別高、大文件存儲的系統採用RAID5比較好。
相反,安全性要求很高,不計成本,小數據量頻繁寫入的系統採用RAID10的方式比較好。