基于ssd的raid系統(tǒng)中的校驗數(shù)據(jù)的去重的制作方法
【專利說明】基于SSD的RAID系統(tǒng)中的校驗數(shù)據(jù)的去重
【背景技術(shù)】
[0001 ]在一些計算應(yīng)用中,多個存儲設(shè)備(例如,機(jī)械存儲設(shè)備,固態(tài)驅(qū)動(SSD)設(shè)備等) 可以被配置為充當(dāng)單個邏輯存儲設(shè)備。這種配置可稱為獨(dú)立磁盤冗余陣列(RAID)。各種 RAID配置可以利用稱為"校驗"的錯誤保護(hù)方案來提供一定的容錯水平。一般地,使用校驗 的RAID配置可以生成對應(yīng)于存儲在RAID中的數(shù)據(jù)的校驗數(shù)據(jù)并且將校驗數(shù)據(jù)存儲在RAID 的校驗部分中。校驗數(shù)據(jù)可隨后用于從影響RAID中存儲的數(shù)據(jù)的錯誤(例如,數(shù)據(jù)損壞,驅(qū) 動故障等)中恢復(fù)。然而,為了保持容錯性,每當(dāng)新數(shù)據(jù)寫入RAID時,校驗數(shù)據(jù)需要重新生成 且重新寫入RAID的校驗部分中。在將校驗數(shù)據(jù)存儲在SSD設(shè)備上的RAID配置的情況下,將校 驗數(shù)據(jù)連續(xù)地重新寫入RAID中會導(dǎo)致SSD的耗損增加和/或RAID的功耗增加。
[0002] 發(fā)明概述
[0003] 本文詳述的是將校驗數(shù)據(jù)保持在RAID中的各種示例性的方法,其可具體實施為任 意多樣的方法、裝置、系統(tǒng)和/或計算機(jī)程序產(chǎn)品。
[0004] -些示例的方法可以包括:在RAID控制模塊處,接收將數(shù)據(jù)單元寫入所述RAID的 數(shù)據(jù)存儲部的請求,其中所述RAID具有存儲在數(shù)據(jù)存儲部中的當(dāng)前數(shù)據(jù)單元并且具有存儲 在所述RAID的校驗數(shù)據(jù)存儲部中的當(dāng)前校驗數(shù)據(jù);響應(yīng)于寫入所述數(shù)據(jù)單元的請求,至少 部分地基于所述數(shù)據(jù)單元與當(dāng)前數(shù)據(jù)單元之間的異或(X0R)來確定臨時數(shù)據(jù);至少部分地 基于臨時數(shù)據(jù)與當(dāng)前校驗數(shù)據(jù)之間的X0R運(yùn)算來確定新校驗數(shù)據(jù);將所述新校驗數(shù)據(jù)去重 以判定新校驗數(shù)據(jù)的任意部分是否是當(dāng)前校驗數(shù)據(jù)的部分的重復(fù);以及將所述新校驗數(shù)據(jù) 的被判定為不是所述當(dāng)前校驗數(shù)據(jù)的部分的重復(fù)的部分寫入所述RAID的校驗數(shù)據(jù)存儲部。
[0005] 本公開還描述了其中存儲有指令的各種示例的機(jī)器可讀非暫態(tài)存儲介質(zhì),響應(yīng)于 由一個或多個處理器執(zhí)行,所述指令可操作地使RAID的獨(dú)立磁盤冗余陣列(RAID)控制模塊 能夠響應(yīng)于將特定數(shù)據(jù)單元寫入RAID的請求而至少部分地基于特定數(shù)據(jù)單元與第一數(shù)據(jù) 單元之間的異或(X0R)運(yùn)算來判定臨時數(shù)據(jù),所述RAID可以具有與第一數(shù)據(jù)單元相關(guān)聯(lián)的 數(shù)據(jù)存儲部,并且RAID具有與第一校驗數(shù)據(jù)相關(guān)聯(lián)的校驗數(shù)據(jù)存儲部;至少部分地基于臨 時數(shù)據(jù)與第一校驗數(shù)據(jù)之間的X0R運(yùn)算來確定第二校驗數(shù)據(jù);對所述第二校驗數(shù)據(jù)去重以 判定第二校驗數(shù)據(jù)的任意部分是否是第一校驗數(shù)據(jù)的部分的重復(fù);以及將第二校驗數(shù)據(jù)的 被判定為不是第一校驗數(shù)據(jù)的部分的重復(fù)的部分寫入RAID的校驗數(shù)據(jù)存儲部。
[0006] 本公開另外描述了示例的系統(tǒng),其可以包括:獨(dú)立磁盤冗余陣列(RAID),其具有存 儲在數(shù)據(jù)存儲部中的當(dāng)前數(shù)據(jù)單元并且具有存儲在RAID的校驗數(shù)據(jù)存儲部中的當(dāng)前校驗 數(shù)據(jù);以及RAID控制模塊,其與RAID通信耦合。在示例中,RAID控制模塊包括數(shù)據(jù)輸入/輸出 模塊,其能夠可操作地實現(xiàn)接收將數(shù)據(jù)單元寫入RAID的數(shù)據(jù)存儲部的請求,所述RAID模塊 還可以包括校驗保持模塊,校驗保持模塊配置為:響應(yīng)于寫入數(shù)據(jù)單元的請求而將數(shù)據(jù)單 元與當(dāng)前校驗數(shù)據(jù)進(jìn)行比較來確定臨時校驗數(shù)據(jù);將臨時校驗數(shù)據(jù)與當(dāng)前校驗數(shù)據(jù)進(jìn)行比 較來確定新校驗數(shù)據(jù);將新校驗數(shù)據(jù)拆分成多個新的校驗數(shù)據(jù)塊;構(gòu)建散列表,該散列表將 多個第一散列值中的每一個與新的校驗數(shù)據(jù)塊中的不同的塊相關(guān)聯(lián),以及將多個第二散列 值中的每一個與當(dāng)前校驗數(shù)據(jù)的不同的塊相關(guān)聯(lián);以及基于多個第一散列值與多個第二散 列值的比較來確定新校驗數(shù)據(jù)的包括數(shù)據(jù)單元的至少一部分的非重復(fù)塊。
【附圖說明】
[0007] 在說明書的權(quán)利要求中特別指出并清楚的要求保護(hù)主題。根據(jù)下面結(jié)合附圖給出 的以下說明和隨附權(quán)利要求書,本公開的前面的特征和其它特征將變得更加充分顯而易 見。應(yīng)當(dāng)理解,這些附圖僅描繪了根據(jù)本公開的多個實施例,并且因此不視為限制其范圍。 通過利用附圖,將通過額外的具體性和細(xì)節(jié)來描述本公開。
[0008] 在附圖中:
[0009] 圖la示出了包括RAID的示例的系統(tǒng)的框圖;
[0010] 圖lb示出了示例的當(dāng)前校驗數(shù)據(jù)和當(dāng)前校驗數(shù)據(jù)的塊的框圖;
[0011]圖lc不出了不例的散列表的框圖;
[0012]圖2a示出了包括RAID的示例系統(tǒng)的框圖;
[0013]圖2b示出了示例的新校驗數(shù)據(jù)和新校驗數(shù)據(jù)的塊的框圖;
[0014]圖2c示出了對應(yīng)于新校驗數(shù)據(jù)的塊的示例的散列值的框圖;
[0015]圖2d示出了示例的校驗數(shù)據(jù)去重的框圖;
[0016]圖2e示出了基于去重校驗數(shù)據(jù)而更新的散列表的示例的框圖;
[0017]圖3示出了為RAID保持校驗數(shù)據(jù)的示例方法的流程圖;
[0018] 圖4示出了示例的計算機(jī)程序產(chǎn)品;
[0019] 圖5示出了全部依照本公開的至少一些實施例布置的示例的計算設(shè)備的框圖。
[0020] 發(fā)明詳述
[0021] 下面的說明書闡述了各個示例以及具體細(xì)節(jié)以提供對權(quán)利要求主題的全面理解。 權(quán)利要求主題可以在沒有本文公開的一些或更多具體細(xì)節(jié)的情況下來實施。此外,在一些 情形下,為避免不必要地混淆權(quán)利要求,未對公知的方法、程序、系統(tǒng)、組件和/或電路進(jìn)行 詳細(xì)描述。在下面的詳細(xì)說明中,將參考附圖,附圖構(gòu)成了詳細(xì)說明的一部分。在附圖中,除 非上下文指出,否則相似的符號通常表示相似的組件。在詳細(xì)說明、附圖和權(quán)利要求中所描 述的示例性實施例不意在限制??梢允褂闷渌鼘嵤├⑶铱梢宰龀銎渌淖?,而不偏離本 文呈現(xiàn)的主題的精神或范圍。如本文大致描述且如圖中所圖示的,本公開的方案能夠以各 種不同配置來布置、替代、組合和設(shè)計,所有這些都在本文中明確地構(gòu)思出且構(gòu)成本公開的 部分。
[0022] 本公開尤其涉及與保持用于RAID的校驗數(shù)據(jù)有關(guān)的方法、裝置、系統(tǒng)和/或計算機(jī) 程序產(chǎn)品。
[0023] 一般地,RAID設(shè)備可包括構(gòu)造為充當(dāng)單一邏輯存儲單元的多個存儲設(shè)備。一般地, RAID設(shè)備可由兩個以上單個存儲設(shè)備構(gòu)成且以各種配置來組織(例如,RAID 1,RAID 2, RAID 3,RAID 4,RAID 5,RAID 6,RAID 10,等等)。各種RAID配置可以提供一定的容錯水平。 例如,上述的校驗錯誤保護(hù)方案可以實現(xiàn)于一些RAID配置(例如,RAID 2,RAID 3,RAID 4, RAID 5,RAID 6,RAID 10,等等)中。
[0024] 一般地,校驗錯誤保護(hù)方案可以通過根據(jù)存儲在RAID中的數(shù)據(jù)確定校驗數(shù)據(jù)來提 供容錯性。校驗數(shù)據(jù)可隨后用于從影響存儲在RAID中的數(shù)據(jù)的錯誤(例如,數(shù)據(jù)損壞、驅(qū)動 故障等)中恢復(fù)。作為示例,RAID設(shè)備可以包括第一、第二和第三單個的存儲設(shè)備。RAID設(shè)備 可配置為將數(shù)據(jù)存儲在第一和第二單個的存儲設(shè)備上,并且將校驗數(shù)據(jù)存儲在第三單個存 儲設(shè)備上。RAID設(shè)備可以基于存儲在第一單個存儲設(shè)備上的數(shù)據(jù)與存儲在第二單個存儲設(shè) 備上的數(shù)據(jù)之間的異或(XOR)運(yùn)算來生成校驗數(shù)據(jù)。RAID設(shè)備可以將該確定的校驗數(shù)據(jù)存 儲到第三單個存儲設(shè)備中。RAID設(shè)備則可以利用存儲在第三單個存儲設(shè)備上的校驗數(shù)據(jù)來 "恢復(fù)"存儲在第一單個存儲設(shè)備或第二單個存儲設(shè)備上的數(shù)據(jù)。例如,假設(shè)第一單個存儲 設(shè)備故障。可以基于存儲在第二單個存儲設(shè)備上的數(shù)據(jù)與存儲在第三單個存儲設(shè)備上的校 驗數(shù)據(jù)之間的XOR運(yùn)算來恢復(fù)存儲在第一單個存儲設(shè)備上的數(shù)據(jù)。
[0025]為了保持容錯性,校驗數(shù)據(jù)需要持續(xù)地再生成且存儲在RAID設(shè)備中。更特別地,當(dāng) 新數(shù)據(jù)寫入(或者對現(xiàn)有數(shù)據(jù)做出改變)RAID設(shè)備時,可能需要重新生成校驗數(shù)據(jù)。例如,使 用上述的RAID配置,如果存儲在第一單個存儲設(shè)備上的數(shù)據(jù)改變,則存儲在第三單個存儲 設(shè)備上的校驗數(shù)據(jù)可能不再能用于恢復(fù)存儲在第一單個存儲設(shè)備或第二單個存儲設(shè)備上 的數(shù)據(jù)。因此,需要確定新的校驗數(shù)據(jù)(例如,基于存儲在第一單個存儲設(shè)備上的改變后的 數(shù)據(jù)與存儲在第二單個存儲設(shè)備上的數(shù)據(jù)之間的X0R運(yùn)算)。該新的校驗數(shù)據(jù)可以寫入第三 單個存儲設(shè)備,如上所述。
[0026]對于使用固態(tài)存儲設(shè)備(SSD)來存儲其校驗數(shù)據(jù)的RAID設(shè)備,持續(xù)地或者以其它 方式將新校驗數(shù)據(jù)多次寫入RAID設(shè)備會導(dǎo)致用于存儲校驗數(shù)據(jù)的SSD中耗損增加。另外,用 于操作RAID設(shè)備的功率量會由于需要在寫入新數(shù)據(jù)(或者現(xiàn)有數(shù)據(jù)改變)之前需要擦除SSD 上的數(shù)據(jù)以及由于大量校驗數(shù)據(jù)寫入SSD的頻繁方式而增加。
[0027] 本公開的各個實施例可以提供將校驗數(shù)據(jù)保持在RAID設(shè)備中。特別地,本公開的 一些實施例可利于保持校驗數(shù)據(jù),在校驗數(shù)據(jù)中至少一些數(shù)據(jù)集無需每當(dāng)存儲在RAID設(shè)備 中的數(shù)據(jù)的變化發(fā)生時重新寫入RAID設(shè)備。
[0028] 使用上述配置,提供下面的非限制示例以便進(jìn)一步圖示說明本公開的一些實施 例。如上所述,第一和第二單個存儲設(shè)備可用于存儲數(shù)據(jù),而第三單個存儲設(shè)備可用于存儲 校驗數(shù)據(jù)。作為將校驗數(shù)據(jù)存儲在RAID設(shè)備中的部分,校驗數(shù)據(jù)可拆分成更小的片(塊),并 且可以生成每個塊的散列。
[0029] 在示例中,第一和第二單個存儲設(shè)備中的數(shù)據(jù)可以組織成頁。頁可以具有特定尺 寸。校驗數(shù)據(jù)的塊可拆分成各種尺寸,例如一個或多個塊可以是第一尺寸,該第一尺寸可以 基本上類似于第一和第二單個存儲設(shè)備中的數(shù)據(jù)頁。在示例中,一個或多個塊可以具有小 于或等于第一尺寸的第二尺寸,諸如例如4千字節(jié)。散列表可用于存儲散列且記錄對應(yīng)于每 個塊的數(shù)據(jù)存儲在第三單個存儲設(shè)備上的位置(例如,存儲器位置,等等)。
[0030] 當(dāng)新數(shù)據(jù)寫入RAID設(shè)備時,新的校驗數(shù)據(jù)可通過如下方式確定:基于新數(shù)據(jù)與當(dāng) 前數(shù)據(jù)之間的X0R運(yùn)算來確定臨時數(shù)據(jù);以及基于臨時數(shù)據(jù)與當(dāng)前校驗數(shù)據(jù)之間的X0R運(yùn)算 來確定新的校驗數(shù)據(jù)。例如,假設(shè)新數(shù)據(jù)寫入第一單個存儲設(shè)備??梢曰谛聰?shù)據(jù)(例如,現(xiàn) 在存儲于第一單個存儲設(shè)備上的數(shù)據(jù))與當(dāng)前數(shù)據(jù)(例如,存儲在第二單個存儲設(shè)備上的數(shù) 據(jù))之間的X0R運(yùn)算來確定臨時數(shù)據(jù)。然后,可以基于臨時數(shù)據(jù)與當(dāng)前校驗數(shù)據(jù)(例如,存儲 在第三單個存儲設(shè)備上的校驗數(shù)據(jù))之間的X0R運(yùn)算來確定新校驗數(shù)據(jù)。
[0031] 可以對新校驗數(shù)據(jù)進(jìn)行部分"去重",以確定不同于當(dāng)前校驗數(shù)據(jù)的部分的新校驗 數(shù)據(jù)的部分。新校驗數(shù)據(jù)的被確定為不同于當(dāng)前校驗數(shù)據(jù)的部分可以寫入第三單個存儲設(shè) 備。然而,新校驗數(shù)據(jù)的與當(dāng)前校驗數(shù)據(jù)的部分相同的部分無需重新寫入第三單個存儲設(shè) 備。示例的去重過程可以包括將新校驗數(shù)據(jù)拆分成塊(例如,如上文結(jié)合當(dāng)前校驗數(shù)據(jù)所描 述的)??梢詫τ谛滦r灁?shù)據(jù)的每個塊生成散列并且將散列與存儲在散列表中的當(dāng)前校驗 數(shù)據(jù)的散列進(jìn)行比較?;谠摫容^,被發(fā)現(xiàn)對應(yīng)于當(dāng)前校驗數(shù)據(jù)的塊的新校驗數(shù)據(jù)的任意 塊無需寫入第三單個存儲設(shè)備?;谠摫容^,被發(fā)現(xiàn)不對應(yīng)于當(dāng)前校驗數(shù)據(jù)的任意塊的新 校驗數(shù)據(jù)的塊可以寫入第三單個存儲設(shè)備。也可以相應(yīng)地更新散列表(例如,更新散列、更 新位置,等等)。
[0032] 因此,RAID設(shè)備中的校驗數(shù)據(jù)可得以保持(例如,基于RAID設(shè)備中最新存儲的數(shù)據(jù) 而保持最新),其中新校驗數(shù)據(jù)的部分(例如,塊)