專利名稱:在固態(tài)存儲器中實現(xiàn)raid的制作方法
在固態(tài)存儲器中實現(xiàn)RAID
相關(guān)申請的交叉引用
本申請要求2009年9月15日提交的且標(biāo)題為“IMPLEMENTING RAIDINSIDESSD"的美國臨時申請序列號61/242,662的利益,并要求2009年10月23日提交的且 標(biāo)題為“IMPLEMENTING RAID INSIDE SSD”的美國臨時申請序列號61/2 ,577的利 益;這兩個優(yōu)先權(quán)申請的全部內(nèi)容由此通過引用被并入。
背景技術(shù):
計算機(jī)系統(tǒng)常常產(chǎn)生需要被持久地存儲的數(shù)據(jù)。系統(tǒng)設(shè)置、數(shù)字照片、電子文 檔和數(shù)字視頻都是計算機(jī)系統(tǒng)的大部分用戶希望持久地存儲的電子文件。在一般個人計 算機(jī)中,這些和其它類型的電子文件存儲在硬盤驅(qū)動器上,或日益增加地存儲在固態(tài)存 儲器設(shè)備(例如,閃存驅(qū)動器)上。
對計算機(jī)用戶的一個問題是電子文件和數(shù)據(jù)的損失。硬盤驅(qū)動器是機(jī)械設(shè)備, 與任何其它機(jī)器一樣,受到可導(dǎo)致故障的損耗或損壞,其中它們包含的信息可能變得部 分地或完全不可得到。數(shù)據(jù)損失的可能性有時通過使用獨立驅(qū)動器的冗余陣列(RAID) 來減小。RAID是多個硬盤驅(qū)動器合并成一個較大的邏輯單元的技術(shù),并通過冗余提供增 加的可靠性。被儲存到邏輯單元的數(shù)據(jù)連同錯誤恢復(fù)數(shù)據(jù)一起分布在多個驅(qū)動器中。如 果一個物理硬盤驅(qū)動器出故障,則只有存儲到該驅(qū)動器的數(shù)據(jù)的部分變得不可得到。不 可得到的數(shù)據(jù)能夠根據(jù)存儲在其余驅(qū)動器上的錯誤恢復(fù)數(shù)據(jù)來恢復(fù)或重建。發(fā)明內(nèi)容
本公開包括涉及容錯系統(tǒng)的系統(tǒng)和技術(shù)以及用于將數(shù)據(jù)存儲在固態(tài)存儲器例如 閃存中的方法。根據(jù)所述系統(tǒng)和技術(shù)的方面,用于存儲數(shù)據(jù)的電子設(shè)備包括配置成接 收數(shù)據(jù)的輸入端口;保存比較值的比較緩沖存儲器;比較數(shù)據(jù)被劃分到的多個邏輯塊中 的每個與比較值來確定新的比較值以保存在比較緩沖存儲器中的比較電路;以及存儲邏 輯塊和相應(yīng)于比較值的恢復(fù)碼的固態(tài)數(shù)據(jù)儲存存儲器,其中通過合并來自所存儲的邏輯 塊的一個或多個未選擇的邏輯塊的數(shù)據(jù)與恢復(fù)碼,來自所存儲的邏輯塊中的至少一個的 數(shù)據(jù)是可恢復(fù)的。
各種實現(xiàn)可包括下列特征中的一些、全部或一個特征也不包括。固態(tài)數(shù)據(jù)儲存 存儲器可為閃存。比較電路可執(zhí)行邏輯異或操作。緩沖存儲器可包括多個緩沖存儲器, 且緩沖存儲器中的至少一個可包括單端口存儲器。通過確定當(dāng)與比較值比較時導(dǎo)致預(yù)定 值的值可確定恢復(fù)碼。設(shè)備可包括由軟件編程的處理器以實現(xiàn)比較電路,其中該比較電 路可執(zhí)行邏輯異或操作。
固態(tài)數(shù)據(jù)儲存存儲器可包括多個固態(tài)物理存儲器設(shè)備。多個固態(tài)物理存儲器設(shè) 備中的每個可包括包含至少一個物理數(shù)據(jù)存儲塊的單個集成電路芯片,其中物理數(shù)據(jù)存 儲塊可包括在集成電路芯片上形成的固態(tài)存儲器的塊,并連同在同一集成電路芯片上形 成的固態(tài)存儲器的其它塊一起是單獨可尋址的。本設(shè)備可作為單個數(shù)據(jù)存儲設(shè)備與主設(shè)備通過接口連接。
根據(jù)所述系統(tǒng)和技術(shù)的另一方面,一種方法包括在存儲控制器處接收待存儲 在包括多個固態(tài)物理存儲器設(shè)備的固態(tài)存儲器中的數(shù)據(jù);通過存儲控制器將所接收的數(shù) 據(jù)分到相應(yīng)于固態(tài)存儲器的邏輯數(shù)據(jù)塊中;通過存儲控制器將邏輯數(shù)據(jù)塊分配到邏輯塊 分組,所述邏輯塊分組包括來自多個固態(tài)物理存儲器設(shè)備中的兩個或多個的至少一個物 理數(shù)據(jù)存儲塊;將邏輯數(shù)據(jù)塊存儲在邏輯塊分組的被指定用于將持久數(shù)據(jù)存儲在邏輯塊 分組內(nèi)的物理數(shù)據(jù)存儲塊中;通過存儲控制器確定相應(yīng)于存儲在邏輯塊分組中的持久數(shù) 據(jù)的代碼;以及通過存儲控制器將代碼存儲在至少一個物理數(shù)據(jù)存儲塊中,所述至少一 個物理數(shù)據(jù)存儲塊被指定用于存儲相應(yīng)于存儲在邏輯塊分組中的持久數(shù)據(jù)的代碼。各種實現(xiàn)可包括下列特征中的一些、全部或一個特征也不包括。多個固態(tài)物理 存儲器設(shè)備可為閃存設(shè)備。所述確定可為邏輯異或操作。多個固態(tài)物理存儲器設(shè)備和存 儲控制器可為單個存儲器存儲設(shè)備。多個固態(tài)物理存儲器設(shè)備可為包括至少一個物理數(shù) 據(jù)存儲塊的單個集成電路芯片,其中物理數(shù)據(jù)存儲塊可包括在集成電路芯片上形成的固 態(tài)存儲器的塊,并可連同在同一集成電路芯片上形成的固態(tài)存儲器的其它塊一起是單獨 可尋址的。該方法還可包括通過識別相應(yīng)于選定的物理數(shù)據(jù)存儲塊的邏輯數(shù)據(jù)塊被分配 給的邏輯塊分組、讀取存儲在所識別的邏輯塊分組中的持久數(shù)據(jù)和代碼、以及比較代碼 與不同于存儲在選定的物理數(shù)據(jù)存儲塊中的持久數(shù)據(jù)的所讀取的持久數(shù)據(jù),由存儲控制 器恢復(fù)存儲在選定的物理數(shù)據(jù)存儲塊中的持久數(shù)據(jù)。該比較可為邏輯異或操作。確定代 碼可包括在緩沖存儲器中存儲邏輯塊分組的第一個邏輯數(shù)據(jù)塊作為緩存值;對于邏輯 塊分組中的剩余邏輯數(shù)據(jù)塊中的每個,通過存儲控制器比較剩余邏輯數(shù)據(jù)塊與緩存值以 確定比較值并將比較值作為緩存值存儲在緩沖存儲器中;以及通過存儲控制器確定當(dāng)與 緩存值比較時導(dǎo)致預(yù)定值的值。緩沖存儲器可包括多個緩沖存儲器,且緩沖存儲器中的 至少一個可包括單端口存儲器。所述系統(tǒng)和技術(shù)可在電路、計算機(jī)硬件、固件、軟件中或在它們的組合例如在 本說明書中公開的結(jié)構(gòu)裝置及其結(jié)構(gòu)等效形式中實現(xiàn)。這可包括體現(xiàn)可操作來使一個或 多個數(shù)據(jù)處理裝置(例如,包括可編程處理器的信號處理設(shè)備)執(zhí)行所述操作的程序的至 少一個計算機(jī)可讀介質(zhì)。因此,程序?qū)崿F(xiàn)可從所公開的方法、系統(tǒng)或裝置實現(xiàn),且裝置 實現(xiàn)可從所公開的系統(tǒng)、計算機(jī)可讀介質(zhì)或方法實現(xiàn)。類似地,方法實現(xiàn)可從所公開的 系統(tǒng)、計算機(jī)可讀介質(zhì)或裝置實現(xiàn),且系統(tǒng)實現(xiàn)可從所公開的方法、計算機(jī)可讀介質(zhì)或 裝置實現(xiàn)。例如,下面所公開的實施方式可在各種系統(tǒng)和裝置中實現(xiàn),這些系統(tǒng)和裝置包 括但不限于專用數(shù)據(jù)處理裝置(例如,無線接入點、遠(yuǎn)程環(huán)境監(jiān)控器、路由器、交換 機(jī)、計算機(jī)系統(tǒng)部件、介質(zhì)訪問單元)、移動數(shù)據(jù)處理裝置(例如,無線客戶機(jī)、蜂窩電 話、個人數(shù)字助理(PDA)、移動計算機(jī)、數(shù)據(jù)攝像機(jī))、通用數(shù)據(jù)處理裝置(例如,微型 計算機(jī)、服務(wù)器、主計算機(jī)、超級計算機(jī))或這些部件的組合。所述系統(tǒng)和技術(shù)可導(dǎo)致存儲在固態(tài)存儲器設(shè)備中的數(shù)據(jù)的增加的容錯和可恢復(fù) 性(例如,在設(shè)備內(nèi)的部件或存儲器塊的故障的情況下)。固態(tài)存儲器設(shè)備的物理結(jié)構(gòu) 可有利地用于通過內(nèi)在地提供可與RAID設(shè)備和條帶類似地被處理的結(jié)構(gòu)來減小在以前的RAID系統(tǒng)中使用的方法的復(fù)雜性。已經(jīng)在一些固態(tài)存儲器設(shè)備中使用的存儲控制器可適 合于使用現(xiàn)有的數(shù)據(jù)路徑來計算、存儲和使用奇偶值。已經(jīng)用于便于存儲器位置的均勻 損耗的技術(shù)也可被利用以消除對現(xiàn)有RAID系統(tǒng)所需要的遍及硬盤驅(qū)動器的明確的工作負(fù) 荷分布和損耗均衡的需要。此外,因為固態(tài)存儲器設(shè)備不是機(jī)械的、旋轉(zhuǎn)的設(shè)備,不需 要使設(shè)備同步(例如,使軸同步),如在一些基于硬盤的RAID實現(xiàn)中存在的同步。
下面在附圖和描述中闡述一個或多個實現(xiàn)的細(xì)節(jié)。從描述和附圖中以及從權(quán)利 要求中,其它特征、目的和優(yōu)點可能明顯。
圖1是示出容錯固態(tài)存儲器設(shè)備的例子的結(jié)構(gòu)圖。
圖2是示出容錯固態(tài)存儲器設(shè)備的另一例子的結(jié)構(gòu)圖。
圖3是示出包括多個固態(tài)存儲器設(shè)備的容錯固態(tài)存儲器設(shè)備的例子的結(jié)構(gòu)圖。
圖4示出對幾個固態(tài)存儲器設(shè)備的概念邏輯分組。
圖5A和5B是示出奇偶編碼器的例子的結(jié)構(gòu)圖。
圖6是示出配置成將數(shù)據(jù)寫到物理存儲器的存儲控制器的例子的示意圖。
圖7是奇偶數(shù)據(jù)測試器的例子的結(jié)構(gòu)圖。
圖8是示出配置成從物理存儲器讀取數(shù)據(jù)的存儲控制器的例子的示意圖。
圖9是示出多個奇偶數(shù)據(jù)緩沖器的例子的結(jié)構(gòu)圖。
圖IOA和IOB示出用于將邏輯索引映射到物理索引的查找表的例子。
圖11是示出用于存儲數(shù)據(jù)和錯誤恢復(fù)碼的過程的例子的流程圖。
圖12是示出用于檢測所存儲的數(shù)據(jù)中的錯誤的過程的例子的流程圖。
圖13是示出用于恢復(fù)數(shù)據(jù)的過程的例子的流程圖。
不同附圖中的相似的符號表示相似的元件。
具體實施方式
這里所述的系統(tǒng)和技術(shù)可被實現(xiàn)為一個或多個設(shè)備,例如在固態(tài)存儲器設(shè)備 (例如,閃存設(shè)備、USB存儲設(shè)備、固態(tài)驅(qū)動器)中的一個或多個集成電路(IC)設(shè)備。
圖1是示出容錯固態(tài)存儲器設(shè)備100的例子的結(jié)構(gòu)圖。通常,設(shè)備100是使用固 態(tài)存儲器部件和相關(guān)電路來提供用戶數(shù)據(jù)和其它數(shù)據(jù)的非易失性存儲的數(shù)據(jù)存儲設(shè)備。 可由設(shè)備100體現(xiàn)的固態(tài)存儲器設(shè)備的例子包括通常稱為“閃存驅(qū)動器”、“USB驅(qū)動 器”、“拇指驅(qū)動器”或固態(tài)盤驅(qū)動器6SD驅(qū)動器)的設(shè)備。設(shè)備100至少部分地通 過分配將被存儲在多個存儲器存儲子部件中的數(shù)據(jù)同時也計算和存儲描述所儲存的數(shù)據(jù) 的糾錯(例如,奇偶)碼的方式來獲得其容錯。因為固態(tài)存儲器設(shè)備例如設(shè)備100由多 個固態(tài)(例如,閃存)存儲器設(shè)備子部件組成,獨立塊冗余陣列(RAIB)可在單個SSD內(nèi) 實現(xiàn),這與RAID系統(tǒng)的情況下的一組固態(tài)驅(qū)動器相反。在存儲器存儲子部件的故障的 情況下,奇偶信息可作為恢復(fù)存儲在出故障的子部件中的數(shù)據(jù)的過程的一部分來使用。
設(shè)備100通過輸入端口 104通信地連接到主設(shè)備102(例如,計算機(jī))。在一些實 現(xiàn)中,輸入端口 104可為通用串行總線(USB)、串行ATA6ΑΤΑ)總線、并行ATA(PATA) 總線、FireWire或任何其它串行或并行數(shù)據(jù)總線。6
設(shè)備100包括存儲控制器110。存儲控制器110將主設(shè)備102通過接口連接到存 儲器設(shè)備120a-120f的集合,使得主設(shè)備102能夠使用存儲設(shè)備120a_120f用于數(shù)據(jù)的存 儲。存儲設(shè)備120a-120f中的每個是固態(tài)存儲器設(shè)備,其中每個存儲設(shè)備可包括物理存儲 器的一個或多個塊。在一些實施方式中,存儲設(shè)備120a-120f可為閃存設(shè)備、NAND設(shè) 備或其它適當(dāng)類型的固態(tài)存儲器設(shè)備。存儲設(shè)備的額外例子將結(jié)合圖3和4在下面的描 述中被進(jìn)一步討論。在一些實現(xiàn)中,存儲控制器110可組織存儲設(shè)備120a-120f來通過接 口與主設(shè)備102連接作為一個或多個存儲設(shè)備。閃存設(shè)備120a_120f中的每個被細(xì)分成邏輯數(shù)據(jù)塊。在一些實現(xiàn)中,邏輯數(shù)據(jù) 塊代表在閃存設(shè)備120a-120f內(nèi)的固態(tài)存儲器的最小可擦除單元。每個塊被分成頁。在 一些實現(xiàn)中,頁可為可被讀取或?qū)懙綁K的存儲器的最小單元。在一些例子中,塊可具有 192個4KB頁。邏輯數(shù)據(jù)塊的例子將結(jié)合圖4在下面的描述中被討論。存儲控制器110包括處理器112、動態(tài)隨機(jī)存取存儲器(DRAM) 114、頁糾錯碼 (ECC)模塊116和獨立塊冗余陣列(RAIB)編碼器212。處理器112從主設(shè)備102接收 數(shù)據(jù)并將數(shù)據(jù)緩存在DRAM 114中。在一些實現(xiàn)中,DRAM 114可在存儲控制器110的 外部。處理器112接著通過將數(shù)據(jù)劃分、分組或以另外方式加入到一個或多個邏輯數(shù)據(jù) 塊中、確定將邏輯數(shù)據(jù)塊存儲為邏輯塊分組的閃存設(shè)備120a-120f的子集并將數(shù)據(jù)儲存在 其中的方式來處理從主設(shè)備102接收的或從DRAM 114讀取的數(shù)據(jù)。邏輯分組的例子將 結(jié)合圖4在下面的描述中被進(jìn)一步討論。當(dāng)數(shù)據(jù)被發(fā)送到存儲設(shè)備120a-120f時,數(shù)據(jù)通過頁ECC模塊116傳遞。頁 ECC模塊116將糾錯碼冗余添加到被發(fā)送到存儲設(shè)備120a-120f用于存儲的每頁,并存儲 ECC冗余連同每頁。在一些實現(xiàn)中,ECC代碼可用于檢測并修補相關(guān)頁內(nèi)的錯誤。例 如 ,可在確定頁內(nèi)的哪些位被錯誤地存儲或讀取以及恢復(fù)頁內(nèi)的最初存儲的數(shù)據(jù)的過程 中使用ECC代碼。在一些實現(xiàn)中,ECC可在字線層上完成。例如,對于單比特位單元(例如,單 層單元SLC),可能每字線有一頁。然而,在一些例子中,閃存設(shè)備可能能夠每單元存儲 兩位(例如,多層單元MLC)、三位(例如,三層單元TLC)或多位。這樣的設(shè)備可具 有能夠保存多頁的字線(例如,多行單元)。例如,一頁可相應(yīng)于每個單元的最低有效位 (LSB),而另一頁相應(yīng)于中心位,以及又一頁相應(yīng)于每個單元的最高有效位(MSB)。在 TLC或MLC的例子中,可使用頁層ECC或字線層ECC。除了 ECC代碼對儲存在存儲設(shè)備120a-120f上的單獨的頁提供保護(hù)以外,RAIB 編碼器118處理頁以產(chǎn)生邏輯塊分組的RAIB冗余代碼(例如,糾錯碼奇偶數(shù)據(jù))??刂?器可接著使用存儲設(shè)備120a-120f中的兩個或多個來存儲由編碼器118所計算的用戶數(shù)據(jù) 和RAIB冗余。在一些實現(xiàn)中,在給定的時間,可能只有一個活動的邏輯塊分組。數(shù)據(jù)可接著 被逐頁地寫,同時遍及邏輯塊分組的物理存儲器塊使頁交錯。在一些實現(xiàn)中,如果在邏 輯塊分組內(nèi)的塊存在于不同的存儲設(shè)備120a-120f上,則可實現(xiàn)增加的吞吐量和/或可靠 性。一旦用戶數(shù)據(jù)的相應(yīng)頁被寫到存儲設(shè)備120a-120f,RAIB奇偶性就是可用的并被控 制器寫到存儲設(shè)備120a-120f的相應(yīng)頁上。在一些實現(xiàn)中,處理器112可在所有用戶頁被寫到存儲設(shè)備120a_120f之前請求RAIB編碼器118將奇偶數(shù)據(jù)寫到存儲設(shè)備120a-120f。在這樣的例子中,空的用戶頁可 被標(biāo)記為已用過的。例如,由于RAIB編碼器118將不能夠更新RAIB冗余,寫到用過 的用戶頁將使RAIB糾錯碼結(jié)構(gòu)無效,因為在兩個連續(xù)的塊擦除操作之間一頁只能被寫一 次。
在一些實現(xiàn)中,處理器112或主設(shè)備102可處理數(shù)據(jù)以確定糾錯數(shù)據(jù)和/或控制 糾錯數(shù)據(jù)的分布和存儲。例如,處理器112或主設(shè)備102可仿效RAIB編碼器118的功 能以將遍及不同設(shè)備的邏輯數(shù)據(jù)塊分組成邏輯分組,并對每個這樣的邏輯分組引入糾錯碼。
圖2是示出容錯固態(tài)存儲器設(shè)備200的另一例子的結(jié)構(gòu)圖。設(shè)備200經(jīng)由數(shù)據(jù) 總線104通過接口與主設(shè)備102連接,以為主設(shè)備102提供固態(tài)存儲器。
設(shè)備200包括存儲控制器210。存儲控制器210包括處理器112、DRAMl 14和 頁ECC模塊116。存儲控制器210還包括獨立塊冗余陣列(RAIB)編碼器212。
除了在本例中控制器將RAIB奇偶性存儲在專用的奇偶設(shè)備220a和220b中之 外,RAIB編碼器212執(zhí)行與圖1的RAIB編碼器118實質(zhì)上相同的功能。在一些實現(xiàn) 中,奇偶設(shè)備220a和220b是類似于存儲設(shè)備120a-120f的存儲設(shè)備,其專供RAIB奇偶 數(shù)據(jù)的存儲之用。存儲在奇偶設(shè)備220a和220b上的RAIB奇偶數(shù)據(jù)可稍后用于恢復(fù)存 儲在存儲設(shè)備120a-120f上的數(shù)據(jù)。
圖3是示出包括多個儲存存儲器設(shè)備的容錯固態(tài)存儲器設(shè)備300的例子的結(jié)構(gòu) 圖。通常,在例如設(shè)備300等設(shè)備中的容錯的概念是通過RAIB奇偶數(shù)據(jù)鏈接存儲在該設(shè) 備內(nèi)的不同存儲設(shè)備上的數(shù)據(jù)。在一些實現(xiàn)中,容錯技術(shù)(例如,RAID)的前提是存儲 模塊故障可為獨立的。在容錯固態(tài)存儲器設(shè)備例如設(shè)備100、200和300的一些實現(xiàn)中, 通過將設(shè)備100、200和300內(nèi)的每個存儲設(shè)備模塊或每個芯片處理為能夠獨立于同一容 錯固態(tài)存儲器設(shè)備內(nèi)的其它類似設(shè)備出故障的設(shè)備來實現(xiàn)分離存儲設(shè)備的邏輯方法。
設(shè)備300包括存儲控制器310和存儲設(shè)備320a_320f的集合。存儲控制器310包 括處理器312和DRAM 314。在一些實現(xiàn)中,處理器312和DRAM可分別為處理器112 和DRAM 114。存儲控制器310還包括固態(tài)設(shè)備數(shù)據(jù)路徑316。在一些實現(xiàn)中,固態(tài)設(shè) 備數(shù)據(jù)路徑316可協(xié)調(diào)將用戶數(shù)據(jù)和恢復(fù)碼分布到存儲設(shè)備320a-320f中的存儲位置。
存儲設(shè)備320a-320f中的每個包括多個存儲子設(shè)備,例如在320a中的存儲子設(shè)備 322a-322d。在一些實現(xiàn)中,存儲子設(shè)備322a_322d中的每個可為單個集成存儲器電路或 芯片。存儲子設(shè)備中的每個進(jìn)一步細(xì)分成很多存儲器塊,例如存儲子設(shè)備32 中的存儲 器塊32^-3Md。在一些實現(xiàn)中,物理存儲塊可包括存儲器塊324a-324d的集合,其中存 儲器塊是單獨可尋址的且都在同一集成電路芯片上形成。在一些實現(xiàn)中,存儲 器塊3Ma-324d中的每個代表存儲子設(shè)備32 上的最小可擦除單元的分組,且存儲器塊 324a-324d中的每個包括很多代表存儲器塊內(nèi)的存儲器的最小可寫單元的頁(未示出)。
在一些實現(xiàn)中,為了創(chuàng)建容錯存儲系統(tǒng)的目的,可利用設(shè)備300的物理結(jié)構(gòu), 更具體地,利用存儲設(shè)備320a-320f。例如,因為閃存通常不能在頁層上被蓋寫,一旦每 個塊被寫入,整個塊就必須先被擦除,然后新數(shù)據(jù)才能寫到其頁上,因此可能不需要考 慮一些塊被更改且RAIB奇偶性必須相應(yīng)地更新的使用情況。在另一例子中,設(shè)備300 的設(shè)計可能不需要如通常在RAID控制器中完成的適應(yīng)插入、刪除或替換包含用戶數(shù)據(jù)或RAIB奇偶數(shù)據(jù)的塊,因為一旦設(shè)備300被制造,添加或移除存儲器設(shè)備可能就是不可能 的。
圖4示出幾個固態(tài)存儲器設(shè)備的概念邏輯分組400。通常,該分組代表在容錯固 態(tài)存儲器設(shè)備內(nèi)的存儲器設(shè)備的邏輯布置,以示出提供容錯的存儲器塊的邏輯分組的例 子。在一些實現(xiàn)中,分組400可分別由圖1、2和3的設(shè)備100、200和/或300使用。
分組400包括存儲設(shè)備410a、存儲設(shè)備410b、存儲設(shè)備410c和存儲設(shè)備410d。 在一些實現(xiàn)中,存儲設(shè)備410a-410d可為實質(zhì)上類似于圖1的存儲設(shè)備120a_120f的 存儲設(shè)備。在一些實現(xiàn)中,存儲設(shè)備410a-410d中的一個或多個可為圖2的奇偶設(shè)備 220a-200bo
存儲設(shè)備410a_410d中的每個包括物理存儲器塊420的集合。物理存儲器塊420 以行和列的概念布置示出,其中每個存儲設(shè)備(例如,芯片)410a-410d由多個塊組成。 在一些實現(xiàn)中,存儲設(shè)備可用于代表并行化結(jié)構(gòu),例如單個儲存存儲器設(shè)備內(nèi)的可被同 時寫入或讀取的存儲器單元的集合(例如,多平面設(shè)備)。例如,列430代表包括在存儲 設(shè)備410b中的物理存儲器塊。
物理存儲器塊420的行例如行440代表包括每個子設(shè)備內(nèi)的相應(yīng)塊(例如,第k 個塊)的存儲器的邏輯單元。在一些實現(xiàn)中,行440代表可被一起擦除的存儲器的邏輯 單元(或其子組,如可能是每設(shè)備有兩個面的情況)。
為了容錯(例如,RAIB條帶或RAIB ECC碼字)的目的,行440還用作物理存 儲器塊420的邏輯塊分組。存儲控制器例如存儲控制器110、210或310使用行440來存 儲用戶數(shù)據(jù)和RAIB冗余。例如,用戶數(shù)據(jù)可分成相應(yīng)于物理存儲器設(shè)備420的尺寸和數(shù) 量的塊,物理存儲器設(shè)備420被指定用于行440內(nèi)的用戶數(shù)據(jù)的存儲。更具體地,用戶 數(shù)據(jù)可一次一頁地以交錯的方式(例如,先寫每個塊的第0頁,然后寫每個塊的第一頁, 等等)被寫到這些塊中。存儲控制器可通過對用戶頁執(zhí)行按位異或操作來計算RAIB奇 偶頁。存儲控制器可接著將RAIB奇偶頁存儲到行440內(nèi)的最后一個自由塊(例如,并 非必須的,如圖400上所示的最右邊的塊)上。
在一些實現(xiàn)中,容錯固態(tài)存儲器設(shè)備的設(shè)計可部分地基于數(shù)據(jù)可能由于物理設(shè) 備的故障而丟失的概念。例如,物理存儲器塊420之一可能發(fā)生故障,使它存儲的數(shù)據(jù) 被破壞或不可得到。在另一例子中,一個設(shè)備上的整個平面可能發(fā)生故障,從而使平面 內(nèi)的物理存儲器塊420不可讀。
然而,在一些實現(xiàn)中,假定同一設(shè)備內(nèi)的所有平面都是獨立的可能不是可行的 (例如,如果存儲設(shè)備410a發(fā)生故障,存儲設(shè)備410a內(nèi)的所有平面可能是不可讀的)。 為了適應(yīng)這樣的設(shè)計考慮,幾個RAIB條帶可在單行內(nèi)交錯,使得每個RAIB碼字不包含 來自單個存儲設(shè)備模塊上的兩個或多個平面的位。
例如,行440的邏輯組合包括來自每個存儲設(shè)備模塊的一個物理存儲器塊420。 屬于每行內(nèi)的單個RAIB條帶的物理存儲器塊420被顯示有類似的填充模式。例如,物 理存儲器塊420a的集合代表屬于被交錯到行440中的條帶的物理存儲器塊420,使得來自 存儲設(shè)備410a-410d中的任何一個的僅僅一個物理存儲器設(shè)備包括在單個RAIB條帶中。
在圖4的例子中,每行分成示有不同的填充模式的三個RAIB條帶,且RAIB條 帶內(nèi)的每個物理單元(例如,每個存儲設(shè)備410a-410d)從故障點的角度來看獨立于其它物理單元。更一般地,具有N個子設(shè)備的存儲設(shè)備可每行提供N個RAIB條帶。在本例中,存 儲設(shè)備410a-410d被指定用于用戶數(shù)據(jù)和恢復(fù)碼的存儲。在一些 實現(xiàn)中,存儲控制器可確定物理存儲器塊420中的哪些將用于RAIB奇偶性的存儲。在一 些實現(xiàn)中,多于一個的物理存儲器塊420可用于存儲單個RAIB條帶的奇偶性。例如, 使用恢復(fù)碼的一個塊的RAIB條帶可能通常能夠恢復(fù)在RAIB條帶內(nèi)的單個出故障的物理 存儲器塊中的數(shù)據(jù)。通過實現(xiàn)能夠恢復(fù)每RAIB條帶的兩個或多個故障塊的代碼,可恢 復(fù)相應(yīng)的兩個或多個壞的塊。在一些實現(xiàn)中,這個關(guān)系可稱為RAIB碼率(coderate)。單個塊校正RAIB碼率
由(RAIB條帶中設(shè)備的數(shù)量-1)/(RAIB條帶中的設(shè)備的數(shù)量)給出。例如,對于具有八 個閃存設(shè)備的容錯固態(tài)存儲器設(shè)備,RAIB碼率將為(8-1)/8或7/8,這意味著整個設(shè)備 的大約12%將用于存儲恢復(fù)碼。在八個閃存設(shè)備中的兩個用于存儲RAIB奇偶性的例子 中,于是RAIB碼率將為(8-2)/8或3/4,這意味著整個設(shè)備的大約25%將用于存儲恢復(fù) 碼。在恢復(fù)碼的多于一個的塊被使用的實現(xiàn)中,Reed-Solomon(RS)碼可用于實現(xiàn)RAIB ECC。仍然參考圖4,在一些實現(xiàn)中,RAIB條帶可被選擇成與行440重合,使得RAIB 冗余占據(jù)單個平面(例如,子設(shè)備)以產(chǎn)生較高的RAIB碼率(例如,存儲的空間的較小 部分用于恢復(fù)碼),以由在同一設(shè)備上的多個平面發(fā)生故障的可能性而導(dǎo)致的減小的數(shù)據(jù) 可靠性保護(hù)為代價。例如,對于每個設(shè)備有16個閃存設(shè)備和兩個平面的容錯固態(tài)存儲器 設(shè)備,這可產(chǎn)生31/32RAIB碼率系統(tǒng)。在一些實現(xiàn)中,RAIB碼率可響應(yīng)于用戶選擇來 配置。在一些實現(xiàn)中,有可能需要選擇RAIB條帶與由控制器所使用的邏輯塊分組重合 或是其子集,以實現(xiàn)存儲器管理(例如,損耗均衡,垃圾收集)。因為可能需要在任何成 員塊可被擦除之前使RAIB條帶內(nèi)的所有頁無效,在一些實現(xiàn)中,擦除RAIB條帶內(nèi)的一 些塊可能導(dǎo)致RAIB恢復(fù)碼保護(hù)的損失。如果RAIB條帶內(nèi)的所有設(shè)備屬于單個損耗均衡 單元,該功能可以是固有的。在一些實現(xiàn)中,存儲控制器可對RAIB條帶內(nèi)的相似數(shù)據(jù) (例如,具有熱點的熱點數(shù)據(jù)、具有冷點的冷點數(shù)據(jù))分組,并選擇相似的塊(例如,具 有實質(zhì)上類似的循環(huán)特征的塊)以形成條帶。到目前為止描述的很多例子實現(xiàn)了單個塊校正RAIB。在一些實現(xiàn)中,可設(shè)計能 夠恢復(fù)RAIB條帶內(nèi)的多于一個的塊的RAIB ECC。例如,Reed-Solomon(RS)ECC碼可
用于對RAIB條帶內(nèi)的頁的第k個符號(例如,8位符號)編碼。在一些實現(xiàn)中,使用產(chǎn) 生N維多項式的RS ECC碼可產(chǎn)生能夠校正2N個塊故障的RAIB條帶,假設(shè)出故障的塊 能夠被識別的話(例如,使用頁層ECC/字線層ECC)。圖5A是示出奇偶編碼器500的例子的結(jié)構(gòu)圖。在一些實現(xiàn)中,奇偶編碼器500 可包括在存儲控制器110、210或310中。通常,奇偶編碼器500對用戶數(shù)據(jù)的頁進(jìn)行異 或操作以產(chǎn)生一頁RAIB冗余碼。在本例中,奇偶編碼器500配置成產(chǎn)生用于確定單個 塊校正恢復(fù)碼的單個奇偶檢驗碼。寫路徑500包括頁ECC編碼器510。在一些實現(xiàn)中,頁ECC編碼器510可為圖 1的頁ECC編碼器116。頁ECC編碼器510處理用戶數(shù)據(jù)的頁以確定對頁層ECC的糾
錯碼冗余。在一些實現(xiàn)中,ECC碼可用于校正用戶數(shù)據(jù)的單獨的頁內(nèi)的錯誤。用戶數(shù)據(jù)和頁層ECC冗余位接著被存儲在存儲設(shè)備520的集合中。寫路徑500維持存儲部分RAIB奇偶值的RAIB奇偶緩沖器530。例如,在邏輯塊分組的第一用戶頁被寫入之前,奇偶緩沖器530被復(fù)位到零。當(dāng)用戶頁進(jìn)入時,奇偶 緩沖器530通過在奇偶緩沖器530的內(nèi)容和進(jìn)入的頁之間執(zhí)行異或操作540而被更新。一 旦邏輯塊分組(例如,RAIB條帶)的最后一個用戶頁被寫入,奇偶緩沖器530的內(nèi)容就 被寫到存儲設(shè)備520。圖5B是示出另一奇偶編碼器501的例子的結(jié)構(gòu)圖。奇偶編碼器501實質(zhì)上類 似于奇偶編碼器500,除了一旦邏輯塊分組的最后一個用戶頁被寫入,奇偶緩沖器530的 內(nèi)容就被寫到專用奇偶設(shè)備550。在一些實現(xiàn)中,可包括額外的奇偶設(shè)備550以預(yù)防多 個設(shè)備故障。也可實現(xiàn)相等或較大數(shù)量的額外的奇偶緩沖器530,其中每個奇偶緩沖器 530可使用額外的控制以與以前描述的類似的方式被更新,以根據(jù)查找表和用戶頁索引來 啟用或禁用異或540操作。多個奇偶緩沖器的例子將在圖9的描述中被進(jìn)一步討論。查 找表和用戶頁索引的例子將結(jié)合圖IOa和IOb在下面的描述中被討論。圖6是示出配置成將數(shù)據(jù)寫到物理存儲器的存儲控制器600的例子的示意圖。在 一些實現(xiàn)中,存儲控制器600可為圖1的存儲控制器110、圖2的存儲控制器210或圖3 的存儲控制器310。存儲控制器600包括雙倍數(shù)據(jù)率(DDR)存儲器605,其緩存從主設(shè)備(未示出) 發(fā)送的用戶數(shù)據(jù),用于存儲在物理存儲器設(shè)備610的集合中。緩存在DDR 605中的用戶 數(shù)據(jù)的頁被介質(zhì)CRC/LBA615處理。在一些實現(xiàn)中,介質(zhì)CRC/LBA 615可對用戶數(shù)據(jù) 的頁執(zhí)行循環(huán)冗余校驗、邏輯塊尋址或兩者。用戶數(shù)據(jù)的頁在選擇器(switch) 620處被接收,選擇器620受控于通過奇偶介質(zhì) 傳輸信號625從主設(shè)備接收的信號。當(dāng)沒有這樣的信號存在時,用戶頁被ECC 630處理 并存儲在物理存儲器設(shè)備610內(nèi)的邏輯塊分組中。從介質(zhì)CRC/LBA615出現(xiàn)的用戶數(shù)據(jù)的頁也在選擇器635處被接收,選擇器 635受控于通過奇偶緩沖復(fù)位信號640從主設(shè)備接收的信號。當(dāng)奇偶緩沖復(fù)位信號640存 在時,用戶頁由存儲器保護(hù)奇偶(MPP)編碼器645處理,存儲器保護(hù)奇偶(MPP)編碼器 645確定CRC值以使數(shù)據(jù)被存儲在奇偶緩沖器650中。當(dāng)奇偶緩沖復(fù)位信號不存在時, MPP編碼器接收進(jìn)入的用戶頁與奇偶緩沖器的內(nèi)容的異或(例如,表示新的運行RAIB奇 偶性)。用戶頁和CRC接著被緩存在奇偶緩沖器650中。MPP檢查器模塊655使用CRC 值來確定當(dāng)數(shù)據(jù)存儲在奇偶緩沖器650中時它是否被破壞。如果MPP檢查器模塊655檢 測到比較值中的錯誤,則奇偶緩沖誤差信號660被置位以通知主設(shè)備比較值中有問題。奇偶介質(zhì)傳輸信號625也控制選擇器665。通常,當(dāng)邏輯塊分組的RAIB奇偶數(shù) 據(jù)準(zhǔn)備存儲在物理存儲器模塊610的集合中時,奇偶介質(zhì)傳輸信號625被存儲器設(shè)備控制 器置位。當(dāng)邏輯塊分組中的所有用戶頁被處理了時,控制器設(shè)置奇偶介質(zhì)傳輸信號625, 從而使選擇器665和620指示將被寫到物理存儲器設(shè)備610上的最后的RAIB奇偶性。被分配到同一邏輯塊分組的隨后的用戶頁接著與以前緩存的值進(jìn)行異或操作。 在本例中,以前緩存的值在異或邏輯670中與隨后的用戶頁進(jìn)行異或操作以產(chǎn)生新的中 間RIAB奇偶值。控制器釋放奇偶緩沖復(fù)位信號640,因此選擇器635指示運行的RAIB奇偶性被MPP編碼器645處理,作為更新的運行的RAIB奇偶性被緩存在奇偶緩沖器650 中,并被MPP檢查器模塊655檢查。這個循環(huán)對被分配給邏輯塊分組的每個隨后的用戶頁重復(fù)。
在一些實現(xiàn)中,RAIB奇偶數(shù)據(jù)可能描述不到整個邏輯塊分組。例如,響應(yīng)于掉 電操作,RAIB編碼器可能需要通過將相應(yīng)的奇偶緩沖器寫到物理存儲器設(shè)備610來關(guān)閉 所有打開的RAIB條帶(例如,RAIB關(guān)聯(lián)被認(rèn)為是打開的,如果其奇偶緩沖區(qū)的內(nèi)容還 沒有被存儲)。一旦奇偶緩沖器被寫到介質(zhì),所有未寫入的頁就被標(biāo)為無效的。允許主 設(shè)備將數(shù)據(jù)寫到這些頁可能使RAIB奇偶更新操作成為必需的,這通常對閃存設(shè)備是不可 能的。
在一些實現(xiàn)中,這樣的限制可通過允許每RAIB條帶使用多于一個的奇偶頁來克 服。例如,RAIB編碼器可通過將奇偶緩沖器的當(dāng)前內(nèi)容存儲到下一可用的存儲器塊并將 未寫的頁填充在RAIB條帶中來關(guān)閉打開的RAIB條帶。一旦奇偶頁被寫到介質(zhì),RAIB 條帶內(nèi)的所有有效頁的異或就為“0”頁。如果在以后的時刻,RAIB編碼器確定更多 的頁將被寫到同一 RAIB條帶中,則不需要讀以前寫的頁。每當(dāng)RAIB編碼器再次打開 RAIB奇偶關(guān)聯(lián)時,它可寫只在寫會話期間積累的RAIB奇偶性。
例如,RAIB條帶可包括10頁(0-9)。RAIB編碼器可接收并處理三頁用戶數(shù) 據(jù),且那些頁可被存儲為第0、1和2頁。如果在此時,RAIB編碼器被請求關(guān)閉RAIB關(guān) 聯(lián),同時條帶是不完整的(例如,第4-9頁沒有被寫),則RAIB編碼器可將RAIB緩沖器 的當(dāng)前內(nèi)容(例如,第0-2頁的異或)存儲到條帶中的下一可用的頁(例如,第3頁), 并將其余的第4-9頁標(biāo)為無效的。因為0-3頁異或為“0”頁,當(dāng)重新開始寫操作時, 不需要重新讀、異或以及緩存第0-2頁;RAIB編碼器再一次在第4頁起開始對新的頁編 碼以及將第4-8頁的相應(yīng)的RAIB奇偶性存儲在頁9中。因此,存儲在第9頁中的恢復(fù) 碼將可用于恢復(fù)第0-8頁的任一頁。
圖7是示出能夠執(zhí)行自測試功能的RAIB奇偶編碼器700的例子的結(jié)構(gòu)圖。在 一些實現(xiàn)中,自測試功能可用于使RAIB特征測試自動化。通常,可只在存儲設(shè)備模塊 故障的情況下使用RAIB功能。因為這是通常罕見的情況,檢查RAIB結(jié)構(gòu)完整性的方法 被提供。在操作中,控制器讀單個RAIB條帶的所有頁,同時在它們被讀取時對頁的內(nèi) 容進(jìn)行異或操作。正常期望將是奇偶緩沖器650將為全“0”頁。奇偶緩沖器650的內(nèi) 容由邏輯710檢查,邏輯710對頁中的所有位進(jìn)行異或操作,以確定測試寄存器720的內(nèi) 容是否會變成非零的,非零可指示可能歸因于存儲設(shè)備故障的所讀的頁中的錯誤。
在存儲設(shè)備模塊故障的情況下,設(shè)備控制器可試圖恢復(fù)存儲在出故障的平面/ 設(shè)備上的數(shù)據(jù)。在一些實現(xiàn)中,這可通過讀RAIB條帶中的所有頁(排除失效的頁)并使 用RAIB ECC來恢復(fù)位于有故障的設(shè)備上的數(shù)據(jù)來完成。更具體地,失效的頁可通過對 RAIB條帶中的剩余頁進(jìn)行異或操作來恢復(fù)。在一些實現(xiàn)中,如果在恢復(fù)期間確定RAIB 條帶中的另一頁失效(例如,頁層ECC失效),則控制器可停止恢復(fù)操作,因為只有一頁 可在單個頁RAIB恢復(fù)碼被使用時被恢復(fù)。在一些實現(xiàn)中,多頁恢復(fù)RAIB碼(例如, RS ECC)可用來恢復(fù)數(shù)量等于或少于多頁恢復(fù)碼所適應(yīng)的頁的數(shù)量的頁。
圖8是示出配置成從物理存儲器讀取數(shù)據(jù)的存儲控制器800的例子的示意圖。在 一些實現(xiàn)中,存儲控制器800可為在讀配置中的圖6的存儲控制器600。一般來說,用于從物理存儲器設(shè)備610讀和/或?qū)懙轿锢泶鎯ζ髟O(shè)備610的電路可為單獨的電路,因為 它們執(zhí)行不同的操作(例如,頁層ECC編碼器/解碼器可不同地操作)。實現(xiàn)用于使讀 和寫數(shù)據(jù)路徑允許控制器同時從物理存儲器設(shè)備610的一個讀和/或?qū)懙轿锢泶鎯ζ髟O(shè)備 610的不同一個的單獨的電路也可能是優(yōu)先的。仍 然概況地講,雖然可始終對寫操作啟用RAIB編碼器,RAIB解碼器可能只在 存儲器故障被檢測到的情況下被啟動。因為存儲器故障通常罕見,在控制器的壽命中這 些被認(rèn)為是例外。在存儲區(qū)故障被檢測到的一些實現(xiàn)中,控制器可停止接受來自主設(shè)備 的讀或?qū)憯?shù)據(jù)的請求,直到執(zhí)行了 RAIB數(shù)據(jù)恢復(fù)為止。在一些實施方式中,RAIB解碼 器邏輯可實質(zhì)上與RAIB編碼器的邏輯相同,且因此相同電路用于RAIB編碼和解碼(例 如,RAIB編碼器硬件可被重新使用來減小控制器尺寸)。在本例中,從物理存儲器設(shè)備610的集合中讀取在邏輯塊分組內(nèi)的所儲存的數(shù) 據(jù)的頁。頁層ECC 830檢查每頁以檢測可能存在的任何錯誤。在沒有錯誤被檢測到的頁 的例子中,主設(shè)備釋放奇偶DDR傳輸信號825,且頁通過選擇器805涌到介質(zhì)CRC/LBA 815并繼續(xù)到DDR 605,從DDR 605中頁變得對主設(shè)備可用。在錯誤被檢測到的例子中,主設(shè)備設(shè)置奇偶DDR傳輸信號825,使得選擇器810 將無錯誤的頁_包括RAIB冗余-引導(dǎo)到選擇器835。奇偶緩沖復(fù)位信號840使選擇器 830將第一個有效的頁引導(dǎo)到MPP編碼器845,且頁被緩存在奇偶緩沖器850中。MPP 檢查器模塊855檢查奇偶緩沖器的內(nèi)容,然后將它們傳遞回選擇器865和異或邏輯870。隨后,主設(shè)備釋放奇偶緩沖復(fù)位信號,使進(jìn)入的邏輯塊分組的無錯誤頁與奇偶 緩沖器850的內(nèi)容進(jìn)行異或操作。該過程對邏輯塊分組中的每個無錯誤頁重復(fù)。在此 時,奇偶緩沖器850的內(nèi)容代表存儲在出故障的存儲器塊上的頁??刂破鹘又O(shè)置奇偶DDR傳輸信號825。信號825使選擇器865和805將所恢 復(fù)的數(shù)據(jù)引導(dǎo)到主設(shè)備。圖9是示出多奇偶數(shù)據(jù)緩沖器900的例子的結(jié)構(gòu)圖。在一些實現(xiàn)中,多奇偶數(shù) 據(jù)緩沖器900可包括在存儲控制器例如存儲控制器110、210和310中。在一些實現(xiàn)中, 奇偶數(shù)據(jù)緩沖器可為圖6的奇偶緩沖器650。在一些實現(xiàn)中,容錯固態(tài)存儲器設(shè)備可支持 同時活動(例如,被部分地讀或?qū)?的多個邏輯塊分組。這樣的實現(xiàn)可使用多個奇偶緩 沖器,對于每個同時活動的邏輯塊分組,一個奇偶緩沖器在使用中。多奇偶數(shù)據(jù)緩沖器900包括RAIB奇偶數(shù)據(jù)緩沖器910a-910g的集合。在一些實 現(xiàn)中,RAIB奇偶數(shù)據(jù)緩沖器910a-910g中的每個可各自對很多活動的邏輯塊分組保存單 獨的運行奇偶值。選擇器920配置成響應(yīng)于寫奇偶緩沖選擇信號930將MPP檢查器模塊 645所檢查的比較數(shù)據(jù)選擇性地發(fā)送到RAIB奇偶緩沖器910a-910g中的一個。在一些實 現(xiàn)中,信號930可由主設(shè)備或由包括900的存儲控制器的其它部件發(fā)送。多RAIB奇偶數(shù)據(jù)緩沖器900還包括選擇器940,其配置成響應(yīng)于讀奇偶緩沖選 擇信號950將緩存的運行奇偶數(shù)據(jù)從緩沖器910a-910g中的選定的一個選擇性地發(fā)送到 MPP檢查器模塊655。在一些實現(xiàn)中,信號950可由存儲控制器發(fā)送。注意,在一些實 現(xiàn)中,緩沖器900包括對選擇器920、940的單緩沖選擇輸入;在這種情況下,選擇信號 930、950合并到單緩沖選擇信號中。在一些實現(xiàn)中,單奇偶數(shù)據(jù)緩沖器910a_910g可為雙端口存儲器,其中N個緩沖器可提供多達(dá)N個活動分組。例如,可實現(xiàn)六個雙端口存儲器以一次提供多達(dá)六個活動 邏輯塊分組。在其它實現(xiàn)中,單奇偶數(shù)據(jù)緩沖器910a_910g可為單端口存儲器,其中通過讀/ 寫2N來使讀和寫到存儲器中的操作交錯,其中,N是要在單個時鐘循環(huán)中處理的比特位 的數(shù)量。例如,可實現(xiàn)12個單端口存儲器以一次提供多達(dá)十二個活動邏輯塊分組。單 端口存儲器設(shè)備的這樣的實現(xiàn)可實現(xiàn)較大的吞吐量(例如,一個緩沖器可被寫入,而另 一個緩沖器可被同時讀)。圖IOA和IOB示出用于將邏輯索引映射到物理索引的查找表1000的例子。在一 些實現(xiàn)中,存儲控制器可結(jié)合多奇偶數(shù)據(jù)緩沖器900來使用查找表1000。參考圖10A, 表1000在默認(rèn)的映射配置中被示出(例如,在復(fù)位操作之后)。邏輯緩沖器位置的邏輯索 引范圍1010直接映射到多奇偶數(shù)據(jù)緩沖器900中的物理緩沖設(shè)備的物理索引范圍1020。存儲控制器能夠處理“N”個邏輯緩沖器(例如,在本例中“N”等于六),且第“N+1”個物理緩沖器用作“備用”緩沖器。在一些例子中,存儲控制器提供奇偶緩 沖活動信號以選擇邏輯緩沖器位置。范圍1030顯示可由存儲控制器使用的邏輯索引的范 圍。相應(yīng)于活動邏輯緩沖器的物理緩沖器被查找,并例如通過設(shè)置奇偶緩沖讀選擇信號 950被啟動。存儲控制器還可將奇偶緩沖寫選擇設(shè)置到相應(yīng)于備用邏輯緩沖器的物理緩沖 器(例如,在本例中第六個物理緩沖器)。在一些實現(xiàn)中,當(dāng)對選定的頁的處理完成時,查找表1000可通過更新相應(yīng)于被 分配到備用緩沖器的選定邏輯地址的緩沖器來更改,且相應(yīng)于邏輯地址“N+1”的緩沖 器可被映射到由奇偶緩沖讀選擇信號所給出的物理地址。在一些實現(xiàn)中,查找表1000可 能不需要響應(yīng)于奇偶介質(zhì)傳輸信號625或奇偶DDR傳輸信號825而被更新。在一些實現(xiàn)中,當(dāng)接收到復(fù)位信號時,可通過將奇偶緩沖讀選擇信號950設(shè)置 到相應(yīng)于邏輯緩沖器N+1的物理緩沖器來更新查找表1000,且奇偶緩沖寫選擇信號930 可被設(shè)置到由奇偶緩沖活動信號指示的邏輯緩沖器位置。例如,當(dāng)使用前面所述的技術(shù) 時,存儲控制器可設(shè)置奇偶緩沖活動信號等于2,奇偶緩沖讀選擇信號可被設(shè)置到2,且 奇偶緩沖寫選擇信號可被設(shè)置到6。以這種方式更新的查找表1000在圖IOb中被示出。 在一些實現(xiàn)中,查找表1000可在寄存器中實現(xiàn),以減小對表1000中存儲的值的存儲器保 護(hù)。圖11是示出用于存儲數(shù)據(jù)和RIAB奇偶性的過程1100的例子的流程圖。在一 些實現(xiàn)中,過程1100可由存儲控制器110、210和310使用。在1102,接收待被存儲在包括多個固態(tài)物理存儲器設(shè)備(例如,存儲數(shù)據(jù)設(shè)備 320a-320f)的固態(tài)存儲器中的數(shù)據(jù)(例如,在存儲控制器110處從主設(shè)備102)。在1104, 所接收的數(shù)據(jù)分成相應(yīng)于固態(tài)存儲器的邏輯數(shù)據(jù)塊。例如,邏輯數(shù)據(jù)塊可與存儲數(shù)據(jù)的 物理數(shù)據(jù)塊(例如,存儲器塊324a-324d)相同。在1106,邏輯數(shù)據(jù)塊被分配到至少一個塊分組,其包括來自多個固態(tài)物理存儲 器設(shè)備(例如,行440)的每個的至少一個物理數(shù)據(jù)存儲塊。在1108,讀取存儲在被分配 到邏輯塊分組的塊中的數(shù)據(jù)。在1110,如果所讀取的塊是從邏輯塊分組讀取的第一邏輯數(shù)據(jù)塊,則在1112, 該邏輯數(shù)據(jù)塊作為緩存值被緩存(例如,緩存在奇偶緩沖器650中)。接著在1114,邏輯數(shù)據(jù)塊被存儲(例如,存儲在相應(yīng)于邏輯塊分組的邏輯數(shù)據(jù)塊的物理存儲器塊中)。然 而,如果在1110,所讀的塊不是從邏輯塊分組讀取的第一邏輯數(shù)據(jù)塊,則在1116,該邏 輯數(shù)據(jù)塊與緩存值異或(例如,通過異或邏輯670)以產(chǎn)生運行的RAIB奇偶性。運行 RAIB奇偶性接著在1118作為緩存值被緩存,且邏輯數(shù)據(jù)塊存儲在邏輯塊分組的物理數(shù) 據(jù)存儲塊中,物理數(shù)據(jù)存儲塊被指定用于在1114將持久數(shù)據(jù)存儲在邏輯塊分組內(nèi)。在一 些實現(xiàn)中,多個緩沖器(例如,多奇偶數(shù)據(jù)緩沖器900)可用于緩存運行RAIB奇偶性。
如果在1120確定該塊不是被分配到邏輯塊分組的最后一個邏輯數(shù)據(jù)塊,則在 1122從邏輯塊分組選擇另一個塊,并在1108被讀取該塊。如果在1120該塊被確定為邏 輯塊分組的最后一個塊,則在1124確定相應(yīng)于存儲在邏輯塊分組中的持久數(shù)據(jù)的RAIB 奇偶性。在一些實現(xiàn)中,RAIB奇偶性可為最后一個緩存的RAIB奇偶性。在1126,相 應(yīng)的代碼存儲在邏輯塊分組的至少一個物理數(shù)據(jù)存儲塊中,物理數(shù)據(jù)存儲塊被指定用于 存儲相應(yīng)于存儲在邏輯塊分組中的持久數(shù)據(jù)的代碼。在一些實現(xiàn)中,相應(yīng)的代碼可為恢 復(fù)碼(例如,奇偶碼、RAIB奇偶數(shù)據(jù))。圖12是示出用于檢測所存儲的數(shù)據(jù)中的錯誤的過程1200的例子的流程圖。在 一些實現(xiàn)中,過程1200可由存儲控制器110、210和310使用。在1202,存儲在固態(tài)物 理存儲器(例如,存儲數(shù)據(jù)設(shè)備320a-320f)內(nèi)的邏輯塊分組的邏輯數(shù)據(jù)塊中的數(shù)據(jù)被讀 取(例如,通過存儲控制器110來讀取)。如果在1204確定邏輯數(shù)據(jù)塊是從邏輯塊分組讀取的第一個塊,則邏輯數(shù)據(jù)塊在 1206作為RAIB奇偶性被緩存(例如,緩存在奇偶數(shù)據(jù)緩沖器650中)。然而,如果在 1204該塊被確定為不是從邏輯塊分組讀取的第一個塊,則該塊在1208與運行RAIB奇偶 性異或(例如,通過異或邏輯670進(jìn)行比較),并在1210作為運行RAIB奇偶性被緩存。 在一些實現(xiàn)中,多個緩沖器(例如,多奇偶數(shù)據(jù)緩沖器900)可用于緩存運行RAIB奇偶 性。在1212確定該塊是否是從邏輯塊分組讀取的最后一個塊。如果不是,則邏輯 塊分組的下一個塊在1214被選擇并在1202被讀取。如果該塊是邏輯塊分組的最后一個 塊,則在1216運行RAIB奇偶性被檢查,以確定它是否等于預(yù)定值(例如,零)。如果 在1216運行RAIB奇偶性被確定為等于預(yù)定值,則在1220沒有錯誤被檢測到。然而, 如果在1216運行RAIB奇偶性不同于預(yù)定值,則錯誤在所讀取的邏輯塊中被檢測到,且 所檢測的錯誤的通知在1218被給出。在一些實現(xiàn)中,邏輯塊分組內(nèi)的錯誤的檢測可用于 觸發(fā)用于恢復(fù)錯誤數(shù)據(jù)的過程。圖13是示出用于恢復(fù)數(shù)據(jù)的過程1300的例子的流程圖。在一些實現(xiàn)中,過程 1300可由存儲控制器110、210和310使用。在1302,選擇存儲不可得到的或錯誤的數(shù)據(jù)的物理數(shù)據(jù)塊(例如,通過存儲控 制器110來選擇)。在1304,識別相應(yīng)于選定的物理數(shù)據(jù)存儲塊的邏輯數(shù)據(jù)塊。在1306, 識別相應(yīng)于選定的物理數(shù)據(jù)存儲塊的邏輯數(shù)據(jù)塊被分配到的邏輯塊分組。在1308,讀取 存儲在所識別的邏輯塊分組中的持久數(shù)據(jù),包括相應(yīng)的代碼(例如,恢復(fù)碼、奇偶碼、 RAIB奇偶數(shù)據(jù))。如果在1310確定所讀取的邏輯數(shù)據(jù)塊是從邏輯塊分組讀取的第一個塊,則該邏 輯數(shù)據(jù)塊在1312作為運行RAIB奇偶性被緩存(例如,緩存在緩沖器650中)。然而,如果在1310邏輯數(shù)據(jù)塊被確定為除了第一個塊以外的塊,則在1314,該邏輯數(shù)據(jù)塊與緩 存的運行RAIB奇偶性異或(例如,通過異或邏輯670進(jìn)行比較)。因而產(chǎn)生的值接著在 1316作為運行RAIB奇偶性被緩存。在一些實現(xiàn)中,多個緩沖器(例如,多奇偶數(shù)據(jù)緩 沖器900)可用于緩存運行RAIB奇偶性。如果在1318邏輯數(shù)據(jù)塊被確定為不是邏輯塊分組的最后一個塊,則在1320選擇 邏輯塊分組的另一個塊。如果在1322選定的塊相應(yīng)于所識別的物理塊(例如,在1302 識別的塊),則在 1320選擇另一個塊。例如,如果最新選擇的塊是被識別為存儲破壞的 或不可得到的數(shù)據(jù)的塊,則忽略該塊并選擇另一個塊。否則,在1308讀取選定的邏輯數(shù) 據(jù)塊。然而,如果在1318邏輯數(shù)據(jù)塊被確定為邏輯塊分組的最后一個塊,則在1324確 定相應(yīng)于邏輯塊分組的代碼。在一些實現(xiàn)中,相應(yīng)的代碼可為最后緩存的運行RAIB奇 偶性。例如,在1316緩存的最終奇偶性可用作相應(yīng)于邏輯塊分組的代碼。例如,如果 第一頁存儲二進(jìn)制值01101101,而第二頁存儲二進(jìn)制值11010100,則這兩頁的異或可為 10111001并被存儲為這兩頁的奇偶性。如果第二頁變得不可讀,則其內(nèi)容可通過對RAIB 奇偶性10111001和第一頁值01101101進(jìn)行異或操作來恢復(fù),以給出11010100的值,該 值是最初被存儲為第二頁的值。在一些實現(xiàn)中,相應(yīng)的代碼可為當(dāng)與最后緩存的RAIB奇偶性合并時將導(dǎo)致預(yù)定 值(例如,零)的值。在簡化的例子中,8比特位頁大小可緩存從0到255的值,且對于 為200的最終值(例如,在1316被緩存)和零的預(yù)定值,相應(yīng)的代碼可被確定為56 (例 如,二進(jìn)制200+二進(jìn)制56回繞等于零值)。在1326,(例如,向主設(shè)備)提供相應(yīng)的 代碼作為存儲在選定的物理數(shù)據(jù)存儲塊中的數(shù)據(jù)。繼續(xù)前面的例子,值56可為最初存儲 在損壞的塊中的值,并可被提供給主設(shè)備以恢復(fù)在損壞的塊中丟失的數(shù)據(jù)。上面詳細(xì)描述了新的實施方式,且各種更改是可能的。所公開的主題_包括在 本說明書中描述的功能操作-可在電路、計算機(jī)硬件、固件、軟件中或在它們的組合例 如在本說明書中公開的結(jié)構(gòu)裝置及其結(jié)構(gòu)等效形式中實現(xiàn),可能包括可操作來使一個或 多個數(shù)據(jù)處理裝置執(zhí)行所述操作的程序(例如,在計算機(jī)可讀介質(zhì)中編碼的程序,計算 機(jī)可讀介質(zhì)可為存儲器設(shè)備、存儲設(shè)備、機(jī)器可讀存儲基片或其它物理、機(jī)器可讀介質(zhì) 或它們的一個或多個的組合)。術(shù)語“數(shù)據(jù)處理裝置”包括用于處理數(shù)據(jù)的所有裝置、設(shè)備和系統(tǒng),作為例子 包括可編程處理器、計算機(jī)或多個處理器或計算機(jī)。該裝置除了硬件以外還可包括為正 被討論的計算機(jī)程序創(chuàng)建執(zhí)行環(huán)境的代碼,例如構(gòu)成處理器固件、協(xié)議堆棧、數(shù)據(jù)庫管 理系統(tǒng)、操作系統(tǒng)或它們的一個或多個的組合的代碼。程序(也稱為計算機(jī)程序、軟件、軟件應(yīng)用、腳本或代碼)可用任何形式的編程 語言-包括編譯或解釋語言或說明性或過程語言-來編寫,且它可配置在任何形式中,包 括作為獨立的程序或作為模塊、部件、子例程或適合于用在計算環(huán)境中的其它單元。程 序可存儲在電子存儲器中、磁或光記錄介質(zhì)上、或另一適當(dāng)?shù)挠行畏菚簳r計算機(jī)可讀介 質(zhì)上。程序不一定相應(yīng)于文件系統(tǒng)中的文件。程序可存儲在保存其它程序或數(shù)據(jù)(例 如,存儲在標(biāo)記語言文件中的一個或多個腳本)的文件的一部分中、專用于正被討論的 程序的單個文件中或多個協(xié)調(diào)的文件(例如,存儲一個或多個模塊、子程序或代碼的部分的文件)中。程序可部署成一個計算機(jī)上或在位于一個地點或分布在多個地點中并被 通信網(wǎng)絡(luò)互連的多個計算機(jī)上執(zhí)行。雖然本說明書包括很多細(xì)節(jié),這些不應(yīng)被解釋為對可被主張的內(nèi)容的范圍的限 制,而更確切地作為可能對特定的實施方式特有的特征的描述。在本說明書中在不同的 實施方式的背景下描述的某些特征也可結(jié)合單個實施方式實現(xiàn)。反過來,在單個實施方 式的背景下描述的各種特征也可在多個實施方式中單獨地或以任何適當(dāng)?shù)淖咏M合實現(xiàn)。 而且,雖然特征在上面被描述為在某些實施方式中起作用且甚至最初照此被主張,來自 所主張的組合的一個或多個特征在一些情況下可從該組合刪除,且所主張的組合可針對 于子組合或子組合的變形。
類似地,雖然以特定的順序在附圖中描述了操作,這不應(yīng)被理解為要求這樣的 操作以所示的特定順序或以連續(xù)的順序被執(zhí)行,或所有示出的操作都被執(zhí)行來實現(xiàn)期望 的結(jié)果。在某些情況下,多任務(wù)化和并行處理可能是有利的。而且,上述實施方式中的 各種部件的分離不應(yīng)被理解為在所有實施方式中都需要這樣的分離。其它實施方式落在下面的權(quán)利要求的范圍內(nèi)。
權(quán)利要求
1.一種方法,包括在存儲控制器處接收待存儲在包括多個固態(tài)物理存儲器設(shè)備的固態(tài)存儲器中的數(shù)據(jù);通過所述存儲控制器將所接收的數(shù)據(jù)分成相應(yīng)于所述固態(tài)存儲器的邏輯數(shù)據(jù)塊; 通過所述存儲控制器將所述邏輯數(shù)據(jù)塊分配到邏輯塊分組,所述邏輯塊分組包括來 自所述多個固態(tài)物理存儲器設(shè)備中的兩個或多個的至少一個物理數(shù)據(jù)存儲塊;將所述邏輯數(shù)據(jù)塊存儲在所述邏輯塊分組的、被指定用于將持久數(shù)據(jù)存儲在所述邏 輯塊分組內(nèi)的物理數(shù)據(jù)存儲塊中;通過所述存儲控制器確定相應(yīng)于存儲在所述邏輯塊分組中的所述持久數(shù)據(jù)的代碼;以及通過所述存儲控制器將所述代碼存儲在至少一個物理數(shù)據(jù)存儲塊中,所述至少一個 物理數(shù)據(jù)存儲塊被指定用于存儲相應(yīng)于存儲在所述邏輯塊分組中的所述持久數(shù)據(jù)的所述 代碼。
2.如權(quán)利要求1所述的方法,其中所述多個固態(tài)物理存儲器設(shè)備是閃存設(shè)備。
3.如權(quán)利要求1所述的方法,其中所述確定是邏輯異或操作。
4.如權(quán)利要求1所述的方法,其中所述多個固態(tài)物理存儲器設(shè)備和所述存儲控制器包 括單個存儲器存儲設(shè)備,且所述邏輯塊分組對應(yīng)于由所述存儲控制器所使用的邏輯塊分 組,以實現(xiàn)在所述單個存儲器存儲設(shè)備中的存儲器管理。
5.如權(quán)利要求1所述的方法,其中所述多個固態(tài)物理存儲器設(shè)備中的每個包括包含至 少一個物理數(shù)據(jù)存儲塊的單個集成電路芯片,其中物理數(shù)據(jù)存儲塊包括在所述集成電路 芯片上形成的固態(tài)存儲器的塊以及連同在同一集成電路芯片上形成的固態(tài)存儲器的其它 塊一起是單獨可尋址的。
6.如權(quán)利要求1所述的方法,還包括通過識別相應(yīng)于選定的物理數(shù)據(jù)存儲塊的邏輯數(shù)據(jù)塊被分配給的邏輯塊分組、讀取 存儲在所識別的邏輯塊分組中的持久數(shù)據(jù)和代碼、將所述代碼與不同于存儲在所述選定 的物理數(shù)據(jù)存儲塊中的持久數(shù)據(jù)的所讀取的持久數(shù)據(jù)進(jìn)行比較,來由所述存儲控制器恢 復(fù)存儲在所述選定的物理數(shù)據(jù)存儲塊中的持久數(shù)據(jù)。
7.如權(quán)利要求6所述的方法,其中所述比較是邏輯異或操作。
8.如權(quán)利要求1所述的方法,其中確定所述代碼包括在緩沖存儲器中存儲所述邏輯塊分組的第一個邏輯數(shù)據(jù)塊作為緩存值; 對于所述邏輯塊分組中的剩余邏輯數(shù)據(jù)塊中的每個,通過所述存儲控制器比較所述剩余邏輯數(shù)據(jù)塊與所述緩存值以確定比較值,以及 將所述比較值作為緩存值存儲在所述緩沖存儲器中;以及 通過所述存儲控制器確定當(dāng)與所述緩存值比較時導(dǎo)致預(yù)定值的值。
9.如權(quán)利要求9所述的方法,其中所述緩沖存儲器包括多個緩沖存儲器,且所述緩沖 存儲器中的至少一個包括單端口存儲器。
10.—種用于存儲數(shù)據(jù)的電子設(shè)備,包括 輸入端口,其配置成接收數(shù)據(jù);比較緩沖存儲器,其保存比較值;比較電路,其比較所述數(shù)據(jù)被劃分到的多個邏輯塊中的每個與所述比較值來確定新 的比較值以保存在所述比較緩沖存儲器中;以及固態(tài)數(shù)據(jù)儲存存儲器,其存儲所述邏輯塊和相應(yīng)于所述比較值的恢復(fù)碼,其中通過 合并來自所存儲的邏輯塊的一個或多個未被選擇的邏輯塊的數(shù)據(jù)與所述恢復(fù)碼,來自所 存儲的邏輯塊中的至少一個邏輯塊的數(shù)據(jù)是可恢復(fù)的。
11.如權(quán)利要求10所述的設(shè)備,其中所述固態(tài)數(shù)據(jù)儲存存儲器是閃存。
12.如權(quán)利要求10所述的設(shè)備,其中所述比較電路執(zhí)行邏輯異或操作。
13.如權(quán)利要求10所述的設(shè)備,其中所述緩沖存儲器包括多個緩沖存儲器,且所述緩 沖存儲器中的至少一個包括單端口存儲器。
14.如權(quán)利要求10所述的設(shè)備,其中通過確定當(dāng)與所述比較值比較時導(dǎo)致預(yù)定值的值 來確定所述恢復(fù)碼。
15.如權(quán)利要求10所述的設(shè)備,包括由軟件編程的處理器以實現(xiàn)所述比較電路。
16.如權(quán)利要求15所述的設(shè)備,其中所述比較電路執(zhí)行邏輯異或操作。
17.如權(quán)利要求10所述的設(shè)備,其中所述固態(tài)數(shù)據(jù)儲存存儲器包括多個固態(tài)物理存儲 器設(shè)備。
18.如權(quán)利要求17所述的設(shè)備,其中所述多個固態(tài)物理存儲器設(shè)備中的每個包括包含 至少一個物理數(shù)據(jù)存儲塊的單個集成電路芯片,其中物理數(shù)據(jù)存儲塊包括在所述集成電 路芯片上形成的固態(tài)存儲器的塊,并連同在同一集成電路芯片上形成的固態(tài)存儲器的其 它塊一起是單獨可尋址的。
19.如權(quán)利要求17所述的設(shè)備,其中所述設(shè)備作為單個數(shù)據(jù)存儲設(shè)備與主設(shè)備通過接 口連接。
20.—種方法,包括接收對存儲在包括多個固態(tài)物理存儲器設(shè)備的固態(tài)存儲器中的數(shù)據(jù)的請求;通過存儲控制器識別所請求的數(shù)據(jù)的邏輯數(shù)據(jù)塊的邏輯塊分組,所述邏輯數(shù)據(jù)塊相 應(yīng)于所述固態(tài)存儲器,以及所述邏輯塊分組包括來自所述多個固態(tài)物理存儲器設(shè)備中的 兩個或多個的至少一個物理數(shù)據(jù)存儲塊;讀取存儲在所識別的邏輯塊分組中的所儲存的數(shù)據(jù)和代碼;以及比較所述代碼與所儲存的數(shù)據(jù)以估計所請求的數(shù)據(jù)。
全文摘要
本公開包括涉及在固態(tài)存儲器中實現(xiàn)容錯數(shù)據(jù)存儲的系統(tǒng)和技術(shù)。在一些實現(xiàn)中,方法包括接收待存儲的數(shù)據(jù);將數(shù)據(jù)分成邏輯數(shù)據(jù)塊;將塊分配到邏輯塊分組,邏輯塊分組包括來自多個固態(tài)物理存儲器設(shè)備中的兩個或多個的至少一個物理數(shù)據(jù)存儲塊;將所述塊存儲在物理數(shù)據(jù)存儲塊中;確定相應(yīng)于持久數(shù)據(jù)的代碼;以及存儲相應(yīng)于存儲在邏輯塊分組中的數(shù)據(jù)的代碼。通過識別相應(yīng)于損壞的物理數(shù)據(jù)存儲塊的邏輯數(shù)據(jù)塊和邏輯塊分組,讀取存儲在所識別的分組中的數(shù)據(jù)和代碼,并將該代碼與不同于存儲在損壞的塊中的數(shù)據(jù)的所讀取的數(shù)據(jù)進(jìn)行比較,可恢復(fù)損壞的所存儲的數(shù)據(jù)的塊。
文檔編號G06F3/06GK102023815SQ20101028523
公開日2011年4月20日 申請日期2010年9月15日 優(yōu)先權(quán)日2009年9月15日
發(fā)明者格雷戈里·伯德 申請人:格雷戈里·伯德