乙個IO的傳奇一生(12) 磁碟陣列1

2021-10-09 14:26:32 字數 3359 閱讀 2551

在乙個io的旅程中基本上都會經歷乙個非常重要站點,他就是raid。提起raid,基本上是無人不曉,每個人都能說上一點。例如raid5、raid6之類的概念,此外,raid可以提高資料可靠性,但是考慮到io 效能等問題,很多人都會採用硬體raid卡對io進行加速。諸如此類的東西,或許大家都知道。從表面上看,raid似乎很簡單,多塊磁碟聚合在一起,採用一定的資料分布演算法將資料分布到多塊磁碟上,這就構成了raid。是的,從外表來看,raid的確很簡單,經過這麼多年的發展,很多人也將raid放入了古老技術的行列。但是,從技術研發者的角度來看,raid其實很複雜,為什麼這麼說呢?這主要是因為在設計raid的時候,有很多棘手的問題需要解決。這些棘手的問題主要包括如下幾個方面:

1)資料小寫問題。raid把多塊磁碟繫結在一起,並且在水平方向進行條帶切分,每個條帶都會橫跨多塊磁碟。重要的是每個條帶會生成乙個或者多個校驗冗餘資料。在寫入操作的時候,需要更新校驗冗餘資料。在寫入資料量比較小的情況下,為了生成校驗冗餘資料,那麼需要讀取條帶中沒有被更新過的資料,然後計算得到校驗資料,最後將條帶資料寫入磁碟。顯然,在整個過程中,存在乙個寫放大的問題,乙個簡單的寫操作變成了「讀-更新-寫」的操作。所以,小寫問題對raid的效能帶來極大的影響。

2)校驗資料計算問題。對於常用的raid5、raid6,是需要計算校驗資料的。這些校驗資料的計算看起來不是很複雜,其實是很耗cpu時間的。常用的cpu不擅長數值計算,如果直接將乘法等運算交給cpu來做,那麼raid6的複雜度就會變得很高。大量的計算會使得io延遲大為增加,從而使得raid很難在對實時性和吞吐量要求比較高的場合應用。

3)資料重構問題。隨著磁碟容量的不斷增加,資料重構的時間會變得越來越長。較長的資料重構時間會使得資料可靠性變得越來越差。資料重構時間是乙個raid非常棘手的問題,該問題導致現有raid技術很難在大資料環境下應用。要想解決該問題,需要從架構設計上顛覆現有raid技術,並且打破現有raid在資料重構過程中的讀、寫效能瓶頸。只有這樣,才有可能解決raid資料重構的效能問題。

4)一致性效能問題。當raid處於降級模式時,系統中不僅會存在上層應用的io,而且還會存在資料重構的io,並且這兩類io會交織融合在一起,使得雙方的效能都變得很差。這主要是因為,應用io和資料重構io的交織,使得磁碟讀寫出現抖動,從而應用io和資料重構io的效能都急劇下降。所以,如何保證應用io效能在正常模式下和降級模式下都達到乙個比較均衡的水平,是raid設計者需要考慮的問題。

上述的四個問題是raid研發過程中面臨的最大問題,有些問題至今都很難完滿解決。所以,raid技術不是一種古老技術,而是乙個欣欣向榮的儲存底層技術。拋開raid這個傳統的概念,剖析一下raid技術所要解決的問題究竟是什麼?其實,大家也知道,raid主要是為了解決儲存效能問題和資料可靠性問題。儲存效能問題的解決其實是乙個附加值的體現,資料可靠性問題的解決才是raid的精華所在。所以,簡單來看,raid技術的本質是想解決資料可靠性問題。那麼為了解決這個問題,技術研發者是可以拋開現有raid架構,採用新的架構、方法實現資料冗餘,從而達到資料可靠性的效果。所以,在大資料環境下,廣義raid還會有其重要作用的。

raid的資料分布是很講究的。在raid5之前,所有的校驗資料集中在一塊磁碟上,此時,這個磁碟就成了校驗資料瓶頸。為了解除這種瓶頸,raid5、raid將校驗資料採用分布是儲存的方式。下圖是raid的校驗資料分布。

這種資料分布被稱之為左循演算法,pq分布是可以通過條帶號計算出來的。從上圖我們也可以知道raid的資料分布和物理磁碟是一一對應的,通過邏輯條帶號就可以知道資料在每個物理磁碟上的分布情況。仔細考慮一下,raid6之類的演算法其實是一種資料保護演算法,是一種資料編譯碼演算法。傳統的raid將這種資料保護演算法和物理磁碟進行了緊耦合繫結,這是傳統raid的一大特徵。

其實,資料保護演算法完全可以在一種邏輯域中完成,物理磁碟的管理可以在一種物理域中實現。邏輯域和物理域可以通過某種對映關係聯絡在一起。邏輯域和磁碟物理域拆分的最主要目的是加速資料重構過程,並且可以優化應用層效能一致性的問題。拆分之後的兩個域之間關係可以表示如下:

通過這種架構上的拆分,raid中的資料分布將會發生本質上的變化。例如乙個盤陣系統中有20塊磁碟,其中建立了乙個raid5和乙個raid6。那麼,通過物理磁碟管理域中allocator的資源分配,raid5和raid6 中的資料將會均勻分布在所有的20塊磁碟中,而不是raid5的資料分布在固定10塊磁碟上,而raid6的資料分布在另外10塊磁碟上。這種資料布局打破了傳統raid的規則資料分布,帶來的最大好處就是提公升資料重構效能。通過上述描述,我們可以知道一塊物理磁碟上儲存的資料涉及到所有資料保護域的raid。所以,當一塊物理磁碟損壞之後,所有的raid都會參與到資料重構的過程中,而不僅僅是乙個raid的事情了。這就好比傳統raid在處理資料重構時,都是「自家各掃門前雪」,但是,引入新型架構之後,資料重構過程就變成了「眾人拾材火焰高」。

隨著磁碟容量的進一步增大,資料重構和一致性效能將會變成raid的兩大最重要問題。在現有raid基礎上,如果不改變raid架構,那麼這個問題將會變得很棘手,難於解決。除非採用影響效能的擦除碼來增強冗餘度。

raid6演算法是raid實現過程中需要考慮的重要問題,從演算法本身來看,raid6演算法是比較簡單的:

p碼運算很簡單,只需要把所有的資料累加起來就可以了。q略有複雜,需要涉及到乘法運算。將上面的算式表示成矩陣的形式,表示如下:

輸入資料和編碼矩陣的乘積就是我們需要儲存的raid資料。

我們知道cpu的強項不在於算術運算,一次乘法運算需要耗費很多個指令週期,因此,如何避免編解過程中的乘法運算成了raid技術實現的重點。要做到高效編碼,需要引入乙個有限域——加邏華域。在加邏華域中,加法運算變成了異或xor運算,顯然能夠提高效率。但是,在加邏華域中,乘法運算還是二進位制乘法,還具有一定的複雜度,為了將這種乘法運算轉換成簡單的異或操作,又引入了對數/反對數操作。我們知道,通過對數操作可以將乘法轉換成加法操作,這個特性被raid編譯碼採用了。例如,a*b的操作就可以通過如下方式進行轉換:

所以,a*b的計算過程可以分解成如下四步:

1)通過對數表查到loga的值a1

2)通過對數表查到logb的值b1

3)將a1和b1進行異或運算,得到c1 

4)通過反對數表查到c1對應的值c

通過上述方法,可以將raid的所有編譯碼操作轉換成了異或xor操作,從而可以提高io效率。

《待續》

乙個IO的傳奇一生 7 IO排程器設計考慮

通過前面的分析已經知道 io排程器主要是為了解決臨近 io合併的問題。磁介質儲存盤最大的效能瓶頸在於尋道。當使用者訪問乙個指定位址時,磁碟首先需要進行尋道操作,找到訪問位址所屬的區域。這種操作往往是毫秒級別的,相對於效能不斷提公升的 cpu而言,這種效能顯然是不可接受的。所以,磁碟最大的問題在於機械...

亞當 斯密 傳奇一生

亞當 斯密 1723 1790 是經濟學的主要創立者。1723年亞當 斯密出生在蘇格蘭法夫郡 county fife 的寇克卡迪 kirkcaldy 亞當 斯密的父親也叫亞當 斯密,是律師 也是蘇格蘭的軍法官和寇克卡迪的海關監督,在亞當 斯密出生前幾個月去世 母親瑪格麗特 margaret 是法夫郡...

英特爾前任 CEO 安迪 格魯夫的傳奇一生

安迪 格魯夫,前英特爾公司首席執行官,曾經是乙個納粹占領地的青年,是 只有偏執狂才能生存 的管理哲學的靈感,英特爾財政危機的拯救者,已經過世,享年79歲。他是乙個善變的,但有遠見的領導人,他幫助英特爾的微處理器成為了個人電腦內的中心技術。格魯夫賭上整個公司的豪賭 在80年代中期把英特爾的重心從儲存晶...