欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

分布式閃存存儲(chǔ)系統(tǒng)的制作方法

文檔序號(hào):8006015閱讀:310來(lái)源:國(guó)知局
分布式閃存存儲(chǔ)系統(tǒng)的制作方法
【專利摘要】本發(fā)明提出一種分布式閃存存儲(chǔ)系統(tǒng),包括:分布式文件系統(tǒng)層,用于提供對(duì)文件數(shù)據(jù)的分布管理,并使文件元數(shù)據(jù)操作具有事務(wù)性特征;分布式閃存轉(zhuǎn)換層,用于對(duì)閃存存儲(chǔ)設(shè)備進(jìn)行空間分配以及對(duì)多個(gè)閃存存儲(chǔ)設(shè)備之間進(jìn)行負(fù)載均衡;以及高速存儲(chǔ)設(shè)備層,用于對(duì)分布式存儲(chǔ)系統(tǒng)提供并發(fā)的存儲(chǔ)單元和數(shù)據(jù)存儲(chǔ)空間,以對(duì)文件數(shù)據(jù)進(jìn)行存儲(chǔ)。根據(jù)本發(fā)明實(shí)施例的系統(tǒng),能夠充分發(fā)揮閃存存儲(chǔ)設(shè)備的存儲(chǔ)和處理性能,提升整個(gè)系統(tǒng)的性能。
【專利說明】分布式閃存存儲(chǔ)系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及網(wǎng)絡(luò)【技術(shù)領(lǐng)域】,特別涉及一種分布式閃存存儲(chǔ)系統(tǒng)。
【背景技術(shù)】
[0002]隨著數(shù)據(jù)的爆炸性增長(zhǎng)以及高速處理需求,應(yīng)用程序?qū)τ跀?shù)據(jù)的存儲(chǔ)管理以及訪問性能要求也越來(lái)越高。單個(gè)存儲(chǔ)節(jié)點(diǎn)或者存儲(chǔ)陣列難以提供PB級(jí)或者更大的存儲(chǔ)容量。單節(jié)點(diǎn)的處理性能和訪問帶寬遠(yuǎn)不能滿足現(xiàn)實(shí)應(yīng)用。分布式存儲(chǔ)系統(tǒng)提供了管理分布式的存儲(chǔ)資源,提供了單一的命名空間,方便了數(shù)據(jù)共享,提供更高的聚集數(shù)據(jù)訪問帶寬。
[0003]分布式存儲(chǔ)系統(tǒng)主要針對(duì)大規(guī)模數(shù)據(jù)密集型應(yīng)用提供高的訪問性能和擴(kuò)展性。這些大規(guī)模數(shù)據(jù)密集型應(yīng)用主要有以下共同點(diǎn):(I)屬于數(shù)據(jù)IO密集型,或者是元數(shù)據(jù)IO密集型;(2)均需要順序或者隨機(jī)訪問大型數(shù)據(jù)集;(3)都需要大規(guī)模并行化,可能同時(shí)具有成千上萬(wàn)個(gè)并發(fā)操作?,F(xiàn)有的基于磁盤的分布式存儲(chǔ)系統(tǒng)雖然能提供很好的順序訪問性能,但是由于磁盤固有的機(jī)械特性,很難對(duì)多個(gè)小的隨機(jī)訪問提供足夠的性能需求。
[0004]近年來(lái),閃存存儲(chǔ)的制造工藝日趨成熟,容量增加,成本降低。相比傳統(tǒng)硬盤,無(wú)機(jī)械部件的閃存存儲(chǔ)設(shè)備能耗低,抗震性能強(qiáng),體積小,隨機(jī)讀寫性能更好。然而,傳統(tǒng)分布式存儲(chǔ)系統(tǒng)復(fù)雜繁冗,而且主要針對(duì)磁盤優(yōu)化。除此之外,上層文件系統(tǒng)與下層存儲(chǔ)設(shè)備之間不能有效地交換語(yǔ)義信息,進(jìn)而導(dǎo)致將其應(yīng)用到閃存設(shè)備上時(shí),出現(xiàn)功能重復(fù)實(shí)現(xiàn)、優(yōu)化相互沖突等多種問題。

【發(fā)明內(nèi)容】

[0005]本發(fā)明的目的旨在至少解決上述的技術(shù)缺陷之一。
[0006]為此,本發(fā)明的目的在于提出一種分布式閃存存儲(chǔ)系統(tǒng)。
[0007]為達(dá)到上述目的,本發(fā)明的實(shí)施例提出一種分布式閃存存儲(chǔ)系統(tǒng),包括:
[0008]分布式文件系統(tǒng)層,用于提供對(duì)文件數(shù)據(jù)的分布式管理,并使所述文件元數(shù)據(jù)操作具有事務(wù)性特征;
[0009]分布式閃存轉(zhuǎn)換層,用于對(duì)閃存存儲(chǔ)設(shè)備進(jìn)行空間分配以及對(duì)多個(gè)閃存存儲(chǔ)設(shè)備之間進(jìn)行負(fù)載均衡;以及
[0010]高速存儲(chǔ)設(shè)備層,用于為所述分布式閃存存儲(chǔ)系統(tǒng)提供并發(fā)的存儲(chǔ)單元和數(shù)據(jù)存儲(chǔ)空間,以對(duì)所述文件數(shù)據(jù)進(jìn)行存儲(chǔ)。
[0011]根據(jù)本發(fā)明實(shí)施例的系統(tǒng),能夠充分發(fā)揮閃存存儲(chǔ)設(shè)備的存儲(chǔ)和處理性能,提升整個(gè)系統(tǒng)的性能。
[0012]在本發(fā)明的一個(gè)實(shí)施例中,所述分布式文件系統(tǒng)層具體包括:基于SSD的RAID再同步一致性協(xié)議模塊,用于更新所述文件的條帶,并在所述閃存存儲(chǔ)設(shè)備發(fā)生故障失效時(shí),通過RAID再同步一致性協(xié)議恢復(fù)所述閃存存儲(chǔ)設(shè)備中的失效數(shù)據(jù);元數(shù)據(jù)操作一致性協(xié)議模塊,用于對(duì)分布式文件系統(tǒng)中元數(shù)據(jù)的內(nèi)容進(jìn)行更新,并在所述閃存存儲(chǔ)設(shè)備發(fā)生故障失效時(shí),對(duì)所述元數(shù)據(jù)進(jìn)行恢復(fù);以及對(duì)象分布模塊,用于通過分組方式為所述分布式閃存存儲(chǔ)系統(tǒng)中的每個(gè)對(duì)象分配一個(gè)特定的設(shè)備來(lái)存儲(chǔ)對(duì)象數(shù)據(jù)。
[0013]在本發(fā)明的一個(gè)實(shí)施例中,所述分布式閃存轉(zhuǎn)換層具體包括:對(duì)象空間管理模塊,用于合并文件系統(tǒng)中空間管理的映射表和FTL中邏輯地址映射到物理地址的映射表,以建立對(duì)象邏輯偏移地址與對(duì)應(yīng)的物理地址之間的映射關(guān)系;冷熱數(shù)據(jù)分組模塊,用于通過所述閃存設(shè)備中閃存數(shù)據(jù)頁(yè)面之間的相關(guān)性分離冷熱數(shù)據(jù);以及負(fù)載均衡模塊,用于通過監(jiān)控多個(gè)閃存存儲(chǔ)設(shè)備之間的擦除頻率,將部分?jǐn)?shù)據(jù)從擦除頻率高的閃存存儲(chǔ)設(shè)備移動(dòng)至擦除頻率低的設(shè)備,以均衡所述多個(gè)閃存存儲(chǔ)設(shè)備之間的負(fù)載。
[0014]在本發(fā)明的一個(gè)實(shí)施例中,所述高速存儲(chǔ)設(shè)備層具體包括:并發(fā)存儲(chǔ)模塊,用于把所述閃存存儲(chǔ)設(shè)備的多個(gè)并行單元中相同地址的閃存塊映射成一個(gè)虛擬的閃存塊,以使所述分布式文件系統(tǒng)層的一段連續(xù)閃存頁(yè)位于閃存存儲(chǔ)設(shè)備的不同并行單元上。
[0015]在本發(fā)明的一個(gè)實(shí)施例中,所述對(duì)象空間管理模塊還用于將所述閃存存儲(chǔ)設(shè)備分為根區(qū)域、數(shù)據(jù)區(qū)域和更新區(qū)域。
[0016]在本發(fā)明的一個(gè)實(shí)施例中,所述對(duì)象空間管理模塊還用于當(dāng)所述更新區(qū)域的數(shù)據(jù)量大于預(yù)設(shè)值時(shí),將所述更新區(qū)域的部分?jǐn)?shù)據(jù)轉(zhuǎn)換至數(shù)據(jù)區(qū)域。
[0017]在本發(fā)明的一個(gè)實(shí)施例中,所述負(fù)載均衡模塊進(jìn)一步包括:重映射表管理單元,用于管理發(fā)生數(shù)據(jù)遷移對(duì)象的最新位置信息;垃圾回收頻率監(jiān)控單元,用于監(jiān)控所述閃存存儲(chǔ)設(shè)備的垃圾回收頻率;訪問跟蹤單元,用于維護(hù)所述對(duì)象的訪問冷熱度;以及數(shù)據(jù)遷移單元,用于對(duì)所述閃存存儲(chǔ)設(shè)備之間進(jìn)行數(shù)據(jù)遷移。
[0018]在本發(fā)明的一個(gè)實(shí)施例中,
[0019]所述并發(fā)存儲(chǔ)模塊還用于根據(jù)閃存并行單元地址、閃存塊地址和閃存頁(yè)地址對(duì)物理地址進(jìn)行映射,其中,對(duì)所述物理地址的映射通過如下公式表示,所述公式為,原地址(A,B,C)映射為(B,A1, C,A2),其中,A1和A2分別表示閃存并行單元地址A的高位地址和低位地址,B表示閃存塊地址,C表示閃存頁(yè)地址。
[0020]本發(fā)明附加的方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本發(fā)明的實(shí)踐了解到。
【專利附圖】

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