一種不滿條帶寫的方法及裝置的制造方法
【技術領域】
[0001]本發明涉及存儲技術領域,更具體地,涉及條帶化存儲技術領域。
【背景技術】
[0002]三條帶技術是一種結合了鏡像與糾刪碼的數據分布技術,用于解決數據寫入過程中若失敗而導致的數據不一致問題(即write hole問題),并且可提高系統性能以及提供系統負載均衡分布的高可靠性。三條帶技術是指對于邏輯層的每個條帶,其內部實現均由三個邏輯條帶組成。參見圖1,三個邏輯條帶分別為M條帶、RS條帶和N條帶,其中:
[0003]1、M條帶(鏡像條帶):該條帶上的數據使用副本機制進行保護。鏡像條帶用于存放不滿條帶寫(即小寫)數據,用以提升數據讀寫的性能;此外,鏡像條帶的寫入不覆蓋糾刪碼條帶上的數據,因此避免了寫入過程中由于節點失效而導致的數據不一致。當鏡像條帶的小寫積累到滿條帶或者系統啟動鏡像條帶到糾刪碼條帶的轉換以騰出鏡像條帶占用的空間時,鏡像條帶會被轉化成糾刪碼條帶。
[0004]2、RS條帶(糾刪碼條帶):該條帶上的數據使用Reed - Solomon編碼機制保護;如N+M糾刪碼,其中N為原始數據塊、M為校驗塊。
[0005]3、N條帶(空條帶):不存放數據的條帶。空條帶是滿條帶寫入時的短暫存放場所,寫完成后其狀態立即轉變為糾刪碼條帶。空條帶的存在使得數據寫入不覆蓋原來鏡像條帶與糾刪碼條帶上的數據,確保不會出現數據不一致的問題。
[0006]另外,為了確保鏡像條帶上的數據具有不低于糾刪碼條帶上的數據的保護級別,鏡像條帶上的數據所對應的副本存儲在該條帶的校驗塊所在的豎條帶(或稱副本節點)上。
[0007]盡管具備上述優點,但當前的三條帶技術未具體說明如何處理不滿條帶寫(尤其是不滿數據塊的小寫)請求。如果仍采用傳統的RAID做法,則一次小寫會涉及多次I/O (包括讀改寫、重構寫),即具有寫懲罰(write penalty)的問題,且大量的小寫會嚴重影響系統的性能。
【發明內容】
[0008]為解決上述問題,根據本發明的一個實施例,提供一種不滿條帶寫的方法,包括:
[0009]將數據寫入鏡像條帶;以及,修改所述條帶對應的位圖中的鏡像位圖指示位和鏡像位圖;其中,鏡像位圖指示位用于指示鏡像位圖中存放的是鏡像條帶數據信息還是指向鏡像條帶數據信息的地址,鏡像條帶數據信息用于指示鏡像條帶上的哪些位置有數據。
[0010]上述方法中,所述條帶對應的位圖包括鏡像位圖指示位、鏡像位圖和小寫粒度指示位;其中,小寫粒度指示位用于指示小寫請求的寫粒度。
[0011]上述方法中,當小寫請求的寫粒度是所述條帶的數據塊粒度的整數倍時,使鏡像位圖指示位指示鏡像位圖中存放的是鏡像條帶數據信息,并且在鏡像位圖中存放鏡像條帶數據信息。
[0012]上述方法中,當小寫請求的寫粒度不是所述條帶的數據塊粒度的整數倍時,使鏡像位圖指示位指示鏡像位圖中存放的是指向鏡像條帶數據信息的地址、在鏡像位圖中存放指向鏡像條帶數據信息的地址,并且在該地址處存放鏡像條帶數據信息。
[0013]上述方法中,當所述條帶的數據塊粒度為64KB并且小寫請求的寫粒度為4KB的整數倍但不是64KB的整數倍時,還修改所述條帶對應的位圖中的小寫粒度指示位,并且鏡像位圖指向的鏡像條帶數據信息采用16bit位圖來指示鏡像條帶數據塊上的哪些位置有數據。
[0014]上述方法中,當所述條帶的數據塊粒度為64KB并且小寫請求的寫粒度為512B的整數倍但不是64KB的整數倍時,還修改所述條帶對應的位圖中的小寫粒度指示位,并且鏡像位圖指向的鏡像條帶數據信息采用128bit位圖來指示鏡像條帶數據塊上的哪些位置有數據。
[0015]上述方法中,除了將數據寫入鏡像條帶,還將數據寫入所述條帶的校驗數據所在的磁盤上。
[0016]上述方法中,鏡像位圖為24bit。
[0017]上述方法中,當鏡像條帶的不滿條帶寫積累到滿條帶時,將鏡像條帶轉化為糾刪碼條帶。
[0018]根據本發明的一個實施例,還提供一種不滿條帶寫的裝置,包括:
[0019]用于將數據寫入鏡像條帶的設備;以及用于修改所述條帶對應的位圖中的鏡像位圖指示位和鏡像位圖的設備;其中,鏡像位圖指示位用于指示鏡像位圖中存放的是鏡像條帶數據信息還是指向鏡像條帶數據信息的地址,鏡像條帶數據信息用于指示鏡像條帶上的哪些位置有數據。
[0020]本發明具有如下的有益效果:
[0021]1、小寫的數據均寫到鏡像條帶和鏡像條帶的副本節點(即豎條帶),避免了傳統RAID的寫懲罰問題;此外,即使上層下發不滿條帶的寫請求,在塊設備層也可以被高效地處理,降低了寫處理過程中的讀寫操作所引起的系統開銷。
[0022]2、采用鏡像位圖記錄鏡像條帶數據信息或者指向該信息的地址,并且使用不同的小寫位圖來記錄不同粒度的小寫,降低了元數據的開銷。
【附圖說明】
[0023]以下參照附圖對本發明實施例作進一步說明,其中:
[0024]圖1示出了三條帶結構的示意圖;
[0025]圖2示出了根據本發明一個實施例的三條帶位圖結構及其存儲區域的示意圖;
[0026]圖3示出了根據本發明一個實施例的不同小寫粒度對應的小寫位圖的結構的示意圖;
[0027]圖4示出了根據本發明一個實施例的滿數據塊寫和不滿數據塊寫的示意圖。
【具體實施方式】
[0028]為了使本發明的目的、技術方案及優點更加清楚明白,以下結合附圖通過具體實施例對本發明進一步詳細說明。應當理解,此處所描述的具體實施例僅用以解釋本發明,并不用于限定本發明。
[0029]在描述本發明提供的不滿條帶寫方法之前,首先對基于三條帶技術的滿條帶寫步驟進行概括描述:
[0030]1、通過滿條帶的數據計算額外的冗余校驗;
[0031]2、根據當前三條帶的狀態,確定空條帶的位置;
[0032]3、下發對空條帶的寫請求;
[0033]4、寫成功后,將該空條帶轉化為糾刪碼條帶,其余條帶清空并標為空條帶。
[0034]鑒于以上滿條帶寫過程,根據本發明的一個實施例,提供一種不滿條帶寫的方法。
[0035]概括而言,該方法包括:將數據寫入鏡像條帶;以及,修改所述條帶對應的位圖(也稱作三條帶位圖)中的鏡像位圖指示位和鏡像位圖。其中,鏡像位圖指示位用于指示鏡像位圖中存放的是鏡像條帶數據信息還是指向鏡像條帶數據信息的地址,鏡像條帶數據信息用于指示鏡像條帶上的哪些位置有數據。
[0036]下面將按步驟描述本發明提供的不滿條帶寫的方法的一個實施例。
[0037]步驟1、創建與條帶對應的位圖(即三條帶位圖)。
[0038]三條帶位圖包括鏡像位圖指示位和鏡像位圖,參見圖2,示出了三條帶位圖的結構及其存放區域的一個實施例。圖2包括四個部分,其中,A部分示出了用于存放三條帶位圖的區域,該區域可分為多個4KB大小的頁,其中每個頁用于存放一項或多項三條帶位圖;B部分示出了每個頁包含的三條帶位圖的項數,當三條帶位圖的大小為64bit時,每個4KB的頁可包括512項三條帶位圖;C和D部分詳細示出了三條帶位圖的結構,其中,對于該64bit的三條帶位圖,第4位是鏡像位圖指示位(用M表示),第41-63位是鏡像位圖。此外,在該實施例中,三條帶位圖的第0-3位用于指示條帶狀態、第16-40位是RS位圖,并且第6-15是保留位。
[0039]鏡像位圖指示位可用于區分不滿條帶寫是滿數據塊的小寫還是不滿數據塊的小寫。本文中,滿數據塊小寫和不滿數據塊小寫的定義如下:由于三條帶的每個邏輯條帶可劃分為多個數據塊(即chunk,以N+M的三條帶為例,每個邏輯條帶有N+M個數據塊),該數據塊具有一定的粒度(稱為條帶的數據塊粒度),如果小寫請求的寫粒度不是該數據塊粒度的整數倍,則為不滿數據塊小寫;如果小寫請求的寫粒度是數據塊粒度的整數倍,則為滿數據塊小寫。本文中,條帶的數據塊粒度通常為64KB,不滿數據塊的小寫請求的寫粒度通常為4KB的整數倍或者512B的整數倍(其中,512B的整數倍可能包括4KB的整數倍)。
[0040]對于滿數據塊的鏡像條帶,鏡像位圖指示位為0,其表示鏡像位圖存放的是鏡像條帶數據信息;對于不滿數據塊的鏡像條帶,鏡像位圖指示位為1,其表示鏡像位圖存放的是指向鏡像條帶數據信息的地址。應理解,鏡像位圖指示位也可以用I來表示鏡像位圖存放的是鏡像條帶數據信息,用O來表示鏡像位圖存放的是指向鏡像條帶數據信息的地址。
[0041]對于具有N+M個數據塊的鏡像條帶,鏡像位圖的大小可以是N+M bit,也可以大于N+M bit。當鏡像