再談Raid 5和Raid 6的寫性能差異
這次給大家介紹下RAID 5和RAID 6做后端在寫性能上的差異以及原因。這里暫不考慮上層緩存以及跨array創(chuàng)建LUN帶來的性能提升,只考慮array本身的性能差異。
隨機(jī)短步寫
對于寫入量小于條帶數(shù)據(jù)塊的寫操作,之前已經(jīng)講過,對于RAID 5而言,短步寫會從data盤上讀取要改寫的數(shù)據(jù),從parity盤上讀取P校驗,然后把新數(shù)據(jù)寫入data盤,計算新的P校驗值并寫入P校驗盤,總共是2次讀+2次寫操作。
對于RAID 6,則需要讀取要改寫的數(shù)據(jù),從P盤讀取P校驗,從Q盤讀取Q校驗,把新數(shù)據(jù)寫入data盤,計算新的P和Q校驗,再分別寫入P盤和Q盤,所以總共是3次讀+3次寫。
也就是說,假設(shè)所有寫入的塊大小都是Z, 單個磁盤所能處理Z大小的數(shù)據(jù)塊的***IOPS是定值X,組成RAID的磁盤個數(shù)都是Y,那么對應(yīng)的RAID 5可以處理的***IOPS是X*Y/4,而RAID 6可以處理的是X*Y/6,對應(yīng)的數(shù)據(jù)傳輸率就是Z*X*Y/4和Z*X*Y/6。也就是說,由于多了個Q校驗的讀寫,RAID 6在隨機(jī)短步寫性能上和RAID5比會有33%的差距。所以除了增大成員磁盤個數(shù)Y外,并沒有很好的方法來改進(jìn)RAID 6的性能,而一味的增大Y又會帶來其他問題在此不再詳述。
連續(xù)整條帶寫
RAID 5整條帶寫的過程是,計算出P校驗,把數(shù)據(jù)和P校驗一起寫入到所有的RAID成員磁盤里。
RAID 6整條帶寫的過程是,計算出P和Q校驗,把數(shù)據(jù)和P和Q校驗一起寫入到所有的RAID成員磁盤里。
我們依然假設(shè)2種RAID都用相同的磁盤個數(shù)Y,RAID 5的條帶數(shù)據(jù)塊大小是a,RAID 6的條帶數(shù)據(jù)塊是b。那么由于有P校驗的存在,RAID 5的條帶大小就是a*(Y-1),RAID 6有P和Q兩個校驗,條帶大小就是b*(Y-2)。
不管是RAID 5還是RAID 6,寫完整的一個條帶,都需要把所有成員磁盤寫一次,也就是說需要的磁盤IO數(shù)都是Y。如果條帶數(shù)據(jù)塊a和b比較小的話,對于現(xiàn)在的大容量機(jī)械硬盤來說,尋道時間遠(yuǎn)大于小塊數(shù)據(jù)的傳輸時間,所以我們可以假設(shè)磁盤處理a和b大小的數(shù)據(jù)塊的***IOPS都是x。那么RAID 5做連續(xù)整條帶寫的數(shù)據(jù)傳輸率就是a*(Y-1)*x,RAID 6則是b*(Y-2)*x。由此可見,當(dāng)RAID 6和RAID 5的條帶數(shù)據(jù)塊大小一致時候(a=b),如果都是8個磁盤組成的RAID,RAID 5和RAID 6的傳輸率對比就是7:6,這是RAID 6多出一個Q校驗的代價。同時從上面的公式可以看到,增大RAID 6的條帶數(shù)據(jù)塊大小b可以在一定范圍內(nèi)提高RAID 6的性能。當(dāng)然b是不能***制增大的,當(dāng)條帶數(shù)據(jù)塊大到一定程度的時候,尋道時間不再遠(yuǎn)小于數(shù)據(jù)塊的傳輸時間,也就是說對于RAID 5和RAID 6的磁盤處理a和b大小的數(shù)據(jù)塊的***IOPS將不再相等,上面的公式也就不適用了。所以對于連續(xù)整條帶寫,選擇一個合適的條帶數(shù)據(jù)塊大小對于性能很重要。
綜上,RAID 6相對于RAID 5,有天然的寫性能上的不足,但是數(shù)據(jù)安全始終是***位的,隨著磁盤容量越來越大,RAID重建(rebuilding)時間也越來越長,RAID 5重建時候用戶數(shù)據(jù)暴露在無保護(hù)的時間窗口也越來越大,采用RAID 6可以更好的保護(hù)用戶數(shù)據(jù),這點性能上的付出是值得的,而且通過上層的緩存和跨越更多個rank來建LUN可以一定程度上彌補性能差距。