專利名稱:一種雙盤容錯磁盤陣列中單盤重構的方法
技術領域:
本發(fā)明屬于計算機存儲領域,具體涉及一種針對雙盤容錯磁盤陣列中單盤重構的 方法。這種方法適用于大部分雙盤容錯陣列,能夠提高雙盤容錯磁盤陣列單盤重構的性能, 降低重構時間。
背景技術:
可靠性與可用性是衡量在線存儲服務質量的重要標準。對于為商業(yè)與工業(yè)應用 提供在線服務的系統(tǒng),數(shù)據(jù)丟失以及時常間斷的服務往往意味著經(jīng)濟損失。磁盤冗余陣列 RAID (Redundant Array of Independent Disk)是能夠提供高可靠性與高可用性的主流選 擇之一。在早期的RAID規(guī)范中,例如RAID-O到RAID-5,其僅僅提供單盤容錯能力。近年 來,具有更高容錯能力的各種RAID系統(tǒng)逐漸開始被采用,因其在兩個或兩個以上磁盤同時 失效時仍然能夠恢復所有丟失的數(shù)據(jù),與此同時還能夠提供不間斷的在線服務。對于存儲系統(tǒng),特別是提供在線服務的存儲系統(tǒng),以最終用戶的立場,請求平均響 應時間是評價其服務質量的重要標準。但是,為了能夠在重建因磁盤失效而丟失的數(shù)據(jù)的 同時提供在線服務,重建數(shù)據(jù)帶來的讀/寫工作流與用戶請求帶來的工作流將會不可避免 的相互影響,從而直接導致最終用戶所享受的服務質量的下降。大量的研究表明,相對于無 故障模式,存在恢復工作流時的降級模式下,讀/寫請求平均響應時間會受到極大影響,往 往會增長數(shù)倍至數(shù)十倍不等。與此同時,相對于線下重建,在線重建的耗時也會呈數(shù)量級的 延長。因此,減小在線重構時用戶請求的平均響應時間,以及縮短重構時間,是提高最終用 戶所享受的服務質量最為直接有效的途徑。目前已有許多針對此問題的解決方案被提出, 例如,針對數(shù)據(jù)的分布的優(yōu)化方法、針對用戶工作流的優(yōu)化以及針對重構工作流的優(yōu)化。以 上方式都已被證明能夠有效的提高在線重構的性能,包括減小在線重構時用戶請求的平均 響應時間或者縮短重構時間。在具有雙盤容錯能力的RAID中,同樣也會存在上述問題。進一步看,在具有多盤 容錯能力的RAID系統(tǒng)中,單盤失效的可能性遠遠大于同時發(fā)生的雙盤失效。并且,從一個 單盤失效的狀態(tài)中恢復之前,系統(tǒng)的可靠性將會大大下降,這將會極大的增加數(shù)據(jù)丟失的 可能性??紤]以下情況,在一個單盤失效且出于降級狀態(tài)工作的RAID-6系統(tǒng)中,另一個磁 盤失效以及一個同時發(fā)生的塊錯誤將會帶來潛在的數(shù)據(jù)丟失的可能性。另外,研究指出,在 RAID系統(tǒng)中的磁盤錯誤總是具有一種“爆發(fā)”式的特性,即當一個磁盤失效后,在同一系統(tǒng) 中的另一個磁盤失效或是一系列的磁盤失效將會接踵而來。這也意味著失效盤上的數(shù)據(jù)很 可能會全部丟失。而縮短這樣一段低可靠性的持續(xù)時間,將是降低數(shù)據(jù)丟失可能性的最為 直接的方法。目前,RAID系統(tǒng)的編碼設計者主要關注的是重構時的解碼計算開銷。在具有雙盤 容錯能力的陣列糾刪碼中,幾乎所有的單盤失效恢復算法都僅僅使用一種類型的校驗鏈以 重構丟失的數(shù)據(jù)。在一個基于RDP編碼的陣列中,通常使用橫向校驗鏈來重構所有丟失的 數(shù)據(jù)。盡管這樣能夠獲得最優(yōu)的計算復雜度,然而,磁盤I/O與計算操作之間的巨大性能差距使得I/O帶寬成為重構過程的瓶頸。相對于由機械部件完成的數(shù)據(jù)存儲操作時間,由電 子部件完成的數(shù)據(jù)解碼操作時間要短得多。因此,更應該關心如何降低I/O開銷,而不僅僅 是限于計算開銷。更進一步來看,當在一個N+1 (N為大于2的素數(shù))列的RDP (Row-Diagonal Parity)編碼中全部使用橫向校驗進行單盤數(shù)據(jù)重構時,所有的重構工作流都限于前N個 盤之上。這樣將會在使用單獨校驗磁盤的編碼中引發(fā)重構工作流的不平衡,從而進一步的 降低重構性能。具有雙盤糾錯能力編碼中,每一個數(shù)據(jù)元素都會存在于兩條或兩條以上的校驗鏈 中。在單盤失效的情況下,這將意味著對于同一個數(shù)據(jù)元素,存在使用不同校驗鏈對其進行 重構的可能性。這也意味存在著,將RAID系統(tǒng)中的部分重構I/O工作流轉換成少許額外計 算開銷,并將剩余重構工作流更加均勻的分布于所有磁盤之中。本發(fā)明正是在此基礎上提 出的。
發(fā)明內容
為了解決以上問題,本發(fā)明提供了一種針對雙盤容錯磁盤陣列中單盤重構的方 法,該方法用計算量來換取磁盤I/O量,大大提高了單盤重構的性能。本發(fā)明提供了一種雙盤容錯磁盤陣列中單盤重構的方法,在所述的雙盤容錯磁盤 陣列中任意一個數(shù)據(jù)盤失效時,該方法包括以下步驟(1)任意選取第一個失效元素所在的一條校驗鏈,讀取該校驗鏈上除失效元素外 的所有元素,利用讀取的元素重構第一個失效元素;(2)選取下一個失效元素所在的一條校驗鏈,且該校驗鏈與所有已用于重構失效 元素的校驗鏈具有最多交點,讀取該校驗鏈上除失效元素外所有未被讀取的元素,利用該 校驗鏈上除失效元素外的所有元素來重構該校驗鏈上的失效元素;(3)重復進行步驟O),直至重構出所有失效元素。在傳統(tǒng)的單盤重構過程中,所有失效的元素都使用同一種類型的校驗鏈來重構, 幾乎所有未失效的元素都要被讀取來參與重構。本發(fā)明所述的方法通過使用不同種類的校 驗鏈來重構單盤數(shù)據(jù),能夠通過重復利用相同的元素于不同校驗鏈來重構失效元素,使得 未失效的數(shù)據(jù)元素不必全部參與重構,即未失效的數(shù)據(jù)不需要全部被讀取,大大減少了磁 盤I/O量,提高了數(shù)據(jù)恢復速度,提供了更好的系統(tǒng)性能。
圖1基于RDP編碼的RAID-6型陣列的一個條帶圖2基于RDP編碼的RAID-6型陣列中一個條帶的重構方法
具體實施例方式本發(fā)明提供了針對雙盤容錯磁盤陣列中單盤重構的方法,其中所述雙盤容錯磁盤 陣列使用兩種或兩種以上不同的校驗方式。任何由M個磁盤構成的雙盤容錯磁盤陣列都是由有限個K行*M列的相同類型的 條帶構成,那么,描述一個條帶的重構就等價于描述一個磁盤陣列的重構,其中,M是大于等 于4的整數(shù),K是大于等于2的整數(shù)。
下面以基于RDP編碼的磁盤陣列為例,來描述一下本發(fā)明的具體實施方式
。RDP編碼有兩種形式的校驗方式。在一個具有N+1 (N為大于2的素數(shù))個磁盤的 RDP編碼中,每一個條帶都是(N-I)行*(N+1)列的,前N個磁盤上同一行的元素構成一條橫 向校驗鏈,斜向的N個元素構成一條斜向校驗鏈。在磁盤陣列中任意一個數(shù)據(jù)盤失效時,本發(fā)明所述的方法包括以下步驟(1)任意選取第一個失效元素所在的一條校驗鏈,比如,選取橫向校驗鏈,讀取該 校驗鏈上除失效元素外的所有元素,利用讀取的元素重構第一個失效元素,即采用橫向校 驗算法計算出第一個失效元素;(2)選取下一個失效元素所在的一條校驗鏈,且該校驗鏈與所有已用于重構失效 元素的校驗鏈具有最多交點,若與所有已用于重構失效元素的校驗鏈具有最多交點的校驗 鏈為多條或者0條,則任意選取一條校驗鏈。讀取該校驗鏈上除失效元素外所有未被讀取 的元素,利用該校驗鏈上除失效元素外的所有元素來重構該校驗鏈上的失效元素。比如,第 二個失效元素所在的橫向校驗鏈與重構第一個失效元素的校驗鏈沒有交點,第二個失效元 素所在的斜向校驗鏈與重構第一個失效元素的校驗鏈有1個交點,則選取斜向校驗鏈來重 構第二個失效元素。(3)重復進行步驟O),直至重構出所有失效元素。圖1是一種基于RDP編碼的RAID-6型陣列的一個條帶,它是一個6行*8列的條 帶,每一個方格表示一個元素。該磁盤陣列中,磁盤0到磁盤5為數(shù)據(jù)盤,磁盤6和磁盤7 為校驗盤。該條帶中,前7個磁盤上的同一行元素構成一條橫向校驗鏈,磁盤6上元素是橫 向校驗元素;用同一數(shù)字標記的7個元素構成一條斜向校驗鏈,沒有數(shù)字標記的不參與斜 向校驗,磁盤7上的元素是斜向校驗元素。在磁盤1失效的情況下,對該磁盤中的一個條帶的重構方法如圖2所示,它采用了 本發(fā)明所提供的方法來進行重構,具體步驟如下1、對于第0行的失效元素,可以任選一種校驗方式進行重構,這里選取橫向校驗 來進行重構;2、對于第1行的失效元素,其橫向校驗鏈與重構第0行失效元素的校驗鏈沒有交 點,斜向校驗鏈與重構第0行失效元素的校驗鏈有1個交點,故選用斜向校驗來進行重構;3、對于第2行的失效元素,其橫向校驗鏈與重構第0行、第1行失效元素的校驗鏈 有1個交點,斜向校驗鏈與重構第0行、第1行失效元素的校驗鏈有1個交點,可以任選一 種校驗方式,這里選用橫向校驗來進行重構;4、對于第3行的失效元素,其橫向校驗鏈與重構第0行、第1行、第2行失效元素 的校驗鏈有1個交點,斜向校驗鏈與重構第O行、第1行、第2行失效元素的校驗鏈有2個 交點,故選用斜向校驗來進行重構;5、對于第4行的失效元素,其橫向校驗鏈與重構第0行、第1行、第2行、第3行失 效元素的校驗鏈有2個交點,斜向校驗鏈與重構第0行、第1行、第2行、第3行失效元素的 校驗鏈有2個交點,可以任選一種校驗方式,這里選用斜向校驗來進行重構;6、對于第5行的失效元素,它只參與橫向校驗,不參與斜向校驗,故選用橫向校驗 來進行重構;根據(jù)以上步驟,則需使用橫向校驗來重構位于第0行、第2行以及第5行的失效元素,并使用斜向校驗來重構位于第1行、第3行以及第4行的失效元素。由圖2可知,采用本發(fā)明所述方法對磁盤1進行重構的過程中,只需讀取27個元 素即能夠重構6個丟失的元素。相比于僅僅使用橫向校驗鏈重構需讀取36個元素,本發(fā)明 所述方法能夠減少(36-27)/36的重構讀流量,即25%的重構讀流量。另一方面,為了重構 此6個丟失的數(shù)據(jù)元素,若僅僅使用橫向校驗鏈,則會帶來6*(7-1)次異或操作。但由于RDP 編碼的特殊結構,使得其橫向校驗鏈長度與對角校驗鏈長度一樣。因此,若采用本發(fā)明所述 方法,同樣也會帶來6*(7-1)次異或操作,而不會帶來額外的計算開銷??偠灾捎帽?發(fā)明提供的方法對基于RDP編碼的RAID-6型陣列的一個6行*8列的條帶進行重構時,將 會降低25%的重構元素讀取總需求,而不會產(chǎn)生任何額外的計算開銷。以上所述為本發(fā)明的較佳實施例而已,但本發(fā)明不應該局限于該實施例和附圖所 公開的內容。所以凡是不脫離本發(fā)明所公開的精神下完成的等效或修改,都落入本發(fā)明保 護的范圍。
權利要求
1. 一種雙盤容錯磁盤陣列中單盤重構的方法,在所述的雙盤容錯磁盤陣列中任意一 個數(shù)據(jù)盤失效時,該方法包括以下步驟(1)任意選取第一個失效元素所在的一條校驗鏈,讀取該校驗鏈上除失效元素外的所 有元素,利用讀取的元素重構第一個失效元素;(2)選取下一個失效元素所在的一條校驗鏈,且該校驗鏈與所有已用于重構失效元素 的校驗鏈具有最多交點,讀取該校驗鏈上除失效元素外所有未被讀取的元素,利用該校驗 鏈上除失效元素外的所有元素來重構該校驗鏈上的失效元素;(3 )重復進行步驟(2 ),直至重構出所有失效元素。
全文摘要
本發(fā)明提供了一種雙盤容錯磁盤陣列中單盤重構的方法,該方法首先選取第一個失效元素所在的任意一條校驗鏈,利用該校驗鏈重構第一個失效元素;之后再選取下一個失效元素所在的一條校驗鏈,且該校驗鏈與所有已用于重構失效元素的校驗鏈具有最多交點,利用該校驗鏈重構失效元素,如此反復,直至重構出所有失效元素。在傳統(tǒng)的單盤重構過程中,所有失效的元素都使用同一類型校驗鏈來重構,幾乎所有未失效的元素都要被讀取。本發(fā)明所述的方法通過使用不同類型的校驗鏈來重構,通過重復利用相同的元素于不同校驗鏈來重構,使得很多未失效的元素不必被讀取,大大減少了磁盤I/O量,提高了數(shù)據(jù)恢復速度,提供了更好的系統(tǒng)性能。
文檔編號G06F3/06GK102103533SQ20111004577
公開日2011年6月22日 申請日期2011年2月25日 優(yōu)先權日2011年2月25日
發(fā)明者萬勝剛, 曹強, 詹盛輝, 謝長生, 黃建忠 申請人:華中科技大學