分布式閃存存儲系統(tǒng)的制作方法
【專利摘要】本發(fā)明提出一種分布式閃存存儲系統(tǒng),包括:分布式文件系統(tǒng)層,用于提供對文件數(shù)據(jù)的分布管理,并使文件元數(shù)據(jù)操作具有事務(wù)性特征;分布式閃存轉(zhuǎn)換層,用于對閃存存儲設(shè)備進行空間分配以及對多個閃存存儲設(shè)備之間進行負(fù)載均衡;以及高速存儲設(shè)備層,用于對分布式存儲系統(tǒng)提供并發(fā)的存儲單元和數(shù)據(jù)存儲空間,以對文件數(shù)據(jù)進行存儲。根據(jù)本發(fā)明實施例的系統(tǒng),能夠充分發(fā)揮閃存存儲設(shè)備的存儲和處理性能,提升整個系統(tǒng)的性能。
【專利說明】分布式閃存存儲系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及網(wǎng)絡(luò)【技術(shù)領(lǐng)域】,特別涉及一種分布式閃存存儲系統(tǒng)。
【背景技術(shù)】
[0002]隨著數(shù)據(jù)的爆炸性增長以及高速處理需求,應(yīng)用程序?qū)τ跀?shù)據(jù)的存儲管理以及訪問性能要求也越來越高。單個存儲節(jié)點或者存儲陣列難以提供PB級或者更大的存儲容量。單節(jié)點的處理性能和訪問帶寬遠不能滿足現(xiàn)實應(yīng)用。分布式存儲系統(tǒng)提供了管理分布式的存儲資源,提供了單一的命名空間,方便了數(shù)據(jù)共享,提供更高的聚集數(shù)據(jù)訪問帶寬。
[0003]分布式存儲系統(tǒng)主要針對大規(guī)模數(shù)據(jù)密集型應(yīng)用提供高的訪問性能和擴展性。這些大規(guī)模數(shù)據(jù)密集型應(yīng)用主要有以下共同點:(I)屬于數(shù)據(jù)IO密集型,或者是元數(shù)據(jù)IO密集型;(2)均需要順序或者隨機訪問大型數(shù)據(jù)集;(3)都需要大規(guī)模并行化,可能同時具有成千上萬個并發(fā)操作。現(xiàn)有的基于磁盤的分布式存儲系統(tǒng)雖然能提供很好的順序訪問性能,但是由于磁盤固有的機械特性,很難對多個小的隨機訪問提供足夠的性能需求。
[0004]近年來,閃存存儲的制造工藝日趨成熟,容量增加,成本降低。相比傳統(tǒng)硬盤,無機械部件的閃存存儲設(shè)備能耗低,抗震性能強,體積小,隨機讀寫性能更好。然而,傳統(tǒng)分布式存儲系統(tǒng)復(fù)雜繁冗,而且主要針對磁盤優(yōu)化。除此之外,上層文件系統(tǒng)與下層存儲設(shè)備之間不能有效地交換語義信息,進而導(dǎo)致將其應(yīng)用到閃存設(shè)備上時,出現(xiàn)功能重復(fù)實現(xiàn)、優(yōu)化相互沖突等多種問題。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的旨在至少解決上述的技術(shù)缺陷之一。
[0006]為此,本發(fā)明的目的在于提出一種分布式閃存存儲系統(tǒng)。
[0007]為達到上述目的,本發(fā)明的實施例提出一種分布式閃存存儲系統(tǒng),包括:
[0008]分布式文件系統(tǒng)層,用于提供對文件數(shù)據(jù)的分布式管理,并使所述文件元數(shù)據(jù)操作具有事務(wù)性特征;
[0009]分布式閃存轉(zhuǎn)換層,用于對閃存存儲設(shè)備進行空間分配以及對多個閃存存儲設(shè)備之間進行負(fù)載均衡;以及
[0010]高速存儲設(shè)備層,用于為所述分布式閃存存儲系統(tǒng)提供并發(fā)的存儲單元和數(shù)據(jù)存儲空間,以對所述文件數(shù)據(jù)進行存儲。
[0011]根據(jù)本發(fā)明實施例的系統(tǒng),能夠充分發(fā)揮閃存存儲設(shè)備的存儲和處理性能,提升整個系統(tǒng)的性能。
[0012]在本發(fā)明的一個實施例中,所述分布式文件系統(tǒng)層具體包括:基于SSD的RAID再同步一致性協(xié)議模塊,用于更新所述文件的條帶,并在所述閃存存儲設(shè)備發(fā)生故障失效時,通過RAID再同步一致性協(xié)議恢復(fù)所述閃存存儲設(shè)備中的失效數(shù)據(jù);元數(shù)據(jù)操作一致性協(xié)議模塊,用于對分布式文件系統(tǒng)中元數(shù)據(jù)的內(nèi)容進行更新,并在所述閃存存儲設(shè)備發(fā)生故障失效時,對所述元數(shù)據(jù)進行恢復(fù);以及對象分布模塊,用于通過分組方式為所述分布式閃存存儲系統(tǒng)中的每個對象分配一個特定的設(shè)備來存儲對象數(shù)據(jù)。
[0013]在本發(fā)明的一個實施例中,所述分布式閃存轉(zhuǎn)換層具體包括:對象空間管理模塊,用于合并文件系統(tǒng)中空間管理的映射表和FTL中邏輯地址映射到物理地址的映射表,以建立對象邏輯偏移地址與對應(yīng)的物理地址之間的映射關(guān)系;冷熱數(shù)據(jù)分組模塊,用于通過所述閃存設(shè)備中閃存數(shù)據(jù)頁面之間的相關(guān)性分離冷熱數(shù)據(jù);以及負(fù)載均衡模塊,用于通過監(jiān)控多個閃存存儲設(shè)備之間的擦除頻率,將部分?jǐn)?shù)據(jù)從擦除頻率高的閃存存儲設(shè)備移動至擦除頻率低的設(shè)備,以均衡所述多個閃存存儲設(shè)備之間的負(fù)載。
[0014]在本發(fā)明的一個實施例中,所述高速存儲設(shè)備層具體包括:并發(fā)存儲模塊,用于把所述閃存存儲設(shè)備的多個并行單元中相同地址的閃存塊映射成一個虛擬的閃存塊,以使所述分布式文件系統(tǒng)層的一段連續(xù)閃存頁位于閃存存儲設(shè)備的不同并行單元上。
[0015]在本發(fā)明的一個實施例中,所述對象空間管理模塊還用于將所述閃存存儲設(shè)備分為根區(qū)域、數(shù)據(jù)區(qū)域和更新區(qū)域。
[0016]在本發(fā)明的一個實施例中,所述對象空間管理模塊還用于當(dāng)所述更新區(qū)域的數(shù)據(jù)量大于預(yù)設(shè)值時,將所述更新區(qū)域的部分?jǐn)?shù)據(jù)轉(zhuǎn)換至數(shù)據(jù)區(qū)域。
[0017]在本發(fā)明的一個實施例中,所述負(fù)載均衡模塊進一步包括:重映射表管理單元,用于管理發(fā)生數(shù)據(jù)遷移對象的最新位置信息;垃圾回收頻率監(jiān)控單元,用于監(jiān)控所述閃存存儲設(shè)備的垃圾回收頻率;訪問跟蹤單元,用于維護所述對象的訪問冷熱度;以及數(shù)據(jù)遷移單元,用于對所述閃存存儲設(shè)備之間進行數(shù)據(jù)遷移。
[0018]在本發(fā)明的一個實施例中,
[0019]所述并發(fā)存儲模塊還用于根據(jù)閃存并行單元地址、閃存塊地址和閃存頁地址對物理地址進行映射,其中,對所述物理地址的映射通過如下公式表示,所述公式為,原地址(A,B,C)映射為(B,A1, C,A2),其中,A1和A2分別表示閃存并行單元地址A的高位地址和低位地址,B表示閃存塊地址,C表示閃存頁地址。
[0020]本發(fā)明附加的方面和優(yōu)點將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本發(fā)明的實踐了解到。
【專利附圖】
【附圖說明】
[0021]本發(fā)明上述的和/或附加的方面和優(yōu)點從下面結(jié)合附圖對實施例的描述中將變得明顯和容易理解,其中:
[0022]圖1為根據(jù)本發(fā)明一個實施例的分布式閃存存儲系統(tǒng)的結(jié)構(gòu)框圖;
[0023]圖2為根據(jù)本發(fā)明一個實施例的分布式閃存存儲系統(tǒng)的整體框圖;
[0024]圖3為根據(jù)本發(fā)明一個實施例的基于SSD的RAID再同步一致性協(xié)議模塊進行條帶更新的流程圖;
[0025]圖4為根據(jù)本發(fā)明一個實施例的元數(shù)據(jù)操作一致性協(xié)議模塊進行元數(shù)據(jù)更新的流程圖;
[0026]圖5為根據(jù)本發(fā)明一個實施例的對象分布模塊的示意圖;
[0027]圖6為根據(jù)本發(fā)明一個實施例的對象分布算法偽代碼;
[0028]圖7 Ca)和(b)分別為根據(jù)本發(fā)明一個實施例的RAID再同步過程中的并發(fā)失效和成功的示意圖;[0029]圖8為根據(jù)本發(fā)明一個實施例的對象空間管理模塊的結(jié)構(gòu)圖;以及
[0030]圖9為根據(jù)本發(fā)明一個實施例的負(fù)載均衡模塊示意圖。
【具體實施方式】
[0031]下面詳細描述本發(fā)明的實施例,實施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施例是示例性的,僅用于解釋本發(fā)明,而不能理解為對本發(fā)明的限制。
[0032]在本發(fā)明的描述中,需要理解的是,術(shù)語“中心”、“縱向”、“橫向”、“上”、“下”、“前”、“后”、“左”、“右”、“豎直”、“水平”、“頂”、“底”、“內(nèi)”、“外”等指示的方位或位置關(guān)系為基于附圖所示的方位或位置關(guān)系,僅是為了便于描述本發(fā)明和簡化描述,而不是指示或暗示所指的裝置或元件必須具有特定的方位、以特定的方位構(gòu)造和操作,因此不能理解為對本發(fā)明的限制。此外,術(shù)語“第一”、“第二”僅用于描述目的,而不能理解為指示或暗示相對重要性。
[0033]在本發(fā)明的描述中,需要說明的是,除非另有明確的規(guī)定和限定,術(shù)語“安裝”、“相連”、“連接”應(yīng)做廣義理解,例如,可以是固定連接,也可以是可拆卸連接,或一體地連接;可以是機械連接,也可以是電連接;可以是直接相連,也可以通過中間媒介間接相連,可以是兩個元件內(nèi)部的連通。對于本領(lǐng)域的普通技術(shù)人員而言,可以具體情況理解上述術(shù)語在本發(fā)明中的具體含義。
[0034]圖1為根據(jù)本發(fā)明一個實施例的分布式閃存存儲系統(tǒng)的結(jié)構(gòu)框圖。如圖1所示,根據(jù)本發(fā)明實施例的分布式閃存存儲系統(tǒng)包括分布式文件系統(tǒng)層100、分布式閃存轉(zhuǎn)換層200和高速存儲設(shè)備層300。
[0035]其中,分布式文件系統(tǒng)層100用于提供對文件數(shù)據(jù)的分布式管理,并使文件元數(shù)據(jù)操作具有事務(wù)性特征。
[0036]在本發(fā)明的一個實施例中,分布式文件系統(tǒng)層100具體包括:基于SSD的RAID再同步一致性協(xié)議模塊110、元數(shù)據(jù)操作一致性協(xié)議模塊120和對象分布模塊130。
[0037]其中,基于SSD的RAID再同步一致性協(xié)議模塊110用于更新文件的條帶,并在閃存存儲設(shè)備發(fā)生故障失效時,通過RAID再同步一致性協(xié)議恢復(fù)閃存存儲設(shè)備中的失效數(shù)據(jù)。此協(xié)議能保證在RAID再同步過程中發(fā)生并發(fā)失效時,仍能通過該協(xié)議恢復(fù)失效閃存設(shè)備中的數(shù)據(jù)。
[0038]元數(shù)據(jù)操作一致性協(xié)議模塊120用于對分布式文件系統(tǒng)中元數(shù)據(jù)的內(nèi)容進行更新,并在閃存存儲設(shè)備發(fā)生故障失效時,對元數(shù)據(jù)進行恢復(fù)。
[0039]對象分布模塊130用于通過分組方式為分布式閃存存儲系統(tǒng)中的每個對象分配一個特定的設(shè)備來存儲對象數(shù)據(jù)。此外,通過盡可能地將具有相同的失效域的存儲設(shè)備分至同一個組中,來提高集群系統(tǒng)的可靠性。
[0040]分布式閃存轉(zhuǎn)換層200用于對閃存存儲設(shè)備進行空間分配以及對多個閃存存儲設(shè)備之間進行負(fù)載均衡。
[0041]在本發(fā)明的一個實施例中,分布式閃存轉(zhuǎn)換層200具體包括:對象空間管理模塊210、冷熱數(shù)據(jù)分組模塊220和負(fù)載均衡模塊230。
[0042]其中,對象空間管理模塊210用于合并文件系統(tǒng)中空間管理的映射表和FTL中邏輯地址映射到物理地址的映射表,以建立對象邏輯偏移地址與對應(yīng)的物理地址之間的映射關(guān)系。
[0043]在本發(fā)明的一個實施例中,對象空間管理模塊210還用于將閃存存儲設(shè)備分為根區(qū)域、數(shù)據(jù)區(qū)域和更新區(qū)域。當(dāng)更新區(qū)域的數(shù)據(jù)量大于預(yù)設(shè)值時,將更新區(qū)域的部分?jǐn)?shù)據(jù)轉(zhuǎn)換至數(shù)據(jù)區(qū)域。
[0044]冷熱數(shù)據(jù)分組模塊220用于通過閃存設(shè)備中閃存數(shù)據(jù)頁面之間的相關(guān)性分離冷熱數(shù)據(jù),有效減少閃存垃圾回收時的寫放大,提高閃存壽命。負(fù)載均衡模塊230用于通過監(jiān)控多個閃存存儲設(shè)備之間的擦除頻率,將部分?jǐn)?shù)據(jù)從擦除頻率高的閃存存儲設(shè)備移動至擦除頻率低的設(shè)備,以均衡多個閃存存儲設(shè)備之間的負(fù)載以及壽命磨損。
[0045]在本發(fā)明的一個實施例中,負(fù)載均衡模塊230進一步包括:重映射表管理單元、垃圾回收頻率監(jiān)控單元、訪問跟蹤單元和數(shù)據(jù)遷移單元。
[0046]重映射表管理單元用于管理發(fā)生數(shù)據(jù)遷移對象的最新位置信息。
[0047]垃圾回收頻率監(jiān)控單元用于監(jiān)控閃存存儲設(shè)備的垃圾回收頻率。
[0048]訪問跟蹤單元用于維護對象的訪問冷熱度。
[0049]數(shù)據(jù)遷移單元用于對閃存存儲設(shè)備之間進行數(shù)據(jù)遷移。
[0050]高速存儲設(shè)備層300用于為分布式閃存存儲系統(tǒng)提供并發(fā)的存儲單元和數(shù)據(jù)存儲空間,以對文件數(shù)據(jù)進行存儲。
[0051]在本發(fā)明的一個實施例中,存儲設(shè)備層300具體包括:并發(fā)存儲模塊310。
[0052]其中,并發(fā)存儲模塊310用于把閃存存儲設(shè)備的多個并行單元中相同地址的閃存塊映射成一個虛擬的閃存塊,以使分布式文件系統(tǒng)層的一段連續(xù)閃存頁位于閃存存儲設(shè)備的不同并行單元上。
[0053]在本發(fā)明的一個實施例中,并發(fā)存儲模塊310還用于
[0054]根據(jù)閃存并行單元地址、閃存塊地址和閃存頁地址對物理地址進行映射,其中,對物理地址的映射通過如下公式表示,公式為,原地址(A,B, C)映射為(B,A1, C,A2),其中,A1和A2分別表示閃存并行單元地址A的高位地址和低位地址,B表示閃存塊地址,C表示閃存頁地址。
[0055]圖2為根據(jù)本發(fā)明一個實施例的分布式閃存存儲系統(tǒng)的整體框圖。如圖2所示,本發(fā)明的分布式閃存存儲系統(tǒng)主要包括:多個客戶端,以下簡稱client ; —臺元數(shù)據(jù)服務(wù)器,以下簡稱MDS (Metadata Server);以及多個基于對象存儲的高速閃存存儲設(shè)備,以下簡稱 POFS (Parallel Object-based Flash Storage)。其中:P0FS 用以存儲文件系統(tǒng)中的數(shù)據(jù)和元數(shù)據(jù),client和MDS通過以太網(wǎng)與POFS進行通信并傳輸數(shù)據(jù),MDS負(fù)責(zé)管理分布式文件系統(tǒng)的名字空間和元數(shù)據(jù)信息,以及維護對象的位置信息。Client通過PNFS協(xié)議在MDS上查找待訪問文件所包含的對象號以及各對象的地址信息(各對象所在的POFS編號),在得到上述信息后,client就可以直接訪問數(shù)據(jù),而不需要每次訪問數(shù)據(jù)之前都經(jīng)過MDS0通過分離數(shù)據(jù)訪問路徑和元數(shù)據(jù)訪問路徑,數(shù)據(jù)和元數(shù)據(jù)的操作可以并行地執(zhí)行,分別由client和MDS與POFS進行交互。
[0056]在分布式文件系統(tǒng)中,每個文件被劃分成若干對象,其中每個對象可能分布于任意一個POFS中,并至少占用一個閃存頁面,具體對象分布策略由本系統(tǒng)中的對象分布模塊所決定。文件的屬性(inode)存放在它所包含的對象的屬性中。文件系統(tǒng)中的元數(shù)據(jù),例如超級塊、目錄等,均以對象的形式存儲。為了保證某些POFS在發(fā)生故障以后存儲系統(tǒng)仍可用,文件的屬性、超級塊對象、目錄對象都以鏡像的方式存儲在多個POFS中,而普通文件的數(shù)據(jù)都以RAID-5的形式組織存放在它所包含的若干對象中。為了保證元數(shù)據(jù)訪問的效率,MDS維護了元數(shù)據(jù)緩存,根據(jù)元數(shù)據(jù)訪問的局部性原理,MDS把最近經(jīng)常訪問的元數(shù)據(jù)放入DRAM中進行緩存,使得client訪問元數(shù)據(jù)時盡量在MDS的DRAM中就能獲取最新數(shù)據(jù)。
[0057]本發(fā)明中存儲節(jié)點POFS直接管理裸閃存設(shè)備,閃存的FTL功能從閃存設(shè)備層移動到了系統(tǒng)軟件層,新的 FTL 簡稱為 POFTL(Parallel Object-based Flash TranslationLayer),它直接將對象中的邏輯偏移地址映射成為該部分?jǐn)?shù)據(jù)在閃存設(shè)備中存儲的物理地址。
[0058]在本發(fā)明的一個實施例中,分布式閃存轉(zhuǎn)換層200和高速存儲設(shè)備層300共同組成了 POFS,POFS向client和MDS提供如下對象訪問接口:
[0059]I> ocreate/oremove(oid)
[0060]2> oread/owrite(oid, offset, length, buf)
[0061]3> osetattr/ogetattr(oid, length, buf)
[0062]4、tx_owrite (oid, offset, length, buf, tx_id, bitmap)
[0063]5、tx_write_log (tx_id, length, buf)
[0064]6、tx_erasure(tx_id)
[0065]7> tx_conversion(tx_id)
[0066]ocreate/oremove (oid)分別表示創(chuàng)建或者刪除一個編號是oid的對象。
[0067]oread/owrite (oid, offset, length, buf)接口表示對編號是 oid 的對象的普通讀寫操作,本次操作不屬于任何一次事務(wù)。如果是oread操作,則表示把該對象從offset偏移處的length個字節(jié)讀入buf中。如果是owrite操作,貝U表示把buf中l(wèi)ength個字節(jié)的數(shù)據(jù)寫入該對象的offset偏移處。
[0068]osetattr/ogetattr (oid, length, buf)接口,表示對編號是 oid 的對象的屬性讀寫操作。如果是osetattr操作,則表示把buf中l(wèi)ength字節(jié)的數(shù)據(jù)設(shè)置為該對象的屬性。如果是ogetattr操作,則表示把該對象前l(fā)ength字節(jié)的屬性讀入buf中。
[0069]tx_owrite (oid, offset, length, buf, tx_id, bitmap)接 口,表不對 POFS 進行事務(wù)性寫操作,該次寫操作所屬的事務(wù)編號為tx_id,且該次事務(wù)的位圖由bitmap表示,其中bitmap用以描述SCP協(xié)議中事務(wù)的元數(shù)據(jù),bitmap所表示的具體信息將在以下SCP協(xié)議中具體說明。寫操作中其余參數(shù)和owrite操作類似。
[0070]tx_write_log(oid, tx_id, length, buf)接口,表示將事務(wù)編號為 tx_id 的事務(wù)的日志記錄寫入POFS的日志區(qū)域中,該日志的記錄內(nèi)容為buf的前l(fā)ength個字節(jié)。
[0071]tx_erasure (tx_id)接口,表示擦除和事務(wù)編號為tx_id的事務(wù)相關(guān)的所有閃存頁面。
[0072]tx_conversion (tx_id)接口,表示POFTL可以將和事務(wù)編號為tx_id的事務(wù)相關(guān)的所有閃存頁面從更新區(qū)域移動至數(shù)據(jù)區(qū)域。除此之外,事務(wù)編號小于tx_id的事務(wù)的相關(guān)日志記錄可以刪除。
[0073]基于SSD的RAID再同步協(xié)議模塊110所要解決的數(shù)據(jù)丟失問題具體描述如下:在大規(guī)模分布式存儲系統(tǒng)中,存儲節(jié)點會經(jīng)常因為許多不確定因素而導(dǎo)致失效重啟。在更新文件內(nèi)容時,假設(shè)文件數(shù)據(jù)以RAID-5方式組織,更新一個條帶可能需要系統(tǒng)同時更新兩個甚至多個POFS節(jié)點上的數(shù)據(jù)。在一個相關(guān)的POFS掉電后且成功恢復(fù)之前,此時如果同時有另外一個相關(guān)的POFS發(fā)生故障失效并退出集群系統(tǒng),例如設(shè)備出現(xiàn)故障等,那么這個POFS上的數(shù)據(jù)將永遠不可恢復(fù)。圖7 (a)和(b)分別為根據(jù)本發(fā)明一個實施例的RAID再同步過程中的并發(fā)失效和成功的示意圖。如圖7(a)所示,當(dāng)用戶在第三次更新該條帶的時候,此時POFS3發(fā)生故障失效了,頁面C3未能成功寫入POFS3的閃存設(shè)備中,當(dāng)POFS3重啟后再一次加入到存儲系統(tǒng)中時,需要首先通過POFS1和POFS2中同一條帶的相關(guān)數(shù)據(jù)計算出POFS3上對應(yīng)的數(shù)據(jù)內(nèi)容,并把數(shù)據(jù)寫入POFS3,以達到條帶一致的狀態(tài)。然而,如果上述重啟恢復(fù)的過程在未完成以前(C3成功寫入POFS3之前),POFS2此時因為一些特殊原因永久地退出了集群系統(tǒng),那么POFSp POFS2, POFS3上該條帶的數(shù)據(jù)將永遠不能恢復(fù)到一個一致的狀態(tài),具體原因可以解釋如下:為了達到一致的狀態(tài),恢復(fù)過程或者恢復(fù)到狀態(tài)(A2,B1, C2),或者恢復(fù)到狀態(tài)(A3,B3, C3),然而,此時頁面A2和B1由于均被覆蓋寫入而丟失,頁面B3由于POFS2永久退出而不能恢復(fù),頁面C3未能成功寫入POFS3,因此,此時恢復(fù)不到任何一個一致的狀態(tài)(任何一個狀態(tài)都出現(xiàn)至少兩個頁面丟失,導(dǎo)致RAID-5不可恢復(fù))。
[0074]基于SSD的RAID再同步一致性協(xié)議模塊110,即SCP協(xié)議模塊是為了解決上述服務(wù)器恢復(fù)過程中由于并發(fā)失效而導(dǎo)致的數(shù)據(jù)丟失問題,SCP協(xié)議用來保證POFS在出現(xiàn)上述并發(fā)失效時,相關(guān)POFS上的數(shù)據(jù)能夠恢復(fù)到一致的狀態(tài)(在上述例子中,SCP保證POFS2永久失效后,還能將數(shù)據(jù)恢復(fù)到一致的狀態(tài))。SCP協(xié)議具體包含兩個過程:條帶更新和失效恢復(fù)過程。
[0075]圖3為根據(jù)本發(fā)明一個實施例的基于SSD的RAID再同步一致性協(xié)議模塊進行條帶更新的流程圖。如圖3所示,基于SSD的RAID再同步一致性協(xié)議模塊(即SCP協(xié)議模塊)進行條帶更新的過程如下:
[0076]1、Client在更新一個文件的條帶時,MDS為此次更新操作分配唯一的一個編號,記為SID。對于和每個條帶相關(guān)的更新操作,SID是順序分配的。除此之外,每次更新一個條帶時,client會計算出一個32位的位圖(bitmap),每一位代表該條帶所屬的文件的一個相關(guān)對象,如果位圖的第i位設(shè)置為1,則表示此次更新關(guān)聯(lián)該文件的第i個對象。SID和bitmap將會存放在閃存頁面的OOB (out-of-band)空間。
[0077]2、繼上一步得到bitmap和SID之后,client向所有和該更新操作相關(guān)的POFS發(fā)送 tx_owrite (oid, offset, length, buf, SID, bitmap)操作命令。
[0078]3、所有POFS在接收到該事務(wù)寫操作命令后,將相關(guān)的數(shù)據(jù)寫入閃存設(shè)備的更新區(qū)域中,如果寫入成功,則向client返回寫入成功消息。否則,返回寫入失敗消息。
[0079]4、如果client接收到了和該SID相關(guān)的所有POFS的操作成功消息,那么此時,client需要向所有相關(guān)POFS發(fā)送tx_conversion (SID)命令。每個POFS接收到該命令之后,表示該閃存設(shè)備更新區(qū)域中和SID相關(guān)的所有閃存頁面可以轉(zhuǎn)換至數(shù)據(jù)區(qū)域了。相反,假設(shè)有一個或者多個POFS返回了寫入失敗的消息,則表示此次條帶更新操作需要取消,而且必須在下一次更新該條帶之前取消成功。此時,client向所有相關(guān)的POFS發(fā)送tx_erasure (SID)命令,擦除所有相關(guān)的閃存頁面。
[0080]SCP協(xié)議模塊的失效恢復(fù)描述如下:
[0081]當(dāng)一個POFS (假設(shè)是POFSf)永久退出了集群中時,SCP協(xié)議需要恢復(fù)該POFS上的數(shù)據(jù)。對于每個條帶S,恢復(fù)過程的目的是將POFSf中和該條帶S相關(guān)的最新的且已經(jīng)提交的頁面恢復(fù)出來。
[0082]POFS中一個閃存頁面已經(jīng)提交,當(dāng)且僅當(dāng)該頁面所對應(yīng)的條帶更新操作已經(jīng)成功提交,即此次更新操作所包含的所有更新頁面都已經(jīng)成功寫入相關(guān)POFS的更新區(qū)域中。POFS中和條帶S相關(guān)的最新的且已經(jīng)提交的閃存頁面,需滿足兩個條件:1.該閃存頁面屬于條帶S,且已經(jīng)提交;2.該閃存頁面對應(yīng)OOB區(qū)域中的SID是該POFS中所有和條帶S相關(guān)的閃存頁面中所對應(yīng)的最大SID。
[0083]在本發(fā)明的一個實施例中,SCP協(xié)議的失效恢復(fù)過程具體如下:
[0084]對于每個條帶S,假設(shè)和該條帶相關(guān)的POFS編號為POFS1,POFS2,……,P0FSn?;謴?fù)過程需要首先找出從POFS1到POFSn上和條帶S相關(guān)的最新的且已經(jīng)提交的頁面,假設(shè)用SIDr來表示所有和條帶S相關(guān)的更新操作中的最大SID。
[0085]對于每個POFSi (I≤i≤η且i≠f ),恢復(fù)過程首先需要檢查該POFS上對應(yīng)條帶S且具有最大SID的那個閃存頁面是否是已經(jīng)提交的頁面,假設(shè)該頁面是Pi,它的OOB區(qū)域中對應(yīng)的SID是SIDi,對應(yīng)的bitmap為Bi,此時分為以下兩種情況:
[0086]如果SIDZSIDr,此時,根據(jù)SCP協(xié)議的隔離性,即對同一條帶,下一次更新操作一定在上一次成功提交之后才能進行。我們可以斷定條帶更新編號為SIDi的操作一定成功提交了,因此Pi是一個最新的且已經(jīng)提交的頁面。
[0087]如果SIDi=SID,,此時我們需要檢查編號為SID,的條帶更新操作是否成功提交。具體為:根據(jù)頁面Pi OOB中的bitmap Bi,查找Bi相應(yīng)位為I所對應(yīng)的POFS中是否已經(jīng)成功寫入相關(guān)頁面,例如,假設(shè)Bi中的第3位對應(yīng)為1,則需要查找POFS3中是否存在相關(guān)頁面,相關(guān)頁面表示該頁面中對應(yīng)OOB區(qū)域的SID等于SID,。如果Bi中相應(yīng)位為I所對應(yīng)的POFS中均能查找到相關(guān)頁面,則表示編號為SIDr的條帶更新操作執(zhí)行成功,頁面Pi為POFSi中最新的且已經(jīng)提交的頁面。否則,POFSi中對應(yīng)條帶S的最新的且已經(jīng)提交的頁面為Pk,Pk滿足該頁面對應(yīng)OOB中的SIDk為小于SIDr的最大SID。
[0088]繼上述步驟之后,假設(shè)P1, P2,……,Pn分別為POFS1到POFSn中對應(yīng)條帶S的最新的且已經(jīng)提交的頁面,則POFSf對應(yīng)條帶S的最新且已經(jīng)提交的頁面Pf可以通過如下異或運算計算出來:
[0089]Pf=P1XOR P2 XOR…XOR PmXOR Pf+1X0R—XOR Pn
[0090]元數(shù)據(jù)操作一致性協(xié)議模塊120即PCP協(xié)議模塊的處理包含兩個過程:元數(shù)據(jù)內(nèi)容更新和MDS或者閃存設(shè)備失效之后元數(shù)據(jù)一致性恢復(fù)過程。
[0091]圖4為根據(jù)本發(fā)明一個實施例的元數(shù)據(jù)操作一致性協(xié)議模塊進行元數(shù)據(jù)更新的流程圖。如圖4所示,PCP協(xié)議模塊對元數(shù)據(jù)內(nèi)容進行更新的過程如下:
[0092]1、當(dāng)MDS想執(zhí)行一個元數(shù)據(jù)事務(wù)操作時,MDS會為該事務(wù)操作分配唯一的一個事務(wù)ID,記為tx_id。此外,對于每個元數(shù)據(jù)事務(wù)操作,MDS需要在該事務(wù)操作所關(guān)聯(lián)的每個POFS上記錄一條相關(guān)的日志記錄,這條日志記錄的內(nèi)容包含該事務(wù)操作在該POFS上寫入數(shù)據(jù)的閃存頁面地址(該閃存頁面地址為邏輯地址,由三元組(oid, offset, length)組成,其中oid表示寫入對象的編號,offset表示寫入數(shù)據(jù)的對象邏輯偏移,length表示寫入數(shù)據(jù)的長度),以及和該事務(wù)操作關(guān)聯(lián)的其它所有POFS的編號。對于每次閃存頁面寫入操作,tx_id都會被寫入該閃存頁面OOB區(qū)域中。由于每個POFS上每條日志記錄是由tx_id來索引的,因此每個閃存頁面OOB區(qū)域中的tx_id指向了和該閃存頁面相關(guān)的事務(wù)操作所對應(yīng)的日志記錄。
[0093]2、繼上一步得到該事務(wù)操作的tx_id以及發(fā)送到每個POFS上的日志記錄后,MDS向所有和該事務(wù)操作相關(guān)的POFS同時發(fā)送以下兩條命令:tx_owrite (oid,offset, length, buf, tx_id, bitmap)和 tx_write_log (tx_id, length, buf)。由于在tx_owrite命令中,bitmap只在SCP協(xié)議中有效,因此在PCP協(xié)議中只需將其賦值為O即可。
[0094]3、各POFS在接收到上一步兩條命令時,將相關(guān)數(shù)據(jù)寫入該POFS的更新區(qū)域中,并將相關(guān)日志記錄寫入POFS的日志區(qū)域中。如果數(shù)據(jù)和日志記錄均寫入成功,則返回給MDS一條成功的消息,否則返回一條失敗的消息。
[0095]4、當(dāng)MDS接收到編號為tx_id的事務(wù)操作所關(guān)聯(lián)的所有POFS的反饋信息后,如果所有POFS返回的均是寫入成功的消息,MDS則發(fā)送tx_conversion(tx_id)命令至所有POFS0否則,如若有一個或者多個POFS返回了寫入失敗的消息,MDS向所有相關(guān)的POFS發(fā)送tx_erasure (tx_id)命令,擦除所有相關(guān)的閃存頁面。
[0096]在本發(fā)明的一個實施例中,PCP協(xié)議模塊的元數(shù)據(jù)一致性恢復(fù)過程具體如下:
[0097]當(dāng)POFS或者MDS從崩潰失效中重啟之后,MDS開始元數(shù)據(jù)的一致性恢復(fù)過程,由于所有尚未完成事務(wù)的閃存更新頁面均處于更新區(qū)域中,MDS在恢復(fù)的時候首先掃描所有POFS的更新區(qū)域。假設(shè)Th代表所有POFS上具有最大tx_id的事務(wù)(假設(shè)h代表最大的tx_id),那么元數(shù)據(jù)的一致性恢復(fù)過程只需要判斷Th (即具有最大tx_id的事務(wù)操作)是否已經(jīng)成功提交。
[0098]根據(jù)事務(wù)編號h,我們首先找出任意一條與Th相關(guān)的日志記錄,根據(jù)該條日志記錄,我們可以得到該Th相關(guān)的所有POFS的編號,假設(shè)為POFS1, POFS2,……,POFSm0
[0099]根據(jù)上一步的POFS編號,MDS需要在POFS1至POFSm中查找是否存在和Th相關(guān)的日志記錄和相關(guān)閃存頁面。在任意一臺POFSJgSS POFSi (I ≤ i≤m)中判斷和Th相關(guān)的日志記錄和閃存頁面是否存在的具體過程如下:首先在POFSi的日志區(qū)域檢索是否有和Th相關(guān)的日志記錄。若沒有,則返回不存在。若有,則根據(jù)日志記錄中所記錄的和Th相關(guān)的邏輯地址查找該閃存頁面是否存在,查找過程首先遍歷查找更新區(qū)域中是否有和該邏輯地址相關(guān)的閃存頁面,如若沒有,則再根據(jù)日志記錄中的邏輯地址和POFTL的索引查找數(shù)據(jù)區(qū)域。具體判斷一個閃存頁面P是否和Th相關(guān)的過程如下:讀取頁面P的OOB區(qū)域中所記錄的tx_id,如果tx_id等于h,則該頁面屬于Th的更新頁面,和Th相關(guān)。否則,該頁面和Th無關(guān)。
[0100]完成判斷之后,如果POFS1至POFSnP Th相關(guān)的日志記錄和更新的閃存頁面均存在,則表示Th已經(jīng)成功提交。否則如果有任意一個POFS中不存在相關(guān)日志記錄或者更新的閃存頁面,則表示Th未能成功提交,需要被終止,此時,由MDS主動向POFS1至POFSm發(fā)送tx_erasure (h)命令。[0101]對象分布模塊130的功能在于為系統(tǒng)中任意一個對象分配該對象的具體位置。本發(fā)明中對象分布模塊采用一種基于分組方式的對象組織模式,旨在提高集群系統(tǒng)中的可靠性以及提供一種高效、并行的數(shù)據(jù)恢復(fù)機制。對象分布模塊的工作方式如圖5所示,且其分布算法如圖6中的算法I所示。具體過程如下:[0102]對象分布模塊130將集群中的所有POFS平均拆分成η個不相關(guān)的組。具有相同失效域的POFS被分配到同一組,例如,把連接在同一個交換機上的POFS分配到同一個組。這使得大部分的單點失效僅僅會影響到一個組內(nèi)的P0FS。
[0103]在本發(fā)明的一個實施例中,每個文件包含多個對象,文件的數(shù)據(jù)以RAID-5方式組織在其所包含的對象上。假設(shè)一個文件的RAID-5寬度為r,即該文件包含r個對象。對象分布模塊130將這r個對象分布到r個不同組中。在創(chuàng)建一個文件時,MDS首先為該文件的第一個對象選擇一個組。假設(shè)組編號為Gf,其中,Gf的選擇方法如圖6的算法I中第14行所示,Gf為對象編號的hash值與總組數(shù)的取模結(jié)果。此外,該文件剩余的r-Ι個對象將分布在組范圍為[(Gf+l)mod n, (Gf+r-1) mod η]的連續(xù)r_l個組中,其中第i個對象分布在組編號為(Gf+i)mod η的組內(nèi)。因此,屬于同一個文件的所有r個對象將被分配到處于不同失效域內(nèi)的POFS節(jié)點中。
[0104]在每個組內(nèi),對象分布模塊130使用兩個hash函數(shù)來把一個對象映射到該組內(nèi)一個唯一的POFS中(如圖6的算法I中1-9行所示)。其中不同組內(nèi)的hash函數(shù)是相互獨立的。
[0105]假設(shè)對象的編號為obj_id,它被分配到組f中,且該組有g(shù)roup_size個P0FS,且組號為group_id。
[0106]第一個hash函數(shù)如圖6的算法I中第2行所示,它把obj_id和group_id作為輸入?yún)?shù),然后產(chǎn)生一個遠大于group_size的中間數(shù)值h。第二個hash函數(shù)如圖6的算法I的第3-8行所示,其將上一個hash函數(shù)所產(chǎn)生的中間數(shù)值h映射成為一個最終值,該值為POFS所在的組內(nèi)編號。這種hash方法帶來以下好處:當(dāng)系統(tǒng)想為某個組增加一臺POFS服務(wù)器時,系統(tǒng)只需要將一臺舊POFS上的部分?jǐn)?shù)據(jù)移動至新加入的POFS中,數(shù)據(jù)遷移只會發(fā)生在兩臺POFS之間。而且,數(shù)據(jù)遷移的量大概為舊POFS中總數(shù)據(jù)量的一半。
[0107]對于每個對象,通過計算出組編號和組內(nèi)編號后,就可以計算出分配給它的POFS服務(wù)器的編號,具體計算方法如圖6的算法I第19行所示。該對象即存放在該POFS上。
[0108]本發(fā)明中的對象分布模塊130具有以下優(yōu)點:
[0109]1、系統(tǒng)具有高可靠性。為了減少閃存寫,提高閃存壽命,本發(fā)明中的分布式閃存存儲系統(tǒng)使用了 RAID-5冗余模式替換了傳統(tǒng)分布式存儲系統(tǒng)的副本模式。然而對于每個文件,RAID-5只能同時容許該文件所屬的對象中只有一個對象發(fā)生失效。本發(fā)明中的對象分布模塊,通過將每個文件的不同對象分布到處于不同失效域的POFS節(jié)點中,使得大部分單點失效至多只會影響到每個文件的一個對象,進而提高了系統(tǒng)的可靠性。
[0110]2、高效、并行的數(shù)據(jù)恢復(fù)機制。對象分布模塊中,在計算組內(nèi)POFS編號的hash函數(shù)中,把組編號group_id加入進了該函數(shù)的輸入?yún)?shù)中,使得相關(guān)文件的不同對象被盡量分配到了不同的POFS上(例如:任意兩個處于同一失效POFS上的對象,分別與它們屬于同一文件的其它相關(guān)對象在其它組中會處于不同POFS上,而并非也處于同一 POFS上),提高了數(shù)據(jù)恢復(fù)的并行度和效率。
[0111]3、減少了元數(shù)據(jù)。對象分布模塊使用hash方式來計算對象的位置,不需要在MDS上建立全局映射表,減少了元數(shù)據(jù)的開銷,包括存儲開銷以及數(shù)據(jù)訪問開銷。
[0112]圖8為根據(jù)本發(fā)明一個實施例的對象空間管理模塊的結(jié)構(gòu)圖。對象空間管理模塊210,即POFTL模塊的結(jié)構(gòu)如圖8所示,其基本單元是對象(object)。所有對象都有一個唯一的對象標(biāo)識,即對象ID (—個64位整數(shù)),存儲系統(tǒng)通過該標(biāo)識來訪問對象。POFTL模塊向上提供基于對象的訪問接口,訪問接口主要有創(chuàng)建、讀、寫、刪除對象,設(shè)置、獲取對象屬性等接口。POFTL模塊在邏輯上把整個閃存設(shè)備的空間分為三部分,分別為:根區(qū)域,數(shù)據(jù)區(qū)域和更新區(qū)域,其中,在數(shù)據(jù)區(qū)域和更新區(qū)域用來存放對象數(shù)據(jù)。
[0113]其中,數(shù)據(jù)區(qū)域用以存放對象數(shù)據(jù),且對象包含兩個部分:對象的元數(shù)據(jù)和對象的數(shù)據(jù)。對象的元數(shù)據(jù)和數(shù)據(jù)分別存放于不同的閃存頁面中,其所在的閃存頁面又分別被稱為元數(shù)據(jù)頁和數(shù)據(jù)頁。對象的元數(shù)據(jù)包括對象的一些屬性信息,例如,對象的大小,其它用戶自定義的屬性信息和對象的布局信息。對象的布局按照extent方式存儲,即被組織成一系列的段,每個段中記錄該對象存儲在閃存中的一段連續(xù)數(shù)據(jù),具體包括該段數(shù)據(jù)的起始頁地址和長度。
[0114]根區(qū)域用來存放對象的索引結(jié)構(gòu)(用B+樹組織),該索引結(jié)構(gòu)把對象的編號映射成為它的元數(shù)據(jù)頁所在的地址。例如,對于某次讀操作,POFTL首先需要通過對象ID索引到該對象的元數(shù)據(jù)頁地址,通過元數(shù)據(jù)頁獲得對象數(shù)據(jù)的布局信息,最終通過布局信息得到對象數(shù)據(jù)的真實物理地址,進而訪問該對象的數(shù)據(jù)。除此之外,根區(qū)域通常還維護一些全局的分配和擦除信息。根區(qū)域為每個閃存塊存儲一條信息,即塊信息。每個閃存塊的塊信息可表示為:(該閃存塊的累積擦除次數(shù)(20位),該閃存塊中當(dāng)前擁有的無效頁面數(shù)(10位),該閃存塊的狀態(tài)(2位))。閃存塊的狀態(tài)用以區(qū)分該閃存塊目前所在的區(qū)域,例如00代表該閃存塊處于數(shù)據(jù)區(qū),01代表該閃存塊處于更新區(qū)域。無效頁面數(shù)被用在垃圾回收選擇待擦除的候選閃存塊中,例如,垃圾回收模塊可以選擇具有最多無效頁面數(shù)的閃存塊進行擦除,以減少所產(chǎn)生的寫放大。為了避免閃存塊的更新操作出現(xiàn)在正常的寫操作路徑中,內(nèi)存中閃存塊的臟條目信息只會在塊分配以及垃圾回收的過程中被寫入閃存設(shè)備中。
[0115]更新區(qū)域被用來存放新寫入的數(shù)據(jù),在閃存的存儲空間中劃分一部分空間作為更新區(qū)域,寫數(shù)據(jù)時需要的空閑頁均從這部分空間進行分配。對象元數(shù)據(jù)頁和數(shù)據(jù)頁分開存儲,更新區(qū)域分為元數(shù)據(jù)更新區(qū)域和數(shù)據(jù)更新區(qū)域,將元數(shù)據(jù)頁或者數(shù)據(jù)頁寫入閃存時,新寫入的數(shù)據(jù)均放入相應(yīng)的更新區(qū)域。當(dāng)更新區(qū)域的大小增長到一定界限時,將部分閃存塊從更新區(qū)域轉(zhuǎn)換為普通的數(shù)據(jù)區(qū)域,同時批量地更新映射表,這樣將多次寫合并,減少閃存的寫次數(shù),提高SSD的壽命。除此之外,為了方便上層文件系統(tǒng)設(shè)計事務(wù)操作的相關(guān)協(xié)議,更新區(qū)域中和某個事務(wù)操作相關(guān)的所有閃存頁面在未收到對該事務(wù)操作的轉(zhuǎn)換命令(即tx_conversion (tx_id))之前,不能把它們從更新區(qū)域移動至數(shù)據(jù)區(qū)域。每次把閃存塊從更新區(qū)域移至數(shù)據(jù)區(qū)域并不需要真實的數(shù)據(jù)拷貝操作,閃存頁面數(shù)據(jù)是否在更新區(qū)域由它所屬的閃存塊對應(yīng)的塊信息中的閃存塊狀態(tài)標(biāo)志。因此,當(dāng)每個閃存塊移動至數(shù)據(jù)區(qū)域時,只需更改該閃存塊的狀態(tài)標(biāo)志即可。
[0116]POFTL模塊的讀操作訪問流程如下:
[0117]讀取閃存設(shè)備中的根頁面,通過根頁面確定對象索引的根頁面地址。
[0118]在對象索引中搜索要訪問的對象ID,通過B+樹索引出對象的元數(shù)據(jù)頁地址。
[0119]根據(jù)獲得的元數(shù)據(jù)頁地址訪問相應(yīng)對象的元數(shù)據(jù)頁面獲取對象布局信息,并根據(jù)布局信息,確定要訪問對象的邏輯偏移具體映射在哪個物理頁面上。并根據(jù)得到的物理頁面地址讀取相應(yīng)數(shù)據(jù)返回給上層。
[0120]POFTL模塊的寫操作流程如下:[0121]寫操作分為以下兩種情況:
[0122]第一種情況是需要寫入的數(shù)據(jù)屬于對象的數(shù)據(jù)。此時,POFTL首先在更新區(qū)域找一個空閑頁面,把數(shù)據(jù)寫入進去,同時寫入以下信息至該頁面的OOB區(qū)域中,包括對象ID以及該段數(shù)據(jù)在對象中的邏輯偏移。這兩條信息組成了對象數(shù)據(jù)頁的反向指針(Datapagebackpointer)。
[0123]第二種情況是需要寫入的數(shù)據(jù)屬于對象的元數(shù)據(jù)。此時,POFTL首先在更新區(qū)域找一個空閑頁面,把元數(shù)據(jù)寫入進去,同時寫入該對象的ID至該頁面的OOB區(qū)域中。此時,該對象的ID成為了該對象元數(shù)據(jù)頁的反向指針(Metapage backpointer)。
[0124]在把更新區(qū)域中的閃存塊轉(zhuǎn)換進入數(shù)據(jù)區(qū)域時,如果該閃存塊中的存放的是數(shù)據(jù)頁,則需要更新相應(yīng)對象的元數(shù)據(jù)頁面,而該部分?jǐn)?shù)據(jù)所對應(yīng)的對象ID和邏輯偏移則可以從該數(shù)據(jù)頁的OOB中獲取。如果該閃存塊中存放的是元數(shù)據(jù)頁,則需要更新對象索引中的相關(guān)索引,而該元數(shù)據(jù)頁對應(yīng)的對象ID也同樣可以從OOB中獲取,方便了轉(zhuǎn)換時映射表的更新。除此之外,在反向指針的幫助下,POFS在失效重啟之后還可以通過僅僅掃描更新區(qū)域中的數(shù)據(jù)實現(xiàn)快速地恢復(fù)。
[0125]閃存在垃圾回收的過程中需要將塊內(nèi)的有效數(shù)據(jù)遷移到其它區(qū)域,然后才能將塊擦除,這會帶來額外的寫開銷,而且塊內(nèi)有效數(shù)據(jù)越多,開銷越大。因此,應(yīng)盡量將可能在同一時間范圍內(nèi)失效的數(shù)據(jù)存儲在同一個閃存塊中,使同一個塊內(nèi)的數(shù)據(jù)在大致相同的時間點失效,減少垃圾回收需要數(shù)據(jù)遷移的頁。傳統(tǒng)的方法無法利用文件系統(tǒng)的語義,只能按照數(shù)據(jù)頁的歷史訪問情況,將數(shù)據(jù)頁按照其訪問頻率劃分不同的冷熱度,然后分別寫入不同的閃存區(qū)域。然而數(shù)據(jù)頁的歷史訪問情況也不盡準(zhǔn)確,比如在刪除文件的情況下,文件的數(shù)據(jù)所在的閃存頁全部變?yōu)闊o效數(shù)據(jù),而閃存FTL無法有效獲取這些信息,當(dāng)這些閃存頁被其它文件重新利用時,其對應(yīng)的歷史記錄變得不準(zhǔn)確;而且對于追加寫時新寫入的文件邏輯地址,無法通過訪問歷史對數(shù)據(jù)的冷熱度進行劃分。
[0126]在分布式閃存轉(zhuǎn)換層200,通過消除了系統(tǒng)軟件和FTL的雙重映射,POFTL中的冷熱數(shù)據(jù)分組模塊充分利用文件/對象的語義信息,實現(xiàn)了更好的數(shù)據(jù)分布。首先,POFTL中能完整的獲取閃存頁的數(shù)據(jù)類型,數(shù)據(jù)頁、元數(shù)據(jù)頁、對象索引頁等,冷熱數(shù)據(jù)分組模塊220將閃存頁按照不同的數(shù)據(jù)類型分開。在寫入數(shù)據(jù)頁時,冷熱數(shù)據(jù)分組模塊會通過數(shù)據(jù)的緩存將多次的寫合并為一次大的連續(xù)寫,然后將冷熱數(shù)據(jù)分離,一個閃存塊內(nèi)的數(shù)據(jù)的冷熱度盡量相近,使對象內(nèi)的數(shù)據(jù)根據(jù)冷熱度的不同盡可能分開。
[0127]圖9為根據(jù)本發(fā)明一個實施例的負(fù)載均衡模塊示意圖。如圖9所示,負(fù)載均衡模塊230檢測各個POFS上的負(fù)載情況,并在負(fù)載不均衡時進行數(shù)據(jù)的遷移。負(fù)載均衡模塊230包括重映射表管理單元、垃圾回收頻率監(jiān)控單元、訪問跟蹤單元和數(shù)據(jù)遷移單元。
[0128]重映射表管理單元負(fù)責(zé)管理發(fā)生過數(shù)據(jù)遷移對象的最新位置信息。由于本發(fā)明中的對象分布模塊使用hash方式來計算出各個對象的位置信息,因此,發(fā)生了位置移動的對象需要用一張額外的表來記錄其位置信息,該表即為重映射表。當(dāng)client訪問對象的位置信息時,首先需要查詢重映射表,如果在重映射表中查找到了相關(guān)目錄項,則從該目錄項中取出位置信息返回給client,否則通過使用圖6中算法I所示的對象分布算法計算出對象的位置信息,并返回給client。
[0129]垃圾回收頻率監(jiān)控單元負(fù)責(zé)監(jiān)控各個POFS上的垃圾回收頻率。由于閃存設(shè)備的固有特性,每次寫需要異地更新,因此需要在POFTL中加入垃圾回收單元,每隔固定時間回收無效的閃存頁面。對于每個P0FS,后端垃圾回收過程和前端I/O訪問請求產(chǎn)生沖突,垃圾回收頻率越高,表示前端I/O請求的延遲越高,負(fù)載越大。相反,POFS的訪問延遲越小,負(fù)載越低。
[0130]訪問跟蹤單元負(fù)責(zé)維護每個對象的訪問冷熱度。訪問跟蹤單元結(jié)合訪問頻率和時間局部性來評價各個對象的訪問冷熱度。熱度越高的對象預(yù)示著該對象在接下來的一段時間內(nèi)很可能被訪問;相反,熱度越低的對象表示該對象在接下來的一段時間內(nèi)很有可能不被訪問。
[0131]數(shù)據(jù)遷移單元實現(xiàn)了各POFS之間的遷移過程。具體遷移過程采用了多線程的形式。
[0132]負(fù)載均衡模塊230的具體步驟如下:
[0133]由垃圾回收頻率監(jiān)控單元定期監(jiān)控各個POFS上的垃圾回收頻率,并計算它們的標(biāo)準(zhǔn)差。
[0134]當(dāng)各個POFS上垃圾回收頻率的標(biāo)準(zhǔn)差大于一個閾值時,表示負(fù)載嚴(yán)重不均衡。此時,垃圾回收頻率監(jiān)控單元通知所有垃圾回收頻率高出系統(tǒng)平均值的POFS開始數(shù)據(jù)遷移。
[0135]被通知數(shù)據(jù)遷移的POFS啟動數(shù)據(jù)遷移單元,并根據(jù)訪問跟蹤單元選出部分熱度最高的對象,遷移至垃圾回收頻率低于系統(tǒng)平均值的若干POFS中。
[0136]遷移完成后,由遷移過程的目標(biāo)服務(wù)器發(fā)送對象位置更新消息給重映射表管理單元,重映射表管理單元接收到此消息后,更新相應(yīng)對象的位置信息。
[0137]在本發(fā)明的一個實施例中,不同于傳統(tǒng)磁盤(由于磁盤只有一個磁頭,數(shù)據(jù)只能串行訪問),閃存能在設(shè)備中提供一定的數(shù)據(jù)并發(fā)訪問。通常閃存的并行級別為bank,不同bank處于設(shè)備的不同傳輸通路上,因此不同bank之間的數(shù)據(jù)訪問可以并行處理。
[0138]在本發(fā)明的一個實施例中,為了開發(fā)閃存芯片的并發(fā)特性,POFS可以將多個I/O請求同時發(fā)送到多個閃存不同bank上進行同時處理。為了最大化地提高閃存并行度,本專利在閃存設(shè)備層提出了一種新的地址編碼方法,具體為:一個閃存的物理地址通常由三部分組成(A,B, C),表示閃存并行單元地址(即bank地址)為A,閃存塊地址為B,閃存頁地址為C。根據(jù)I/O訪問的連續(xù)性,應(yīng)盡可能讓地址連續(xù)的閃存頁面分布于不同的bank上,以提高閃存并行度。因此,在本發(fā)明的分布式系統(tǒng)中,每個POFS上的高速閃存設(shè)備將閃存頁的物理地址進行了一層映射,提供一個連續(xù)的線性地址給系統(tǒng)。由POFTL發(fā)送給閃存設(shè)備的物理地址將不再按上述通常方法解析地址,而是將物理地址映射為(B,A1, C,A2),其中A1和A2分別代表bank地址的高位地址和低位地址。例如,設(shè)置并行度為4,將4個bank組合在一起,A2為bank地址A的低兩位,A1為bank地址的高位,這樣連續(xù)的四個bank中塊地址相同的塊組合成一個大的虛擬塊,虛擬塊的大小也將變?yōu)樵瓉淼?倍。例如:
[0139]O號地址映射為(O, O, O, O),位于O號bank, O號block, O號page上;
[0140]I號地址映射為(O, O, O, I),位于I號bank,O號block,O號page上;
[0141]2號地址映射為(O, O, O, 2),位于2號bank, O號block, O號page上;
[0142]3號地址映射為(O, O, O, 3),位于3號bank, O號block, O號page上;
[0143]4號地址映射為(O, O, I, O),位于O號bank, O號block, I號page上;
[0144]......[0145]如此,連續(xù)的0,I, 2,3號地址分別被映射到了不同的bank上,當(dāng)應(yīng)用程序連續(xù)訪問這四個地址時,系統(tǒng)可以將這四個請求同時發(fā)到閃存不同bank進行并行處理,提高了閃存的訪問效率。
[0146]根據(jù)本發(fā)明實施例的系統(tǒng),能夠充分發(fā)揮閃存存儲設(shè)備的存儲和處理性能,提升整個系統(tǒng)的性能。
[0147]盡管上面已經(jīng)示出和描述了本發(fā)明的實施例,可以理解的是,上述實施例是示例性的,不能理解為對本發(fā)明的限制,本領(lǐng)域的普通技術(shù)人員在不脫離本發(fā)明的原理和宗旨的情況下在本發(fā)明的范圍內(nèi)可以對上述實施例進行變化、修改、替換和變型。
【權(quán)利要求】
1.一種分布式閃存存儲系統(tǒng),其特征在于,包括: 分布式文件系統(tǒng)層,用于提供對文件數(shù)據(jù)的分布式管理,并使所述文件元數(shù)據(jù)操作具有事務(wù)性特征; 分布式閃存轉(zhuǎn)換層,用于對閃存存儲設(shè)備進行空間分配以及對多個閃存存儲設(shè)備之間進行負(fù)載均衡;以及 高速存儲設(shè)備層,用于為所述分布式閃存存儲系統(tǒng)提供并發(fā)的存儲單元和數(shù)據(jù)存儲空間,以對所述文件數(shù)據(jù)進行存儲。
2.如權(quán)利要求1所述的分布式閃存存儲系統(tǒng),其特征在于,所述分布式文件系統(tǒng)層具體包括: 基于SSD的RAID再同步一致性協(xié)議模塊,用于更新所述文件的條帶,并在所述閃存存儲設(shè)備發(fā)生故障失效時,通過RAID再同步一致性協(xié)議恢復(fù)所述閃存存儲設(shè)備中的失效數(shù)據(jù); 元數(shù)據(jù)操作一致性協(xié)議模塊,用于對分布式文件系統(tǒng)中元數(shù)據(jù)的內(nèi)容進行更新,并在所述閃存存儲設(shè)備發(fā)生故障失效時,對所述元數(shù)據(jù)進行恢復(fù);以及 對象分布模塊,用于通過分組方式為所述分布式閃存存儲系統(tǒng)中的每個對象分配一個特定的設(shè)備來存儲對象 數(shù)據(jù)。
3.如權(quán)利要求1所述的分布式閃存存儲系統(tǒng),其特征在于,所述分布式閃存轉(zhuǎn)換層具體包括: 對象空間管理模塊,用于合并文件系統(tǒng)中空間管理的映射表和FTL中邏輯地址映射到物理地址的映射表,以建立對象邏輯偏移地址與對應(yīng)的物理地址之間的映射關(guān)系; 冷熱數(shù)據(jù)分組模塊,用于通過所述閃存設(shè)備中閃存數(shù)據(jù)頁面之間的相關(guān)性分離冷熱數(shù)據(jù);以及 負(fù)載均衡模塊,用于通過監(jiān)控多個閃存存儲設(shè)備之間的擦除頻率,將部分?jǐn)?shù)據(jù)從擦除頻率高的閃存存儲設(shè)備移動至擦除頻率低的設(shè)備,以均衡所述多個閃存存儲設(shè)備之間的負(fù)載。
4.如權(quán)利要求1所述的分布式閃存存儲系統(tǒng),其特征在于,所述高速存儲設(shè)備層具體包括: 并發(fā)存儲模塊,用于把所述閃存存儲設(shè)備的多個并行單元中相同地址的閃存塊映射成一個虛擬的閃存塊,以使所述分布式文件系統(tǒng)層的一段連續(xù)閃存頁位于閃存存儲設(shè)備的不同并行單元上。
5.如權(quán)利要求3所述的分布式閃存存儲系統(tǒng),其特征在于,所述對象空間管理模塊還用于將所述閃存存儲設(shè)備分為根區(qū)域、數(shù)據(jù)區(qū)域和更新區(qū)域。
6.如權(quán)利要求5所述的分布式閃存存儲系統(tǒng),其特征在于,所述對象空間管理模塊還用于當(dāng)所述更新區(qū)域的數(shù)據(jù)量大于預(yù)設(shè)值時,將所述更新區(qū)域的部分?jǐn)?shù)據(jù)轉(zhuǎn)換至數(shù)據(jù)區(qū)域。
7.如權(quán)利要求3所述的分布式閃存存儲系統(tǒng),其特征在于,所述負(fù)載均衡模塊進一步包括: 重映射表管理單元,用于管理發(fā)生數(shù)據(jù)遷移對象的最新位置信息; 垃圾回收頻率監(jiān)控單元,用于監(jiān)控所述閃存存儲設(shè)備的垃圾回收頻率;訪問跟蹤單元,用于維護所述對象的訪問冷熱度;以及 數(shù)據(jù)遷移單元,用于對所述閃存存儲設(shè)備之間進行數(shù)據(jù)遷移。
8.如權(quán)利要求4所述的分布式閃存存儲系統(tǒng),其特征在于,所述并發(fā)存儲模塊還用于根據(jù)閃存并行單元地址、閃存塊地址和閃存頁地址對物理地址進行映射,其中,對所述物理地址的映射通過如下公式表示,所述公式為, 原地址(A,B,C)映射為(B,A1, C,A2), 其中,A1和A2分別表示閃存并行單元地址A的高位地址和低位地址,B表示閃存塊地址,C表示閃存頁 地址。
【文檔編號】H04L29/08GK103458023SQ201310388418
【公開日】2013年12月18日 申請日期:2013年8月30日 優(yōu)先權(quán)日:2013年8月30日
【發(fā)明者】舒繼武, 歐佳欣, 陸游游, 王維 申請人:清華大學(xué)