專利名稱:用于檢測和替代失效的數據存儲器的裝置、系統(tǒng)和方法
技術領域:
本發(fā)明涉及數據存儲,并且更具體地,涉及檢測和替代存儲設備的陣列中失效的 數據存儲器。
背景技術:
固態(tài)存儲器和其他形式的數據存儲媒體容易受到固態(tài)存儲器內的具體區(qū)域中的 失效或數據錯誤的影響。在其他例子中,整個設備或芯片發(fā)生故障并喪失功能。通常,使用 多個存儲器設備或存儲元件,例如在分布式獨立驅動器冗余陣列(RAID)或其他冗余數據 系統(tǒng)中。存儲器設備的陣列(例如RAID系統(tǒng))提供了防止數據錯誤和設備故障的一定程 度的保護,這是由于存儲在陣列中的奇偶校驗數據可被用于替換失效的數據。然而,當存儲在陣列中的數據未與任意具體的物理硬件邊界對齊時,確定產生錯 誤的存儲器設備或存儲元件是困難的。
發(fā)明內容
如上所述,顯而易見,存在對用于檢測和替代失效的數據存儲器的裝置、系統(tǒng)和方 法的需求。有利地是,這種裝置、系統(tǒng)和方法單獨地測試陣列的存儲設備以檢測數據錯誤。本發(fā)明是針對現有技術的現況開發(fā)出來的,具體地,是針對現有技術中現有的可 用數據存儲系統(tǒng)并未完全解決的問題和需要。因此,本發(fā)明已經被開發(fā)出來以提供一種用 于檢測和替代失效的數據存儲器的裝置、系統(tǒng)和方法,克服現有技術中的上述多數或全部 缺陷。用于檢測和替代失效的數據存儲器的裝置具有多個配置為功能性的執(zhí)行下述必 要步驟的模塊從存儲設備的陣列讀取數據,利用糾錯碼(ECC)確定測試的數據是否存在 一個或多個錯誤以及錯誤是否可用ECC修正,從存儲設備的陣列選定存儲設備和替代讀取 自選定的存儲設備的數據。在描述的實施方式中,這些模塊包括讀取模塊、ECC模塊和隔離 模塊。讀取模塊從存儲設備的陣列讀取數據。該陣列包括兩個或多個存儲設備和一個或 多個額外存儲設備。額外存儲設備存儲來自存儲設備的奇偶校驗信息。在一種實施方式中, 讀取模塊從邏輯頁的至少一部分讀取數據。邏輯頁遍及存儲設備的陣列。存儲設備的陣列 包括N+P個存儲元件的陣列。存儲元件的陣列包括N個每個存儲ECC組塊的一部分的存儲 元件和P個存儲奇偶校驗數據的存儲元件。ECC組塊包括存儲的數據和生成自存儲的數據 的糾錯碼(ECC),其中ECC遍及存儲的數據。P個存儲元件存儲生成自存儲在N個存儲元件中的ECC組塊的奇偶校驗數據。在某些實施方式中,每個存儲設備包括非易失性固態(tài)存儲
οECC模塊利用糾錯碼(ECC)確定測試的數據是否存在一個或多個錯誤以及錯誤是 否可用ECC修正,測試的數據包括由讀取模塊讀取的數據。隔離模塊響應于ECC模塊確定錯誤存在于由讀取模塊讀取的數據中且該錯誤不 可用ECC修正而從存儲設備的陣列選定存儲設備。隔離模塊還利用包括生成自奇偶校驗數 據的數據(替代數據)和讀取自未被選定的存儲設備的數據(可用數據)的數據替代讀 取自選定的存儲設備的數據,奇偶校驗數據存儲在一個或多個額外存儲設備上,其中由ECC 模塊測試的數據還包括結合有替代數據的可用數據。在一種實施方式中,隔離模塊響應于 ECC模塊確定結合有替代數據的可用數據包含不可用ECC修正的錯誤而選定用于測試的下 一存儲設備。下一存儲設備選自存儲設備的陣列。隔離模塊選定每個隔離模塊用于測試, 直到ECC 1004模塊確定結合有替代數據的可用數據不包含錯誤或包含可用ECC修正的錯 誤。在一種實施方式中,該裝置包括引退模塊,其響應于ECC模塊確定結合有替代數 據的可用數據不包含錯誤或包含可用ECC修正的錯誤而基于引退策略引退選定的存儲設 備和選定的存儲設備上的一個或多個存儲區(qū)域中的一個。一個或多個存儲區(qū)域包括一個或 多個錯誤。存儲區(qū)域包括選定的存儲設備的至少一部分。在另一種實施方式中,引退模塊引退擦除塊并響應于下述情況用來自一個或多個 額外存儲設備的替代數據替代來自擦除塊的數據存儲錯誤恢復模塊擦除擦除塊,順序地 將額外數據寫入擦除塊,讀取模塊順序地讀取額外數據和使用ECC模塊和隔離模塊確定擦 除塊包括不可修正的錯誤,其中通過結合替代數據和可用數據,不可修正的錯誤是可修正 的。在一種實施方式中,該裝置包括存儲設備重新配置模塊,其響應于ECC模塊確定 結合有替代數據的可用數據不包含錯誤或包含可用ECC修正的錯誤而識別選定的存儲設 備,從而為將來的操作生成數據以替代來自選定的存儲設備的讀取數據。在一種實施方式中,裝置包括記錄模塊,其響應于ECC模塊確定結合有替代數據 的可用數據不包含錯誤或包含可用ECC修正的錯誤,進行下述操作中的一個或多個記錄 選定的存儲設備的標識;和記錄指明包括一個或多個錯誤的一個或多個存儲區(qū)域的存儲位 置數據。該區(qū)域包括選定的存儲設備的至少一部分。在一些實施方式中,記錄模塊記錄選定的存儲設備的標識而不記錄包括具有一個 或多個錯誤的存儲區(qū)域的存儲位置數據。在另一種實施方式中,記錄模塊記錄包括一個或 多個錯誤的一個或多個存儲區(qū)域,并且還記錄指明選定的存儲設備中包括一個或多個錯誤 的一個或多個存儲區(qū)域的存儲位置數據。記錄模塊還響應于讀取模塊進行的后續(xù)讀取和使 用ECC模塊和隔離模塊確定具有不可修正的錯誤的存儲區(qū)域,記錄一個或多個存儲區(qū)域和 額外存儲區(qū)域,其中結合替代數據和可用數據,不可修正的錯誤是可修正的。在又一種實施方式中,后續(xù)讀取包括由存儲區(qū)域測試模塊初始化的讀取和來自讀 取請求的讀取中的一個。在一種實施方式中,存儲區(qū)域包括下述中的一個或多個一個或多 個ECC組塊、一個或多個物理頁、一個或多個邏輯頁、一個或多個物理擦除塊、一個或多個 邏輯擦除塊、芯片、芯片的一部分、一個或多個芯片塊的一部分和一個或多個芯片塊。
在一種實施方式中,裝置包括存儲區(qū)域測試模塊,其識別選定的存儲設備內包括 錯誤的一個或多個存儲區(qū)域。記錄模塊還記錄包括由存儲區(qū)域測試模塊識別的一個或多個 存儲區(qū)域的存儲位置數據。在又一種實施方式中,存儲區(qū)域測試模塊利用后續(xù)讀取并使用 ECC模塊和隔離模塊確定具有不可修正的錯誤的存儲區(qū)域來識別具有一個或多個錯誤的存 儲區(qū)域,后續(xù)讀取由讀取模塊進行,通過結合替代數據和可用數據,不可修正的錯誤是可修 正的。在一種實施方式中,裝置包括區(qū)重新配置模塊,其為了將來的操作,用來自一個或 多個額外存儲設備的替代數據替代選定的存儲設備中一個或多個存儲區(qū)域的數據,從而選 定的存儲設備中一個或多個存儲區(qū)域外的數據不被替代。在又一種實施方式中,區(qū)重新配 置模塊用來自一個或多個額外存儲設備的替代數據替代來自選定的存儲設備上的一個或 多個存儲區(qū)域的數據,并用來自相相同的一個或多個額外存儲設備的替代數據替代來自相 同選定的存儲設備或不同選定的存儲設備上的一個或多個額外存儲區(qū)域的數據,一個或多 個額外存儲區(qū)域中的每一個包括一個或多個錯誤,其中,一個或多個存儲區(qū)域和一個或多 個額外存儲區(qū)域不共享共同的邏輯頁。在另一種實施方式中,區(qū)重新配置模塊用來自一個或多個額外存儲設備的替代數 據替代來自選定的存儲設備上的一個或多個存儲區(qū)域的數據,并用來自一個或多個不同額 外存儲設備的替代數據替代一個或多個額外存儲區(qū)域。一個或多個額外存儲區(qū)域中的每一 個包括一個或多個錯誤,其中,一個或多個存儲區(qū)域和一個或多個額外存儲區(qū)域共享共同 的邏輯頁。在一種實施方式中,裝置包括分析模塊,其分析記錄以確定下述中的一項或多項 選定的存儲設備中具有數據錯誤的區(qū)和錯誤類型。在一種實施方式中,裝置包括錯誤存儲恢復模塊,其響應于ECC模塊確定結合有 替代數據的可用數據不包含錯誤或包含可用ECC修正的錯誤而擦除具有一個或多個錯誤 的擦除塊以將擦除塊準備用于將來的數據存儲。在一種實施方式中,該裝置包括修正數據模塊,其響應于ECC模塊確定結合有替 代數據的可用數據不包含錯誤或包含可用ECC修正的錯誤而返回修正的數據。本發(fā)明也提了一種用于檢測和替代失效的數據存儲器的系統(tǒng)。該系統(tǒng)可被實施 為存儲設備的陣列,控制陣列的存儲控制器和相對于裝置描述的類似模塊。具體地,在一 種實施方式中,該系統(tǒng)包括讀取模塊、ECC模塊和隔離模塊。讀取模塊從存儲設備的陣列讀 取數據。該陣列包括兩個或多個存儲設備和一個或多個額外存儲設備。額外存儲設備存儲 來自存儲設備的奇偶校驗信息。ECC模塊利用糾錯碼(ECC)確定測試的數據是否存在一個或多個錯誤以及錯誤是 否可用ECC修正,測試的數據包括由讀取模塊讀取的數據。隔離模塊響應于ECC模塊確定 錯誤存在于由讀取模塊讀取的數據中且數據不可用ECC修正而從存儲設備的陣列選定存 儲設備。隔離模塊還利用包括生成自奇偶校驗數據的數據(替代數據)和讀取自未被選定 的存儲設備的數據(可用數據)的數據替代讀取自選定的存儲設備的數據,奇偶校驗數據 存儲在一個或多個額外存儲設備上,本發(fā)明還提出了一種包括計算機可讀媒體的計算機程序制品,該計算機可讀媒體 具有計算機可讀的程序代碼,可執(zhí)行該程序代碼以實現檢測和替代失效的數據存儲器的操作。該計算機程序制品包括從存儲設備的陣列讀取數據。該陣列包括兩個或多個存儲設備 和一個或多個額外存儲設備。額外存儲設備存儲來自存儲設備的奇偶校驗信息。該計算機 程序制品還包括利用糾錯碼(ECC)確定測試的數據是否存在一個或多個錯誤以及錯誤是 否可用ECC修正,測試的數據包括由讀取模塊讀取的數據。該計算機程序制品包括響應于ECC模塊確定錯誤存在于數據中且該錯誤不可用 ECC修正而從存儲設備的陣列選定存儲設備。該計算機程序制品還包括利用包括生成自奇 偶校驗數據的數據(替代數據)和讀取自未被選定的存儲設備的數據(可用數據)的數據 替代讀取自選定的存儲設備的數據,奇偶校驗數據存儲在一個或多個額外存儲設備上。該 計算機程序制品還包括確定測試的數據是否不包含錯誤或包含可用ECC修正的錯誤,測試 的數據還包括結合有替代數據的可用數據。本說明書全文所提到的特征、優(yōu)點或者類似措辭并不意味著可利用本發(fā)明實現的 所有的特征和優(yōu)點應該是或本來就包含在本發(fā)明的任一單獨的實施方式中。當然,涉及特 征和優(yōu)點的措辭被理解為意味著與實施方式一起描述的特定的特征、優(yōu)點或者特點包括 在本發(fā)明的至少一種實施方式中。因此,在本說明書全文中,關于特征、優(yōu)點和類似措辭的 討論可(但未必)涉及相同種實施方式。此外,描述的本發(fā)明的特征、優(yōu)點和特點可采用任何合適的方式與一個或多個實 施方式結合。相關領域的技術人員可意識到本發(fā)明可在不具備特定實施方式的一個或多個 具體特征或優(yōu)點的情況下被實施。在其他例子中,可意識到附加特征和優(yōu)點出現在某些實 施方式中,而不是在本發(fā)明的所有實施方式中都出現。通過下面的說明和附加的權利要求,本發(fā)明的這些特征和優(yōu)點將變得更加充分的 顯而易見,或者可以通過按下文所闡述的本發(fā)明的實施而獲悉。
為了更容易地理解本發(fā)明的優(yōu)點,將參考附圖中示出的具體實例方式詳細說明上 文中簡述的本發(fā)明的實施方式。應當理解,這些附圖僅描繪了本發(fā)明的典型實施方式,因此 不能將其理解為對本發(fā)明的范圍的限制,將結合附圖具體且詳細地描述和解釋本發(fā)明,附 圖中圖1是示意性方框圖,示出了根據本發(fā)明的用于固態(tài)存儲設備中的數據管理的系 統(tǒng)的一種實施方式;圖2是示意性方框圖,示出了根據本發(fā)明的固態(tài)存儲設備中的固態(tài)存儲設備控制 器的一種實施方式;圖3是示意性方框圖,示出了根據本發(fā)明的固態(tài)存儲設備中的具有寫入數據管道 和讀取數據管道的固態(tài)存儲控制器的一種實施方式;圖4A是示出了根據本發(fā)明的存儲元件的陣列的一種實施方式的示意性方框圖;圖4B是示出了根據本發(fā)明的存儲元件的陣列的另一種實施方式的示意性方框 圖;圖5是示意性框圖,示出了根據本發(fā)明的增強冗余存儲系統(tǒng)中的數據完整性的裝 置的一種實施方式;圖6是示意性框圖,示出了根據本發(fā)明的增強冗余存儲系統(tǒng)中的數據完整性的裝置的另一種實施方式;圖7是示意性流程圖,示出了根據本發(fā)明的增強冗余存儲系統(tǒng)中的數據完整性的 方法的一種實施方式;圖8是示意性流程圖,示出了根據本發(fā)明的增強冗余存儲系統(tǒng)中的數據完整性的 方法的另一種實施方式;圖9A是示意性框圖,示出了根據本發(fā)明的檢測和替代失效數據存儲器的裝置的 一種實施方式;圖9B是示意性框圖,示出了根據本發(fā)明的檢測和替代失效數據存儲器的裝置的 另一種實施方式;圖10是示意性框圖,示出了根據本發(fā)明的檢測和替代失效數據存儲器的裝置的 又一種實施方式;圖11是示意性框圖,示出了根據本發(fā)明的檢測和替代失效數據存儲器的裝置的 再一種實施方式;圖12是示意性流程圖,示出了根據本發(fā)明的檢測和替代失效數據存儲器的方法 的一種實施方式;圖13是示意性流程圖,示出了根據本發(fā)明的檢測和替代失效數據存儲器的方法 的另一種實施方式;圖14是示意性流程圖,示出了根據本發(fā)明的檢測和替代失效數據存儲器的方法 的又一種實施方式;圖15A是示意性流程圖,示出了根據本發(fā)明的記錄具有錯誤的存儲區(qū)域的方法的 一種實施方式;圖15B是示意性流程圖,示出了根據本發(fā)明的記錄具有錯誤的存儲區(qū)域的方法的 另一種實施方式;圖16是示意性流程圖,示出了根據本發(fā)明的引退擦除塊的方法的一種實施方式;圖17是示意性方框圖,示出了根據本發(fā)明的使用奇偶校驗數據重新配置受保護 的固態(tài)存儲元件陣列的裝置的一種實施方式;圖18是示意性方框圖,示出了根據本發(fā)明的使用奇偶校驗數據重新配置受保護 的固態(tài)存儲元件陣列的裝置的另一種實施方式;圖19是示意性流程圖,示出了根據本發(fā)明的使用奇偶校驗數據重新配置受保護 的固態(tài)存儲元件陣列的方法的一種實施方式;圖20是示意性流程圖,示出了根據本發(fā)明的用于確定額外不可用存儲元件的方 法的一種實施方式。
具體實施例方式為了更顯著地強調功能性單元運行的獨立性,在本說明書中描述的許多功能性單 元已被標示為模塊。例如,模塊可作為硬件電路來實施,所述硬件電路包括自定義VLSI電 路或門陣列、成品半導體(例如邏輯芯片、晶體管或其他分立元件)。模塊也可在可編程硬 件設備(如現場可編程門陣列、可編程陣列邏輯、可編程邏輯設備或類似設備)內實施。模塊還可在由不同類型的處理器運行的軟件中實施。例如,可執(zhí)行代碼的識別模塊可以包括一個或多個計算機指令物理塊或邏輯塊,該計算機指令可以例如被作為對象、 程序或函數來組織。然而,識別模塊的可執(zhí)行文件不必在物理上位于一起,但是可包括存儲 在不同位置的不同命令,當這些命令在邏輯上連接在一起時,所述命令包括所述模塊并實 現所述模塊的指定目標。當然,可執(zhí)行代碼的模塊可以為一個或許多指令,并且甚至可以分布在若干不同 的代碼段中、分布在不同的程序中并可分布在多個存儲設備中。類似地,可以在此在模塊內 識別并示出運算數據,并且可以以任何合適的形式體現所述運算數據并在任意合適類型的 數據結構中組織所述運算數據。所述運算數據可作為單數據集收集,或者可以分布在不同 的位置(包括不同的存儲設備),并且可僅作為電信號至少部分地存在于系統(tǒng)或網絡中。當 模塊或模塊的部分在軟件中實施時,軟件部分被存儲在一個或多個計算機可讀媒體上。本說明書全文所提到的“一種實施方式”、“實施方式”或類似的措辭意味著與實施 方式一起描述的特定的特征、結構或特點包括在本發(fā)明的至少一種實施方式中。因此,在本 說明書全文中,短語“在一種實施方式中”、“在實施方式中”及類似措辭的出現可(但未必) 涉及相同實施方式。提及的計算機可讀媒體可采取任何能夠將機器可讀指令存儲在數字處理設備上 的形式。計算機可讀媒體可通過下述設備體現傳輸線、光盤、數字視頻光盤、磁帶、伯努利 驅動器、磁盤、穿孔卡、閃存、集成電路或其他數字處理裝置存儲設備。此外,描述的本發(fā)明的特征、結構或特點可以以任何合適的方式合并在一種或多 種實施方式中。在下文的說明中,提供了大量的具體細節(jié)以全面理解本發(fā)明的實施方式,所 述具體細節(jié)比如編程、軟件模塊、用戶選擇、網絡事務、數據庫查詢、數據庫結構、硬件模塊、 硬件電路、硬件芯片等等的實例。然而,相關技術領域的技術人員可認識到本發(fā)明可在不 具備一個或多個具體細節(jié)的情況下實施,或者本發(fā)明可結合其他方法、組件、材料等實施。 在其他例子中,為了避免使本發(fā)明的多個方面模糊,并沒有詳細地顯示或描述公知的結構、 材料或操作。此處包括的示意性流程圖大體上是作為邏輯流程圖來列舉的。就這點而言,描述 的順序和標記的步驟是本方法的一種實施方式的指示性說明??稍O想其他在功能上、邏輯 上或效果上與圖示方法的一個或多個步驟(或其中部分)等效的步驟和方法。此外,使用 的格式和符號被用于解釋方法的邏輯步驟并被理解為不限制本方法的范圍。盡管在流程圖 中可使用不同的箭頭類型和線條類型,但這些箭頭類型和線條類型被理解為不限制相應方 法的范圍。實際上,一些箭頭或其他連接器可用于僅表示方法的邏輯流程。例如,箭頭可表 示所描述方法的列舉步驟之間的未指明間期的等待或監(jiān)測時期。此外,特定方法的步驟的 順序可以或可以不嚴格依照所示的對應步驟的順序。固態(tài)存儲系統(tǒng)圖1是示意性框圖,示出了根據本發(fā)明的用于固態(tài)存儲設備內的數據管理的系統(tǒng) 100的一種實施方式。系統(tǒng)100包括固態(tài)存儲設備102、固態(tài)存儲控制器104、寫入數據管道 106、讀取數據管道108、固態(tài)存儲器110、計算機112、客戶端114和計算機網絡116,這些裝 置描述如下。此外,在不同的實施方式中,系統(tǒng)100還包括縮減裝置116、檢測裝置118和重 構裝置120。系統(tǒng)100包括至少一個固態(tài)存儲設備102。在另一種實施方式中,系統(tǒng)100包括兩個或多個固態(tài)存儲設備102。每個固態(tài)存儲設備102可包括非易失性、固態(tài)存儲器110,所述 非易失性、固態(tài)存儲器例如閃存、納米隨機存取存儲器(“納米RAM”或者“NRAM”)、磁電阻式 RAM( "MRAM")>sj]^RAM( “DRAM,,)、相變 RAM( “PRAM,,)、賽道存儲器(Racetrack memory), 憶阻存儲器(Memristor memory)等等。固態(tài)存儲設備102被描述成位于通過計算機網 絡116與客戶端114相連的計算機112內。在一種實施方式中,固態(tài)存儲設備102位于計 算機112內部并且采用系統(tǒng)總線連接,所述系統(tǒng)總線例如快速外圍組件互連(peripheral componentinterconnect express) ( “PCI_e”)總線、串行高級技術附件(“串行 ΑΤΑ”)總 線或類似總線。在另一種實施方式中,固態(tài)存儲設備102位于計算機112外部,并且通過 通用串行總線(“USB”)、電氣與電子工程師協會("IEEE") 1394總線(“火線”)或類似 總線連接。在其他實施方式中,固態(tài)存儲設備102采用下述方式與計算機112相連接PCI express總線、外部電或光總線擴展或者總線網絡解決方案,所述總線網絡解決方案例如無 限帶寬或快速PCI高級交換(“PCIe-AS”)或類似技術。在不同的實施方式中,固態(tài)存儲設備102可以是雙列直插式內存模塊(“DMM”)、 子卡或微型模塊的形式。在另一種實施方式中,固態(tài)存儲設備102是位于機架式刀片 (rack-mounted blade)內的元件。在另一種實施方式中,固態(tài)存儲設備102包含在直接集 成到高級集成裝置(如主板、筆記本電腦、圖形處理器)上的封裝內。在另一種實施方式中, 包括固態(tài)存儲設備102的單獨元件直接集成到高級集成裝置上而不經過中間封裝。固態(tài)存儲設備102包括一個或多個固態(tài)存儲控制器104,每個固態(tài)存儲控制器104 可包括寫入數據管道106和讀取數據管道108,而且,每個固態(tài)存儲設備102包括固態(tài)存儲 器110,這將在下文中結合圖2和圖3詳細說明。系統(tǒng)100包括一臺或多臺連接到固態(tài)存儲設備102的計算機112。計算機112可 以是主機、服務器、存儲區(qū)域網絡(“SAN”)的存儲控制器、工作站、個人計算機、筆記本電 腦、手持式計算機、超級計算機、計算機集群、網絡交換機、路由器或設備、數據庫或存儲設 備、數據采集或數據收集系統(tǒng)、診斷系統(tǒng)、測試系統(tǒng)、機器人、便攜式電子設備、無線設備或 類似設備。在另一種實施方式中,計算機112可以是客戶端,并且固態(tài)存儲設備102自主運 行以應答發(fā)送自計算機112的數據請求。在這種實施方式中,計算機112和固態(tài)存儲設備 102可采用下列方式連接計算機網絡、系統(tǒng)總線或其他適于在計算機112和自主固態(tài)存儲 設備102之間連接的通信手段。在一種實施方式中,系統(tǒng)100包括一個或多個客戶端114,所述一個或多個客戶 端114通過一個或多個計算機網絡116連接到一臺或多臺計算機112??蛻舳?14可以是 主機、服務器、SAN的存儲控制器、工作站、個人計算機、筆記本電腦、手持式計算機、超級計 算機、計算機集群、網絡交換機、路由器或設備、數據庫或存儲設備、數據采集或數據收集系 統(tǒng)、診斷系統(tǒng)、測試系統(tǒng)、機器人、便攜式電子設備、無線設備或類似設備。計算機網絡116 可包括因特網、廣域網(“WAN”)、城域網(“MAN”)、局域網(“LAN”)、令牌環(huán)網、無線網 絡、光纖通道網絡、SAN、網絡附屬存儲(“NAS”)、ESCON或類似網絡、或者是網絡的任意組 合。計算機網絡116還可包括來自IEEE 802系列網絡技術中的網絡,如以太網、令牌環(huán)網、 WiFi, WiMax及類似網絡。計算機網絡116可包括服務器、交換機、路由器、電纜、無線電和其他用于促進計 算機112和客戶端114的網絡連接的設備。在一種實施方式中,系統(tǒng)100包括通過計算機網絡116進行對等通信的多臺計算機112。在另一種實施方式中,系統(tǒng)100包括通過計算機 網絡116進行對等通信的多個固態(tài)存儲設備102。本領域技術人員可認識到其他計算機網 絡116可包括一個或多個計算機網絡116以及相關設備,所述相關設備具有在一個或多個 客戶端114或其他計算機或與一臺或多臺計算機112相連的一個或多個固態(tài)存儲設備102 之間的單個或冗余連接,所述其他計算機具有一個或多個固態(tài)存儲設備102。在一種實施 方式中,系統(tǒng)100包括兩個或多個通過計算機網絡118連接到客戶端116的固態(tài)存儲設備 102,而不包括計算機112。系統(tǒng)100包括縮減裝置116。在圖1中,縮減裝置116被描述為位于固態(tài)存儲設備 102中,但也可位于固態(tài)控制器104、固態(tài)存儲器110、計算機108等中??s減裝置116可位 于一起,或者可以是分布式的。本領域技術人員會認識到縮減裝置116的其他形式。下文 更詳細地描述了縮減裝置116。系統(tǒng)100還包括檢測裝置118。在圖1中,檢測裝置118被描述為位于固態(tài)存儲設 備104中,但也可位于固態(tài)控制器104、固態(tài)存儲器106、計算機108等中。檢測裝置118可 位于一起,或者可以是分布式的。本領域技術人員會認識到檢測裝置118的其他形式。下 文更詳細地描述了檢測裝置118。系統(tǒng)100包括重構裝置120。在圖1中,重構裝置120被描述為位于固態(tài)存儲設備 104中,但也可位于固態(tài)控制器104、固態(tài)存儲器106、計算機108等中。重構裝置120可位 于一起,或者可以是分布式的。本領域技術人員會認識到重構裝置120的其他形式。下文 更詳細地描述了重構裝置120。固態(tài)存儲設備圖2是示出了根據本發(fā)明的固態(tài)存儲設備102內的固態(tài)存儲設備控制器202的一 種實施方式201的示意性框圖,該固態(tài)存儲設備控制器202包括寫入數據管道106和讀取 數據管道108。固態(tài)存儲設備控制器202可包括若干固態(tài)存儲控制器O-NlMa-η,每個固態(tài) 存儲控制器都控制固態(tài)存儲器110。在描述的實施方式中,示出了兩個固態(tài)控制器固態(tài)控 制器O 10 和固態(tài)控制器N 104η,并且每一個控制固態(tài)存儲器llOa-n。在描述的實施方式 中,固態(tài)存儲控制器0 10 控制數據通道,以使得附屬固態(tài)存儲器IlOa存儲數據。固態(tài)存 儲控制器N 10 控制與存儲的數據關聯的索引元數據通道,并且關聯的固態(tài)存儲器IlOn 存儲索引元數據。在替代的實施方式中,固態(tài)存儲設備控制器202包括具有單個固態(tài)存儲 器1 IOa的單個固態(tài)控制器104a。在另一種實施方式中,存在多個固態(tài)存儲控制器l(Ma-n和 關聯的固態(tài)存儲器llOa-n。在一種實施方式中,一個或多個固態(tài)控制器l(Ma-104n-l (與它 們的關聯固態(tài)存儲器IlOa-IlOn-I連接)控制數據,而至少一個固態(tài)存儲控制器104n(與 其關聯固態(tài)存儲器IlOn連接)控制索引元數據。在一種實施方式中,至少一個固態(tài)控制器104是現場可編程門陣列(“FPGA”)并 且控制器功能被編入FPGA。在特定的實施方式中,FPGA是Xilinx 公司的FPGA。在另一種 實施方式中,固態(tài)存儲控制器104包括專門設計為固態(tài)存儲控制器104的組件(如專用集 成電路(“ASIC”)或自定義邏輯解決方案)。每個固態(tài)存儲控制器104通常包括寫入數據 管道106和讀取數據管道108,這兩個管道被結合圖3進一步描述。在另一種實施方式中, 至少一個固態(tài)存儲控制器104由PGA、ASIC和自定義邏輯組件的組合組成。固態(tài)存儲器
固態(tài)存儲器110是非易失性固態(tài)存儲元件216、218、220的陣列,該陣列布置在內 存庫214中并且通過雙向存儲輸入/輸出(I/O)總線210并行訪問。在一種實施方式中, 存儲I/O總線210能夠在任何一個時刻進行單向通信。例如,當將數據寫入固態(tài)存儲器110 時,不能從固態(tài)存儲器110中讀取數據。在另一種實施方式中,數據可同時雙向地流動。然 而,如此處針對數據總線使用的雙向指在相同時間數據僅在一個方向流動的數據通路,但 是,當在雙向數據總線上一個方向流動的數據被阻止時,數據可在所述雙向總線上沿相反 方向流動。固態(tài)存儲元件(如SSS 0. 0216a)通常被配置為電路板上的芯片(一個或多個芯 片塊(die)的封裝)或芯片塊。正如所描述的那樣,固態(tài)存儲元件(如216a)獨立于或半獨 立于其他固態(tài)存儲元件(如218a)運行,即使這些元件被一起封裝在芯片包、芯片包的堆棧 或一些其他封包元件內。正如所描述的,一列固態(tài)存儲元件216、218、220被指定為內存庫 214。正如所描述的,可以有“η”個內存庫2Ha-n并且每個內存庫可以有“m”個固態(tài)存儲 元件216a-m,218a-m,220a-m,從而在固態(tài)存儲器110中可以有nXm個固態(tài)存儲元件216、 218,220的陣列。在一種實施方式中,固態(tài)存儲器IlOa的每個內存庫214(有8個內存庫 214)包括20個固態(tài)存儲元件216、218、220,并且,固態(tài)存儲器IlOn的每個內存庫214(有 一個內存庫214)包括兩個固態(tài)存儲元件216、218。在一種實施方式中,每個固態(tài)存儲元件 216,218,220由單層單元(“SLC”)設備組成。在另一種實施方式中,每個固態(tài)存儲元件 216、218、220由多層單元(“MLC”)設備組成。在一種實施方式中,用于多個內存庫的固態(tài)存儲元件被封包在一起,所述多個內 存庫共享公用存儲I/O總線210a行(如216b、218b、220b)。在一種實施方式中,固態(tài)存儲 元件216、218、220的每個芯片可具有一個或多個芯片塊,而一個或多個芯片垂直堆疊且每 個芯片塊可被獨立存取。在另一種實施方式中,固態(tài)存儲元件(如SSS 0. 0216a)的可具有 在每個芯片塊內的一個或多個虛擬芯片塊、以及在每個芯片內的一個或多個芯片塊、以及 垂直堆疊的一個或多個芯片,且每個虛擬芯片塊可被獨立存取。在再一種實施方式中,固態(tài) 存儲元件SSS 0.0216a可具有在每個芯片塊內的一個或多個虛擬芯片塊以及在每個芯片 內的一個或多個芯片,其中一個或多個芯片塊中的一些或全部垂直堆疊,并且每個虛擬芯 片塊可被獨立存取。在一種實施方式中,每組有四個堆,每堆有兩個芯片塊垂直堆疊,從而形成8個存 儲元件(如SSS 0. O-SSS 0. 8)216a-220a,每個存儲元件位于分離的內存庫2Ha-n內。在 另一種實施方式中,20個存儲元件(如SSS 0. O-SSS 20. 0)216形成邏輯內存庫214a,因 此8個邏輯內存庫中的每一個都具有20個存儲元件(如SSSO. 0-SSS20. 8) 216、218、220。 通過存儲I/O總線210將數據發(fā)送到固態(tài)存儲器110,從而發(fā)送到存儲元件(SSS 0. O-SSS 0. 8)216a、218a、220a的特定組的所有存儲元件。存儲控制總線21 用于選擇特定的內存 庫(如內存庫-0 21 ),從而通過連接到所有內存庫214的存儲I/O總線210接收到的數 據僅被寫入選定的內存庫2Ha。在優(yōu)選實施方式中,存儲I/O總線210由一個或多個獨立I/O總線(包括210aa-m, 210n. a-m的“IIOBa-m”)組成,其中,每一行內的固態(tài)存儲元件共享獨立I/O總線中的一條, 所述獨立I/O總線中的一條并行訪問每個固態(tài)存儲元件216、218、220,從而使得同時訪問 所有的內存庫214。例如,存儲I/O總線210的一個通道可同時訪問每個內存庫2Ha-n的第一固態(tài)存儲元件216a、218a、220a。存儲I/O總線210的第二通道可同時訪問每個內存庫 214a-n的第二固態(tài)存儲元件216b、2im3、220b。固態(tài)存儲元件216、218、220的每一行都被 同時訪問。在一種實施方式中,其中固態(tài)存儲元件216、218、220是多層的(物理堆疊的), 固態(tài)存儲元件216、218、220的所有物理層被同時訪問。正如此處所使用的,“同時”還包括 幾乎同時的訪問,其中,以略有不同的時間間隔訪問設備以避免開關噪聲。在這種情況下, 同時被用于與連續(xù)的或系列的訪問相區(qū)別,其中,命令和/或數據被單獨地相繼發(fā)送。通常,采用存儲控制總線212獨立地選擇內存庫2Ha-n。在一種實施方式中,采用 芯片選通或芯片選擇來選擇內存庫214。當芯片選擇和芯片選通均可用時,存儲控制總線 212可選擇多層固態(tài)存儲元件216、218、220中的一層。在其他實施方式中,存儲控制總線 212使用其他命令來單獨地選擇多層固態(tài)存儲元件216、218、220中的一層。還可通過控制 和地址信息的結合來選擇固態(tài)存儲元件216、218、220,所述控制和地址信息在存儲I/O總 線210和存儲控制總線212上傳輸。在一種實施方式中,每個固態(tài)存儲元件216、218、220被分割成擦除塊,并且每個 擦除塊被分割成頁。固態(tài)存儲元件216、218、220上的擦除塊可被稱為物理擦除塊或PEB。 典型的頁為2000字節(jié)(“2kB”)。在一個實例中,固態(tài)存儲元件(如SSS 0. 0)包括兩個寄 存器并能編程兩頁,從而雙寄存器固態(tài)存儲元件216、218、220具有4kB的容量。20個固態(tài) 存儲元件216、218、220的內存庫214就會有SOkB的相同地址的頁訪問容量,所述相同地址 流出存儲I/O總線210的通道。在固態(tài)存儲元件216、218、220的內存庫214中的這一組80kB大小的頁可稱為邏 輯頁或虛擬頁。類似地,內存庫21 的每個存儲元件216a-m的擦除塊可被分組以形成邏 輯擦除塊或虛擬擦除塊。在優(yōu)選實施方式中,當在固態(tài)存儲元件216、218、220中接收到擦 除命令時,擦除位于固態(tài)存儲元件216、218、220內的頁擦除塊。然而,在固態(tài)存儲元件216、 218,220內的擦除塊、頁、平面層或其他邏輯和物理分區(qū)的大小和數量預計會隨著時間的推 移、隨著技術的進步而變化,可以預期的是,與新配置一致的許多實施例是可能的并與本文 的一般描述相一致。通常,當將包寫入固態(tài)存儲元件216、218、220內的特定位置時,其中,擬將所述包 寫入特定頁內的位置,所述特定頁對應于特定內存庫的特定存儲元件的特定物理擦除塊的 頁,在發(fā)送所述包之后,將物理地址發(fā)送在存儲I/O總線210上。所述物理地址包含足夠的 信息,以使得固態(tài)存儲元件216、218、220將所述包導入頁內的指定位置。由于存儲元件行 (如SSS 0. O-SSS 0. N 216a、218a、220a)上的存儲元件通過存儲I/O總線210a. a內的合適 總線同時被訪問,為了到達合適的頁并避免將所述數據包寫入在存儲元件行(SSS 0. O-SSS 0.N 216a.218a.220a)中相似地址的頁,存儲控制總線212同時選擇內存庫214a,所述內存 庫包括具有要將所述數據包寫入其內的正確頁的固態(tài)存儲元件SSS 0. 0216a。類似地,在存儲I/O總線212上傳輸的讀命令需要在存儲控制總線212上的同步 命令,以選擇單個的內存庫21 和內存庫21 內的合適頁。在優(yōu)選實施方式中,讀命令讀 取整個頁,并且由于在內存庫214內存在許多并行的固態(tài)存儲元件216、218、220,利用讀命 令讀取整個邏輯頁。然而,所述讀命令可分割為子命令,這將在下文中結合內存庫交錯進行 解釋。還可以在寫操作中訪問邏輯頁。可通過存儲I/O總線210發(fā)出擦除塊擦除命令以擦除擦除塊,該擦除塊擦除命令特定的擦除塊。通常,可通過存儲I/O總線210的并行通路 發(fā)送擦除塊擦除命令以擦除邏輯擦除塊,每個擦除塊擦除命令具有特定的擦除塊地址以擦 除特定的擦除塊。同時,通過存儲控制總線212選擇特定的內存庫(如內存庫-021 )以 防止擦除所有的內存庫(內存庫I-N 214b-n)中的類似地址的擦除塊。還可采用存儲I/O 總線210和存儲控制總線212的結合將其他命令發(fā)送到特定位置。本領域技術人員會認識 到采用雙向存儲I/O總線210和存儲控制總線212選擇特定存儲位置的其他方法。在一種實施方式中,將包順序地寫入固態(tài)存儲器110。例如,包流到存儲元件216 的內存庫21 的存儲寫入緩沖器,并且當所述緩沖器飽和時,所述包被編程入指定的邏輯 頁。然后所述包再次填充所述存儲寫入緩沖器,并且當所述存儲緩沖器飽和時,所述包被寫 入下一邏輯頁。所述下一個邏輯頁可位于相同內存庫21 內或可位于另一個內存庫(如 214b)內。這個過程(一個邏輯頁接一個邏輯頁)通常一直持續(xù)到邏輯擦除塊被填滿時。 在另一種實施方式中,當這個過程(一個邏輯擦除塊接一個邏輯擦除塊)持續(xù)時,數據流可 繼續(xù)越過邏輯擦除塊邊界。在讀、修改、寫操作中,在讀操作中定位并讀取與所述對象關聯的數據包。已被修 改的修改對象的數據段并不寫入讀取它們的位置。取而代之,修改的數據段再次被轉化為 數據包并隨后被順序地寫入正在被寫入的邏輯頁中的下一個可用位置。各個數據包的所述 對象索引項被修改為指向包含已修改的數據段的包。所述對象索引中用于與未被修改的相 同對象關聯的數據包的項(或多個項)會包括指向未被修改的數據包的源位置的指針。因 此,如果源對象保持不變(例如保持所述對象的先前版本不變),所述源對象將在所述對象 索引中具有指向所有與最初寫入的一樣的數據包的指針。新對象將在所述對象索引中具有 指向一些源數據包的指針和指向正在被寫入的邏輯頁中的修改的數據包的指針。在復制操作中,所述對象索引包括用于源對象的項,該源對象映射到若干存儲在 固態(tài)存儲器110中的包。當復制完拷貝時,創(chuàng)建了新對象并在將所述新對象映射到源包的 對象索引中創(chuàng)建新項。還將所述新對象寫入固態(tài)存儲器110,所述固態(tài)存儲器具有映射到所 述對象索引中的新項的新對象地址。新對象包可用于確定在源對象中的包,該包被引用以 防在未復制的源對象中發(fā)生改變并以防對象索引丟失或損壞。有利地是,順序地寫入包有助于更平滑地使用固態(tài)存儲器110并允許固態(tài)存儲設 備控制器202監(jiān)測固態(tài)存儲器110內的存儲熱點和不同邏輯頁的層使用狀況。相繼地寫入 包還可有助于建立強大、高效的垃圾收集系統(tǒng),這將在下文中詳細描述。本領域技術人員會 認識到順序地存儲數據包的其他好處。固態(tài)存儲設備控制器在不同的實施方式中,固態(tài)存儲設備控制器202還可包括數據總線204、局部總線 206、緩沖控制器208、緩沖器O-N 22加-11,主控制器224、直接存儲器存取(“DMA”)控制器 226、存儲器控制器228、動態(tài)存儲器陣列230、靜態(tài)隨機存儲器陣列232、管理控制器234、管 理總線236、連接系統(tǒng)總線MO的網橋238和雜項邏輯塊對2,這些將在下文中描述。在其 他實施方式中,系統(tǒng)總線240與一個或多個網絡接口卡(“NIC”) 244相連接,這些網絡接口 卡中的一些可包括遠程DMA (“RDMA”)控制器對6、一個或多個中央處理單元(“CPU”)M8、 一個或多個外部存儲器控制器250和關聯的外部存儲器陣列252、一個或多個存儲控制器 254對等控制器256和專用處理器258,這些將在下文描述。連接到系統(tǒng)總線MO的組件244-258可位于計算內112內或者可以為其他設備。通常,固態(tài)存儲控制器104通過存儲I/O總線210與固態(tài)存儲器110進行數據通 信。在典型的實施方式中,固態(tài)存儲器布置在內存庫214內,且每個內存庫214包括多個并 行訪問的存儲元件216、218、220,存儲I/O總線210是多條總線的陣列,每一條總線用于內 存庫214內的存儲元件216、218、220的每一行。正如此處所使用的,術語“存儲I/O總線” 可指一條存儲I/O總線210或多條獨立的數據總線204的陣列。在優(yōu)選實施方式中,訪問 存儲元件的行(如216、218a、220a)的每條存儲I/O總線210可包括在存儲元件216、218a、 220a的行中訪問的存儲部(如擦除塊)的邏輯-物理映射。如果第一存儲部失效、部分失 效、不可訪問或出現一些其他問題時,這種映射(或錯誤塊重映射)允許映射到存儲部的物 理地址的邏輯地址重映射到不同的存儲部。還可通過系統(tǒng)總線M0、網橋238、局部總線206、緩沖器22并最終通過數據總線 204將數據從請求設備155傳送到固態(tài)存儲控制器104。數據總線204通常連接到一個或 多個由緩沖控制器208控制的緩沖器22加-11。緩沖控制器208通??刂茢祿木植靠偩€ 206傳遞到緩沖器222并通過數據總線204傳遞到管道輸入緩沖器306和輸出緩沖器330。 為了解決時鐘域差異、防止數據沖突等等,緩沖控制器222通??刂圃诰彌_器222中暫時存 儲來自請求設備的數據的方式,并控制此后傳送給數據總線204(或相反)的方式。緩沖控 制器208通常與主控制器224結合使用以協調數據流。當數據到達時,所述數據會到達系 統(tǒng)總線240并通過網橋238傳遞給局部總線206.通常,數據在主控制器2 和緩沖控制器208的指引下從局部總線206傳遞給一 個或多個數據緩沖器222。然后,所述數據通過固態(tài)控制器104從緩沖器222流向數據總 線204并到達固態(tài)存儲器110(如NAND閃存或其他存儲媒體)。在優(yōu)選實施方式中,數據 和與所述數據一起到達的關聯的帶外元數據(“對象元數據”)采用一個或多個數據通道 送達,所述數據通道包括一個或多個固態(tài)存儲控制器104a-l(Mn-l和關聯的固態(tài)存儲器 IlOa-IIOn-I,而至少一個通道(固態(tài)存儲控制器104η、固態(tài)存儲器110η)用于帶內元數據 (如索引信息和其他固態(tài)存儲設備102內部生成的元數據)。局部總線206通常為雙向總線或總線組,所述雙向總線或總線組允許數據和命令 在固態(tài)存儲設備控制器202內部的設備間通信,也允許命令和數據在固態(tài)存儲設備102內 部的設備和與系統(tǒng)總線240連接的設備244-258之間通信。網橋238有助于在局部總線 206和系統(tǒng)總線240之間的通信。本領域技術人員會認識到其他實施方式,如總線對0、206、 204,210和網橋238的環(huán)結構或交換式星形配置和功能。系統(tǒng)總線240通常是計算機、安裝有或連接有固態(tài)存儲設備102的其他設備的總 線。在一種實施方式中,系統(tǒng)總線240可以為PCI-e總線、串行高級技術附件(“串行ΑΤΑ”) 總線、并行ATA或類似總線。在另一種實施方式中,系統(tǒng)總線240為外部總線,例如小型計 算機系統(tǒng)接口( “SCSI”)、防火墻、光纖通道、USB、PCIe-As或類似總線。固態(tài)存儲設備102 可被封裝為適于置于設備內部或被封裝為外部連接設備。固態(tài)存儲設備控制器202包括控制固態(tài)存儲設備102內較高級別功能的主控制器 224。在不同的實施方式中,主控制器2M通過解釋對象請求和其他請求來控制數據流,指 導創(chuàng)建索引,以將與數據關聯的對象標識符映射到關聯的數據或協調的DMA請求等的物理 地址。主控制器2M完全地或部分地控制此處描述的許多功能。
在一種實施方式中,主控制器2M采用嵌入式控制器。在另一種實施方式中,主控 制器2M采用局部存儲器,如動態(tài)存儲器陣列230 (動態(tài)隨機存取存儲器“DRAM”)、靜態(tài)存儲 器陣列323(靜態(tài)隨機存取存儲器“SRAM”)等。在一種實施方式中,采用主控制器2M控制 局部存儲器。在另一實施方式中,主控制器通過存儲器控制器2 訪問局部存儲器。在另一 種實施方式中,所述主控制器運行Linux服務器并可支持各種常用服務器接口,如萬維網、 超文本標記語言(“HTML”)等。在另一種實施方式中,主控制器2M采用納米處理器???采用可編程或標準邏輯或上述控制器類型的任意組合來構建主控制器224。本領域技術人 員會認識到主控制器的許多實施方式。在一種實施方式中,其中存儲設備152/固態(tài)存儲設備控制器202管理多個數據 存儲設備/固態(tài)存儲器llOa-n,主控制器2M在內部控制器(如固態(tài)存儲控制器l(Ma-n) 之間分配工作負載。例如,主控制器2M可分割將要被寫入數據存儲設備(如固態(tài)存儲器 110a-n)的對象,使得每個附屬的數據存儲設備存儲所述對象的一部分。這種特征是允許更 快地存儲和訪問對象的性能增強。在一種實施方式中,主控制器2M利用FPGA實施。在另 一種實施方式中,位于主控制器224內的固件可通過管理總線236、經由網絡連接到NIC244 的系統(tǒng)總線240或其他連接到系統(tǒng)總線MO的設備更新。在一種實施方式中,管理對象的主控制器2M仿真塊存儲,從而使得計算機102或 其他連接到存儲設備152/固態(tài)存儲設備102的設備將存儲設備152/固態(tài)存儲設備102視 為塊存儲設備并將數據發(fā)送給存儲設備152/固態(tài)存儲設備120中的特定物理地址。然后, 主控制器2M分割塊并像存儲對象一樣存儲數據塊。然后,主控制器2M將塊和與塊一起 發(fā)送的物理地址映射到由主控制器2M確定的實際位置。映射存儲在對象索引中。通常, 對于塊仿真來說,在計算機112、客戶端114或其他希望將存儲設備152/固態(tài)存儲設備102 當成塊存儲設備來使用的設備的驅動器中提供有塊設備應用程序接口( “API”)。在另一種實施方式中,主控制器224與NIC控制器244和嵌入式RDMA控制器246 協同運行以提供數據和命令集的準時RDMA傳輸。NIC控制器244可隱藏在非透明端口后以 使得能夠使用自定義的驅動器。此外,客戶端114上的驅動器可通過采用標準堆棧API并 與NIC 244結合運行的I/O存儲驅動器訪問計算機網絡118。在一種實施方式中,主控制器224也是獨立驅動冗余陣列(“RAID”)控制器。當 數據存儲設備/固態(tài)存儲設備120與一個或多個其他數據存儲設備/固態(tài)存儲設備120聯 網時,主控制器2 可以是用于單層RAID、多層RAID、漸進式RAID等的RAID控制器。主控 制器2 還允許一些對象存儲在RAID陣列內而其他對象不通過RAID存儲。在另一種實施 方式中,主控制器2M可以是分布式RAID控制器元件。在另一種實施方式中,主控制器2M 可包括許多RAID、分布式RAID和另行描述的其他功能。在一種實施方式中,主控制器2 控制RAID類結構中的數據存儲,其中,奇偶校驗信息存儲在邏輯頁的一個或多個存儲元件 216,218,220中,奇偶校驗信息保護存儲在相同邏輯頁的其他存儲元件216、218、220中的 數據。在一種實施方式中,主控制器2M與單個或多個網絡管理器(如交換機)協同運 行以建立路由、平衡帶寬使用率、故障轉移等。在另一種實施方式中,主控制器2M與集成 專用邏輯器件(通過局部總線206)和關聯的驅動器軟件協同運行。在另一種實施方式中, 主控制器2M與附屬專用處理器258或邏輯器件(通過外部系統(tǒng)總線M0)和關聯的驅動器軟件協同運行。在另一種實施方式中,主控制器2M與遠程專用邏輯器件(通過計算機 網絡118)和關聯的驅動器軟件協同運行。在另一種實施方式中,主控制器2M與局部總線 206或附屬于硬盤驅動器(“HDD”)存儲控制器的外部總線協同運行。在一種實施方式中,主控制器2M與一個或多個存儲控制器2M通信,其中存儲設 備/固態(tài)存儲設備102可表現為通過SCSI總線、因特網SCSI( “iSCSI”)、光纖通道等連接 的存儲設備。同時,存儲設備/固態(tài)存儲設備102可自主地管理對象并可表現為對象文件 系統(tǒng)或分布式對象文件系統(tǒng)。還可通過對等控制器256和/或專用處理器258訪問主控制 器2M。在另一種實施方式中,主控制器224與自主集成管理控制器協同運行以周期性地 驗證FPGA碼和/或控制器軟件、在運行(復位)時驗證FPGA碼和/或在通電(復位)期 間驗證控制器軟件、支持外部復位請求、支持由于檢查超時的復位請求,并支持電壓、電流、 功率、溫度及其他環(huán)境測量和閾值中斷設置。在另一種實施方式中,主控制器2M管理垃圾 收集以釋放擦除塊進行再次使用。在另一種實施方式中,主控制器2M管理耗損均衡。在 另一種實施方式中,主控制器2M允許數據存儲設備/固態(tài)存儲設備102被分割成多個邏 輯設備并允許基于分區(qū)的媒體加密。在又一種實施方式中,主控制器2M支持具有高級的、 多位的ECC修正的固態(tài)存儲控制器104。本領域技術人員會認識到存儲控制器152內,或更 具體地說位于固態(tài)存儲設備102內的主控制器224的其他特征和功能。在一種實施方式中,固態(tài)存儲設備控制器202包括存儲器控制器228,該存儲器控 制器2 控制動態(tài)隨機存儲器陣列230和/或靜態(tài)隨機存儲器陣列232。如上所述,存儲器 控制器2 可獨立于主控制器2M使用或與主控制器2M集成使用。存儲器控制器2 通 ??刂埔恍╊愋偷囊资源鎯ζ?,如DRAM(動態(tài)隨機存儲器陣列230)和SRAM(靜態(tài)隨機存 儲器陣列23 。在其他實例中,存儲器控制器2 還控制其他存儲器類型,如電可擦可編程 序只讀存儲器(“EEPR0M”)等。在其他實施方式中,存儲器控制器2 控制兩種或多種存 儲器類型且存儲器控制器2 可包括不止一個控制器。通常,存儲器控制器2 在可行情 況下控制盡可能多的SRAM232,并且通過DRAM 230補足SRAM 232。在一種實施方式中,所述對象索弓I存儲在存儲器230、232中并被周期性地卸載到 固態(tài)存儲器IlOn或其他非易失性存儲器的通道內。本領域技術人員會認識到存儲器控制 器228、動態(tài)存儲器陣列230和靜態(tài)存儲器陣列232的其他運用和配置。在一種實施方式中,固態(tài)存儲設備控制器202包括DMA控制器226,該DMA控制器 226控制在下列設備之間的DMA操作存儲設備/固態(tài)存儲設備102、一個或多個外部存儲 器控制器250、關聯的外部存儲器陣列252和CPU 2480應該注意到,外部存儲器控制器250 和外部存儲器陣列252之所以被稱為外部是因為它們位于存儲設備/固態(tài)存儲設備102的 外部。此外,DMA控制器2 還可通過NIC 244和關聯的RDMA控制器246控制請求設備的 RDMA操作。在一種實施方式中,固態(tài)存儲設備控制器202包括連接到管理總線236的管理控 制器234。通常,管理控制器234管理存儲設備/固態(tài)存儲設備102的環(huán)境指標和狀態(tài)。管 理控制器234可通過管理總線236監(jiān)測設備溫度、風扇轉速、電力供應設置等。管理控制器 可支持電可擦可編程序只讀存儲器(“EEPR0M”)的讀取和編程以存儲FPGA碼和控制器軟 件。通常,管理總線236連接到存儲設備/固態(tài)存儲設備102內的不同組件。管理控制器234可通過局部總線206進行警報、中斷等的通信或可包括單獨的與系統(tǒng)總線240或其他總 線的連接。在一種實施方式中,管理總線236為內部集成電路(“I2C”)總線。本領域技術 人員會認識到通過管理總線236連接到存儲設備/固態(tài)存儲設備102的組件的管理控制器 234的其他相關的功能和運用。在一種實施方式中,固態(tài)存儲設備控制器202包括雜項邏輯塊M2,該雜項邏輯塊 242可被定制為專用。通常,當使用FPGA或其他可配置控制器配置固態(tài)設備控制器202或 主控制器224時,可基于特定應用、用戶需求、存儲需求等而包括定制邏輯塊。數據管道圖3是示出了根據本發(fā)明的位于固態(tài)存儲設備102內的固態(tài)存儲設備控制器104 的一種實施方式300的示意性框圖,該固態(tài)存儲設備控制器具有寫入數據管道106和讀取 數據管道108。實施方式300包括數據總線204、局部總線206和緩沖控制器208,這些設備 大體上類似于相對于圖2的固態(tài)存儲設備控制器202描述的設備。所述寫入數據管道包括 封包器302和糾錯碼(“ECC”)發(fā)生器304。在其他實施方式中,所述寫入數據管道包括輸 入緩沖器306、寫入同步緩沖器308、寫入程序模塊310、壓縮模塊312、加密模塊314、垃圾收 集器旁路316(部分位于所述讀取數據管道內)、媒體加密模塊318和寫入緩沖器320。讀 取數據管道108包括讀取同步緩沖器328、ECC糾錯模塊322、解包器324、對齊模塊3 和 輸出緩沖器330。在另一種實施方式中,讀取數據管道108可包括媒體解密模塊332、垃圾 收集器旁路316的一部分、解密模塊334、解壓縮模塊336和讀取程序模塊338。固態(tài)存儲 控制器104還可包括控制和狀態(tài)寄存器340和控制隊列342、內存庫交錯控制器344、同步 緩沖器;346、存儲總線控制器348及多路轉換器(“MUX”) 350。固態(tài)控制器104的組件和關 聯的寫入數據管道106和讀取數據管道108描述如下。在其他實施方式中,可采用同步固 態(tài)存儲器110并且可不使用同步緩沖器308、328。寫入數據管道寫入數據管道106包括封包器302,該封包器直接地或間接地通過另一寫入數據 管道106的級接收將要被寫入固態(tài)存儲器的數據或元數據段,并創(chuàng)建一個或多個大小適于 固態(tài)存儲器110的包。所述數據或元數據段通常是對象的一部分,但也可包括整個對象。在 另一種實施方式中,所述數據段是數據塊的一部分,但也可包括整個數據塊。通常,對象接 收自計算機112、客戶端114或其他計算機或設備并被以流向固態(tài)存儲設備102或計算機 112的數據段的形式傳送給固態(tài)存儲設備102。數據段也可被稱為另一名稱,如數據包裹, 本文所提及的數據段包括對象或數據塊的全部或一部分。每個對象被存為一個或多個包。每個對象可具有一個或多個容器包。每個包包含 包頭。所述包頭可包括包頭類型字段。類型字段可包括數據、對象屬性、元數據、數據段定 界符(多包)、對象結構、對象連接及類似物。所述包頭還可包括關于包的大小的信息,如包 內的數據的字節(jié)數。所述包的長度可由包類型確定。包頭可以包括確定包與對象關系的信 息。一個實例可能是利用數據包包頭的偏移值來確定對象內數據段的位置。本領域技術人 員會認識到其他包含在由封包器302添加到數據上的包頭內的信息和其他添加到數據包 的信息。每個包包括包頭,還可能包括來自所述數據或元數據段的數據。每個包的包頭包 括用于將包與包所屬對象聯系起來的相關信息。例如,所述包頭可包括對象標識符和偏移值,該偏移值表明了形成數據包的數據段、對象或數據塊。所述包頭還可包括存儲總線控制 器348用以存儲包的邏輯地址。所述包頭還可包括關于包的大小的信息,如包內字節(jié)數。 所述包頭還可包括序列號,當重建數據段或對象時,該序列號識別數據段相對于對象內的 其他包所屬的位置。所述包頭可包括包頭類型字段。類型字段可包括數據、對象屬性、元數 據、數據段定界符(多包)、對象結構、對象連接及類似物。本領域技術人員會認識到其他包 含在由封包器302加到數據或元數據上的包頭內的信息和其他添加到數據包的信息。寫入數據管道106包括ECC發(fā)生器304,該ECC發(fā)生器為一個或多個接收自封包 器302的包生成一個或多個糾錯碼(“ECC”)。ECC發(fā)生器304通常采用糾錯算法生成ECC, 該ECC與包一起存儲。與包一起存儲的ECC通常用于檢測和糾正由于傳送和存儲而弓I入數 據中的錯誤。在一種實施方式中,包作為長度為N的未編碼塊流入ECC發(fā)生器304。計算 并添加長度為S的并發(fā)位,并作為長度為N+S的編碼塊輸出。長度為N的數據包結合并發(fā) 位S形成了 ECC組塊或ECC塊。N和S的值依賴于算法的特點,該算法被選擇用于實現特定 的性能、效率和魯棒性指標。在優(yōu)選實施方式中,在ECC組塊和包之間并沒有固定關系;包 可包括不止一個ECC組塊;ECC組塊可包括不止一個包;且第一包可在ECC組塊內的任何位 置終止而第二包可始于相同ECC組塊內的第一包終止之后的位置。在優(yōu)選實施方式中,ECC 算法不能被動態(tài)修改。在優(yōu)選實施方式中,與數據包一起存儲的ECC足夠穩(wěn)定以在兩個以 上的位內糾正錯誤。有利地是,采用允許不止一位的修正或甚至是兩位修正的穩(wěn)健ECC算法允許延長 固態(tài)存儲器110的使用壽命。例如,如果固態(tài)存儲器110內使用閃存作為存儲媒體,閃存在 每個擦除周期內可被寫入大約100000次不出現錯誤。這種使用期限可通過穩(wěn)健ECC算法 延長。固態(tài)存儲設備102載有ECC發(fā)生器304和相應的ECC糾錯模塊322,固態(tài)存儲設備 102可在其內部糾正錯誤并具有比采用不甚穩(wěn)健的ECC算法(如單位錯誤修正)更長的使 用壽命。然而,在其他實施方式中,ECC發(fā)生器304可采用不甚穩(wěn)健的算法并可修正單位或 雙位錯誤。在另一種實施方式中,固態(tài)存儲設備110可包括不甚可靠的存儲器以增加容量, 所述不甚可靠的存儲器例如多級單元(“MLC”)閃存,所述不甚可靠的存儲器在沒有穩(wěn)健 ECC算法的情況下可能不是充分可靠的。在一種實施方式中,寫入數據管道包括輸入緩沖器306,該輸入緩沖器接收將要被 寫入固態(tài)存儲器110的數據段并存儲輸入的數據段直到寫入數據管道106的下一級,例如 封包器302(或其他更復雜寫入數據管道106的其他級)準備處理下一個數據段。通過使 用適當容量的數據緩沖器,輸入緩沖器306通常允許寫入數據管道106接收和處理數據段 之間存在速率差異。輸入緩沖器306還允許數據總線204將數據傳送給寫入數據管道106 的速率大于寫入數據管道106能支持的速率,從而提高數據總線204運行的效率。通常,當 寫入數據管道106不包括輸入緩沖器306時,緩沖功能在別處(如固態(tài)存儲設備102)實 現,但所述別處位于寫入數據管道106外、位于計算機內,例如當使用遠程直接存儲器讀取 (“RMDA”)時,如在網絡接口卡(“NIC”)內或其他設備上。在另一種實施方式中,寫入數據管道106還包括寫入同步緩沖器308,該寫入同步 緩沖器308在將包寫入固態(tài)存儲器110之前緩沖接收自ECC發(fā)生器304的包。寫入同步緩 沖器308位于本地時鐘域和固態(tài)存儲時鐘域之間的邊界上,并且提供緩沖以解決時鐘域差 異。在其他實施方式中,可采用同步固態(tài)存儲器110,并可移除同步緩沖器3083觀。
在一種實施方式中,寫入數據管道106還包括媒體加密模塊318,該媒體加密模塊 318直接地或間接地從封包器302接收一個或多個包,并在將包發(fā)送給ECC發(fā)生器304之前 利用對固態(tài)存儲設備102唯一的加密密鑰加密所述一個或多個包。通常,整個包(包括包 頭)都被加密。在另一種實施方式中,并不加密包頭。在本文中,加密密鑰被理解為意味著 在集成固態(tài)存儲器110的實施方式外管理的秘密加密密鑰,這種實施方式需要加密保護。 媒體加密模塊318和相應的媒體解密模塊332為存儲在固態(tài)存儲器110中的數據提供安全 等級。例如,當數據利用媒體加密模塊318加密時,如果固態(tài)存儲器110連接到不同的固態(tài) 存儲控制器104、固態(tài)存儲設備102或計算機112,通常,在不使用在將數據寫入固態(tài)存儲器 110期間使用的相同加密密鑰的情況下,不經過合理的努力,則不能讀取固態(tài)存儲器110的 內容。在典型的實施方式中,固態(tài)存儲設備102不將所述加密密鑰存儲在非易失性存儲 器中并且不允許從外部訪問所述加密密鑰。在初始化期間為固態(tài)存儲控制器104提供加 密密鑰。固態(tài)存儲設備102可使用并存儲非秘密性加密臨時值,該非秘密性加密臨時值與 加密密鑰結合使用。不同的臨時值可用于存儲每個包。為了加強加密算法所提供的保護, 可利用唯一臨時值在多個包之間分割數據段。所述加密密鑰可接收自客戶端114、計算機 112、密鑰管理器或其他管理固態(tài)存儲控制器104使用的加密密鑰的設備。在另一種實施方 式中,固態(tài)存儲器110可具有兩個或多個分區(qū),并且固態(tài)存儲控制器104顯得就像有兩個或 多個固態(tài)存儲控制器104,每一個固態(tài)存儲控制器104在固態(tài)存儲器110內的單個分區(qū)上運 行。在這種實施方式中,唯一的媒體加密密鑰可與每個分區(qū)一起使用。在另一種實施方式中,寫入數據管道106還包括加密模塊314,該加密模塊314在 將數據段發(fā)送給封包器302之前直接地或間接地加密接收自輸入緩沖器306的數據或元 數據段,利用與數據段一同接收的加密密鑰來加密數據段。加密模塊314與媒體加密模塊 318的區(qū)別在于加密模塊318用以加密數據的加密密鑰對存儲在固態(tài)存儲設備102內的 所有數據來說不是共同的,并在對象基礎上可能不同,并且加密密鑰可不與數據段一起接 收(如下所述)。例如,用于將要被加密模塊318加密的數據段的加密密鑰可與數據段一起 被接收,或可作為命令的一部分接收以寫入數據段所屬的對象。固態(tài)存儲設備102可為每 個與加密密鑰結合使用的對象包使用并存儲非秘密性加密臨時值。不同的臨時值可用于存 儲每個包。為了加強加密算法所提供的保護,可利用唯一臨時值在多個包之間分割數據段。 在一種實施方式中,媒體加密模塊318使用的臨時值與加密模塊314使用的臨時值相同。加密密鑰可接收自客戶端114、計算機112、密鑰管理器或其他保存用于加密數據 段的加密密鑰的設備。在一種實施方式中,加密密鑰被從固態(tài)存儲設備102、計算機112、客 戶端114或其他外部代理中的一個傳送到固態(tài)存儲控制器104,所述外部代理能夠執(zhí)行工 業(yè)標準方法以安全地傳送并保護私有密鑰和公共密鑰。在一種實施方式中,加密模塊318利用與第一包一起接收的第一加密密鑰加密第 一包,并利用與第二包一起接收的第二加密密鑰加密第二包。在另一種實施方式中,加密模 塊318利用與第一包一起接收的第一加密密鑰加密第一包,而將第二數據包傳遞給下一級 而不加密。有利地是,包括在固態(tài)存儲設備102的寫入數據管道106內的加密模塊318允 許對象接對象或段接段的數據加密,而不需要單獨的文件系統(tǒng)或其他外部系統(tǒng)來追蹤不同 的用于存儲相應對象或數據段的加密密鑰。每個請求設備155或相關密鑰管理器獨立地管理加密密鑰,該加密密鑰僅用于加密請求設備155發(fā)送的對象或數據段。在另一種實施方式中,寫入數據管道106包括壓縮模塊312,該壓縮模塊312在將 數據段發(fā)送給封包器302之前為元數據段壓縮數據。壓縮模塊312通常利用本領域技術人 員熟知的壓縮例程來壓縮數據或元數據段以減少段的的存儲大小。例如,如果數據段包括 一串512個0位,壓縮模塊312可用表明512個0位的編碼或令牌來替換這512個0位,其 中,所述編碼被壓縮地比512個0位的空間更多。在一種實施方式中,壓縮模塊312利用第一壓縮例程壓縮第一段,而輸送第二段 且未經壓縮。在另一種實施方式中,壓縮模塊312利用第一壓縮例程壓縮第一段并利用第 二壓縮例程壓縮第二段。在固態(tài)存儲設備102內具有這種靈活性是有利的,以便客戶端114 或其他將數據寫入固態(tài)存儲設備102內的設備每一個都可指定壓縮程序,或以便一個設備 指定壓縮程序而另一個設備指定無壓縮。還可根據每個對象類型或對象類基礎的默認設置 來選擇壓縮例程。例如,特定對象的第一對象可以能夠廢除默認壓縮例程設置,相同對象類 和對象類型的第二對象可采用默認壓縮例程,而相同對象類和對象類型的第三對象可不壓 縮。在一種實施方式中,寫入數據管道106包括垃圾收集器旁路316,該垃圾收集器旁 路316接收來自讀取數據管道的108(在垃圾收集系統(tǒng)中作為數據旁路的一部分)的數據 段。垃圾收集系統(tǒng)通常標記不再有效的包,不再有效的原因通常是由于包被標記為刪除或 包已被修改且修改過的數據存儲在不同的位置。在某一時刻,垃圾收集系統(tǒng)確定存儲器的 某個區(qū)域(例如邏輯擦除塊)可被恢復。之所以確定某個區(qū)域可被恢復可能是由于缺乏 可用的存儲空間、標記為無效的的數據百分比達到閾值、有效數據的合并、存儲器的該區(qū)域 的錯誤檢出率達到閾值或基于數據分布提高性能等。垃圾收集算法可考慮大量的因素以確 定何時存儲器的區(qū)域將要被恢復。一旦存儲器的區(qū)域被標記為恢復,該區(qū)域內的有效包通常必須被重新存放。垃圾 收集器旁路316允許將包讀入讀取數據管道108,并允許然后將包直接傳送給寫入數據管 道106而不會將包路由出固態(tài)存儲控制器104。在一種實施方式中,從正被恢復的邏輯擦除 塊恢復的有效包與來自客戶端116的輸入包混合。在另一種實施方式中,從正被恢復的邏 輯擦除塊恢復的有效包存儲在一起,而不散布輸入的數據包。在優(yōu)選實施方式中,垃圾收集 器旁路316是運行在固態(tài)存儲設備102內的自主垃圾收集系統(tǒng)的一部分。這允許固態(tài)存儲 設備102管理數據,從而數據系統(tǒng)地傳播到整個固態(tài)存儲器110以提升性能、數據可靠性并 避免過度使用和不充分使用固態(tài)存儲器110的任何一個位置或區(qū)域,并且延長了固態(tài)存儲 器110的使用壽命。垃圾收集器旁路316協調將數據段插入寫入數據管道106,數據導管106具有其他 由客戶端116或其他設備寫入的數據段。在描述的實施方式中,垃圾收集器旁路316位于 寫入數據管道106內的封包器302之前、讀取數據管道108內的解包器314之后,但也可位 于寫入和讀取數據管道106、108內的其他位置??稍谇逑磳懭牍艿?06期間使用垃圾收集 器旁路316,以填充邏輯頁的剩余部分,從而提升固態(tài)存儲器110內的存儲效率并因此降低 垃圾收集的頻率。在一種實施方式中,寫入數據管道106包括寫入緩沖器320,該寫入緩沖器320為 了高效的寫操作而緩沖數據。通常,寫入緩沖器320包括用于包的足夠容量,以填充固態(tài)存儲器110內的至少一個邏輯頁。這允許寫操作將數據的整個頁沒有中斷地發(fā)送給固態(tài)存儲 器110。通過將寫入數據管道106的寫入緩沖器320和讀取數據管道108內的緩沖器的容 量選為與固態(tài)存儲器110內存儲寫入緩沖器的容量同樣大小的容量或比固態(tài)存儲器110內 存儲寫入緩沖器的容量大,寫入和讀取數據的效率更高,因為單個寫入命令可被設計為將 數據的整個邏輯頁發(fā)送給固態(tài)存儲器110,而不是多條命令。當填充寫入緩沖器320時,固態(tài)存儲器110可用于其他讀操作。這是有利的,原因 是當將數據寫入存儲寫入緩沖器時和注入存儲寫入緩沖器的數據失速時,具有更小的寫 入緩沖器的或不具有寫入緩沖器的其他固態(tài)設備可綁定固態(tài)存儲器。讀操作會被攔截直到 整個存儲寫入緩沖器被填充或被編程。用于不具有寫入緩沖器或小寫入緩沖器的系統(tǒng)的另 一種方法是清洗未滿的存儲寫入緩沖器以使得能進行讀取。同樣地,由于需要多個寫入/ 編程周期來填充頁,因此這種方法的效率低。對于描述的具有容量比邏輯頁容量大的寫入緩沖器320的實施方式,單個的寫入 命令(包括大量子命令)的后續(xù)命令可以是單個程序命令,以將來自每個固態(tài)存儲元件 216、218、220中的存儲寫入緩沖器的數據頁傳遞給每個固態(tài)存儲元件216、218、220中的指 定頁。這種技術帶來的好處是減少了部分頁編程,眾所周知,這降低了數據的可靠性和穩(wěn) 定性并在當緩沖器填充時,為讀命令和其他命令釋放了目標內存庫。在一種實施方式中,寫入緩沖器320為交替緩沖器(ping-pong buffer),其中,所 述交替緩沖器的一側被填充,然后當所述交替緩沖器的另一側被填充時,所述交替緩沖器 的一側被指定在適當的時間傳送數據。在另一種實施方式中,寫入緩沖器320包括先進先 出(“FIFO”)寄存器,該FIFO寄存器的容量比數據段邏輯頁的容量大。本領域技術人員 會認識到允許在將數據寫入固態(tài)存儲器110之前存儲數據邏輯頁的其他寫入緩沖器320配 置。在另一種實施方式中,寫入緩沖器320的容量比邏輯頁小,從而少于一頁的信息 可被寫入固態(tài)存儲器110內的存儲寫入緩沖器。在這種實施方式中,為了防止寫入數據管 道106的失速阻止讀操作,采用需要從一個位置移動到另一個位置的垃圾收集系統(tǒng)將數據 排隊,這個過程是垃圾收集進程的一部分。在寫入數據管道106中的數據失速的情況下,可 通過垃圾收集器旁路316將所述數據供應給寫入緩沖器320并然后將所述數據供應給固態(tài) 存儲器110中的存儲寫入緩沖器,從而在編程所述數據之前填充邏輯頁的頁面。這樣,寫入 數據管道106中的數據失速不會使讀取自固態(tài)存儲設備106的數據失速。在另一種實施方式中,寫入數據管道106包括寫入程序模塊310,該寫入程序模塊 310具有寫入數據管道106內的一個或多個用戶可定義的功能。寫入程序模塊310允許用 戶自定義寫入數據管道106。用戶可基于特定數據請求或應用自定義寫入數據管道106。當 固態(tài)存儲控制器104為FPGA時,用戶可相對輕松地編程具有自定義命令和功能的寫入數據 管道106。用戶還可利用寫入程序模塊310以使ASIC包括自定義功能,然而自定義ASIC可 能比使用FPGA時更困難。寫入程序模塊310可包括緩沖器和旁路機制,以允許第一數據段 在寫入程序模塊310中執(zhí)行,而第二數據段通過寫入數據管道106可繼續(xù)傳送。在另一種 實施方式中,寫入程序模塊310可包括能通過軟件編程的處理器內核。應注意,寫入程序模塊310被示為位于輸入緩沖器306和壓縮模塊312之間,然而 寫入程序模塊310可位于寫入數據管道106內的任何位置,并且可分布在不同的級302-320之間。此外,在不同的、已編程的且獨立運行的級302-320之間可分布有多個寫入程序模塊 310。此外,級302-320的順序可以改變。本領域技術人員會認識到基于特定用戶需求的級 302-320的順序的可行改變。讀取數據管道讀取數據管道108包括ECC糾錯模塊322,該ECC糾錯模塊322通過使用與請求包 中的每個ECC組塊一起存儲的ECC來確定接收自固態(tài)存儲器110的請求包的ECC組塊中是 否存在錯誤。然后,如果存在任何錯誤并且所述錯誤可使用ECC修正,則ECC糾錯模塊322 修正請求包中的任何錯誤。例如,如果ECC能夠探測6位錯誤但只能修正3位錯誤,那么ECC 糾錯模塊322修正具有3位錯誤的請求包ECC組塊。ECC糾錯模塊322通過把出錯的位改 變?yōu)檎_的1或0狀態(tài)來修正出錯的位,從而請求數據包與其被寫入固態(tài)存儲器110并且 為包生成ECC時一致。如果ECC糾錯模塊322確定請求包包含了比ECC能修正的位數多的出錯位,則ECC 糾錯模塊322不能修正請求包中毀壞的ECC組塊的錯誤并發(fā)送中斷。在一種實施方式中, ECC糾錯模塊322發(fā)送中斷,該中斷帶有指示請求包出錯的消息。所述消息可包括指出ECC 糾錯模塊322不能修正錯誤或暗示ECC糾錯模塊322沒有能力修正錯誤的信息。在另一種 實施方式中,ECC糾錯模塊322與所述中斷和/或消息一起發(fā)送請求包中毀壞的ECC組塊。在優(yōu)選的實施方式中,請求包中不能被ECC糾錯模塊322修正的毀壞的ECC組塊 或毀壞的ECC組塊的一部分由主控制器2M讀取、修正和返回給ECC糾錯模塊322,以被讀 取數據管道108進一步處理。在一種實施方式中,請求包中毀壞的ECC組塊或毀壞的ECC 組塊的一部分被發(fā)送給請求數據的設備。請求設備155可修正所述ECC組塊或用另一拷貝 替換數據(如備份或鏡像拷貝),然后可使用請求數據包的替換的數據或將所述替換的數 據返回給讀取數據管道108。請求設備155可使用出錯請求包中的包頭信息以識別替換毀 壞請求包或替換包所屬的對象所需的數據。在另一種優(yōu)選實施方式中,固態(tài)存儲控制器104 采用一些類型的RAID存儲數據并能夠恢復毀壞的數據。在另一種實施方式中,ECC糾錯模 塊322發(fā)送中斷和/或消息,并且接收設備停止與請求數據包關聯的讀操作。本領域技術 人員會認識到ECC糾錯模塊322確定請求包的一個或多個ECC組塊為毀壞的且ECC糾錯模 塊322不能修正錯誤后采取的其他選擇和操作。讀取數據管道108包括解包器324,該解包器3 直接地或間接地接收來自ECC修 正模塊322的請求包的ECC組塊,并檢查和刪除一個或多個包頭。解包器3 可通過檢查 包頭內的包標識符、數據長度、數據位置等驗證包頭。在一種實施方式中,所述包頭包括散 列碼,該散列碼可用于驗證傳遞給讀取數據管道108的包為請求包。解包器3M還從封包 器302所添加的請求包中刪除包頭。解包器3M可被指定為不對某些包起作用而將這些包 未經修改地向前傳送。一個實例可以是容器標簽,當對象索引重建模塊272需要包頭信息 時,該容器標簽在重建進程期間被請求。另外的實例包括傳送不同類型的包,這些包預定在 固態(tài)存儲設備102內使用。在另一種實施方式中,解包器3M操作可以依賴于包的類型。讀取數據管道3 包括對齊模塊326,該對齊模塊3 接收來自解包器324的數 據并刪除多余的數據。在一種實施方式中,發(fā)送給固態(tài)存儲器110的讀命令恢復數據包。 請求數據的設備可不需要恢復的數據包內的所有數據,并且對齊模塊3 刪除不需要的數 據。如果恢復頁內的所有數據都是請求的數據,對齊模塊3 不刪除任何數據。
對齊模塊3 在將數據段傳輸到下一級之前以與請求數據段的設備兼容的形式 按對象的數據段重新格式化數據。通常,由于數據由讀取數據管道108處理,數據段或包的 大小在不同級改變。對齊模塊3 使用接收到的數據以將數據格式化為適于發(fā)送給請求設 備1 的數據段,該數據段還適于連接在一起以形成響應。例如,來自第一數據包的一部分 的數據可與來自第二數據包的一部分的數據結合。如果數據段比請求設備請求的數據大, 對齊模塊3 可丟棄不需要的數據。在一種實施方式中,讀取數據管道108包括讀取同步緩沖器328,該讀取同步緩沖 器3 在讀取數據管道108處理之前緩沖一個或多個讀取自固態(tài)存儲器110的請求包。讀 取同步緩沖器3 位于固態(tài)存儲時鐘域和本地總線時鐘域之間的邊界上并提供緩沖以解 決時鐘域差異。在另一種實施方式中,讀取數據管道108包括輸出緩沖器330,該輸出緩沖器330 接收來自對齊模塊3 的請求包并在數據包傳送到所述請求設備前存儲該包。輸出緩沖器 330解決當從讀取數據管道108級接收數據段時和當將數據段傳送給固態(tài)存儲控制器104 的其他部分或傳送給請求設備時之間的差異。輸出緩沖器330還允許數據總線204以比讀 取數據管道108能夠支持的速率高的速率接收來自讀取數據管道108的數據,以提升數據 總線204運行的效率。在一種實施方式中,讀取數據管道108包括媒體解密模塊332,該媒體解密模塊 332接收一個或多個來自ECC糾錯模塊322的加密過的請求包并在將一個或多個所述請求 包發(fā)送給解包器3M之前利用對于固態(tài)存儲設備102唯一的加密密鑰解密一個或多個所述 請求包。通常,媒體解密模塊332用以解密數據的加密密鑰與媒體加密模塊318使用的加 密密鑰一致。在另一種實施方式中,固態(tài)存儲器110可具有兩個或多個分區(qū)且固態(tài)存儲控 制器104表現得好像有兩個或多個固態(tài)存儲控制器104(每個都在固態(tài)存儲器110內的單 獨分區(qū)內運行)一樣。在這種實施方式中,可對每個分區(qū)使用唯一的媒體加密密鑰。在另一種實施方式中,讀取數據管道108包括解密模塊334,該解密模塊334在將 數據段發(fā)送給輸出緩沖器330之前解密由解包器3M格式化的所述數據段。采用與讀請求 一起接收的加密密鑰解密所述數據段,所述讀請求初始化由讀取同步緩沖器3 接收的請 求包的恢復。解密模塊334可利用與用于第一包的讀請求一起接收的加密密鑰解密第一 包,然后可利用不同的加密密鑰解密第二包或可將第二包未經解密地傳送給讀取數據管道 108的下一級。通常,解密模塊334使用與媒體解密模塊332用以解密請求數據包的加密密 鑰不同的加密密鑰解密數據段。當包與非秘密性加密臨時值一起存儲時,該臨時值與加密 密鑰一起使用以解密數據包。加密密鑰可接收自客戶端114、計算機112、密鑰管理器或管 理固態(tài)存儲控制器104使用的加密密鑰的其他設備。在另一種實施方式中,讀取數據管道108包括解壓縮模塊336,該解壓縮模塊336 解壓縮由解包器3M格式化的數據段。在優(yōu)選實施方式中,解壓縮模塊336使用存儲在包 頭和容器標簽中的一個或兩個中的壓縮信息以選擇補充例程,壓縮模塊312使用該補充程 序來壓縮數據。在另一種實施方式中,解壓縮模塊336所使用的解壓縮例程由請求解壓縮 數據段的設備確定。在另一種實施方式中,解壓縮模塊336根據每個對象類型或對象類基 礎的默認設置選擇解壓縮例程。第一對象的第一包可以能夠廢除默認解壓縮例程設置,具 有相同的對象類和對象類型的第二對象的第二包可采用默認解壓縮例程,而具有相同的對象類和對象類型的第三對象的第三包可不經過解壓縮。在另一種實施方式中,讀取數據管道108包括讀取程序模塊338,該讀取程序模塊 338包括一個或多個在讀取數據管道108內的用戶可定義功能。讀取程序模塊338具有與 寫入程序模塊310類似的特點并允許用戶提供自定義功能給讀取數據管道108。讀取程序 模塊338可位于圖3中所示的位置,可位于讀取數據管道108內的其他位置,或者可包括讀 取數據管道108內多個位置的多個部分。此外,在讀取數據管道108內的多個不同位置可 有多個獨立運行的讀取程序模塊338。本領域技術人員會認識到讀取數據管道108內的讀 取程序模塊338的其他形式。正如寫入數據管道,讀取數據管道108的級可重新排序,本領 域技術人員會認識到讀取數據管道108內的級的其他排列順序。固態(tài)存儲控制器104包括控制和狀態(tài)寄存器340和相應的控制隊列342??刂坪?狀態(tài)寄存器340和控制隊列342有助于控制并按順序排列與在寫入和讀取數據管道106、 108內處理的數據相關聯的命令和子命令。例如,封包器302中的數據段可具有一個或多個 在與ECC發(fā)生器關聯的控制隊列342內的相應控制命令或指令。當數據段被封包時,可在 封包器302內執(zhí)行一些指令或命令中。當從數據段建立的、最新形成的數據包被傳送給下 一級時,其他命令或指令可通過控制和狀態(tài)寄存器340直接傳送給下一個控制隊列342??赏瑫r將命令或指令加載到控制隊列342上以將包轉發(fā)給寫入數據管道106,其 中由于每個管道級要執(zhí)行各自的包,因此每個管道級讀取合適的命令或指令。類似地,可同 時將命令或指令加載到控制隊列342上以從讀取數據管道108請求包,其中由于每個管道 級要執(zhí)行各自的包,因此每個管道級讀取合適的命令或指示。本領域技術人員會認識到控 制和狀態(tài)寄存器340和控制隊列;342的其他特征和功能。固態(tài)存儲控制器104和/或固態(tài)存儲設備102還可包括內存庫交錯控制器344、同 步緩沖器;346、存儲總線控制器348及多路轉換器(“MUX”)350。存儲元件配置圖4A是示出了根據本發(fā)明的N+P個存儲元件402的陣列400的一種實施方式
的示意性方框圖。存儲元件402的陣列400包括N個存儲元件4(^a、402b...... 402η和
存儲奇偶校驗數據的P個存儲元件402ρ,奇偶校驗數據是從存儲在N個存儲元件40加、
402b...... 402η上的數據生成的。存儲奇偶校驗數據402ρ的存儲元件402可以是專用的
奇偶校驗存儲元件402,其可僅存儲奇偶校驗數據。此外,如下所述,奇偶校驗數據可以在存 儲元件402之間輪換。盡管描述了單個奇偶校驗存儲元件402ρ,但本領域內普通技術人員 會認識到可以使用多個奇偶校驗存儲元件402ρ。附加奇偶校驗數據可以以不同的方式存儲 在附加的存儲元件402(未示出)上,例如使用設計為在多個失效后允許數據恢復的復雜奇 偶校驗方案;使用簡單奇偶校驗,在該簡單奇偶校驗中,兩個或多個存儲元件402具有相同 奇偶校驗數據的拷貝。每個存儲元件402可包括設備、芯片、芯片的一部分、芯片塊和類似 物。此外,在一種實施方式中,每個存儲元件402包括物理擦除塊(PEB)404。例如,存 儲元件140 包括PEB14(Ma。物理擦除塊通常是位于芯片塊、芯片或其他存儲元件402上
的擦除塊。每個PEB 404包括m個物理頁406。例如,PEBl包括頁0406a、頁1410a.....頁
m412a。每個物理頁406a存儲數據的一部分和與數據(D) 408 —起分散的糾錯碼(ECC)。另 外,奇偶校驗存儲元件402p上的物理頁406p、410p......412p存儲奇偶校驗數據408p。
在一種實施方式中,PEB的群組形成邏輯擦除塊(LEB)。LEB 414遍及包括奇偶校 驗存儲元件402p的N+P個存儲元件400的陣列。此外,在一種實施方式中,邏輯頁(LP) 416 遍及成一行的、包括奇偶校驗存儲元件402p上的物理頁410p的多個物理頁410。在另一種 實施方式中,邏輯頁416遍及N個存儲元件而不是奇偶校驗存儲元件402p,從而奇 偶校驗數據在一個單獨的步驟中存儲在存儲元件402p上,該單獨的步驟不同于數據存儲 在N個存儲元件上的步驟。在一種實施方式中,ECC是與數據一起分散的塊碼。此外,數據和ECC可不與任何 特定的物理硬件邊界對齊。因此,利用ECC的錯誤糾正不依賴于特定的硬件配置。因此,ECC 和對應的數據可形成ECC組塊,并且ECC組塊可被分割并存儲在N個存儲元件中的 一個或多個上。ECC組塊418通常遍及邏輯頁416的多個物理頁406的至少一部分,其中,
生成自數據408a、408b...... 408m的數據和ECC散布在不包括奇偶校驗存儲元件402p上
的奇偶校驗數據408p的N個存儲元件上。包括奇偶校驗數據402p的存儲元件可 在包括存儲元件402的陣列400的存儲元件之間動態(tài)輪換。在優(yōu)選實施方式中,LP416包 括多個ECC組塊418。物理頁406可包含ECC組塊418的一個或多個數據字節(jié)。ECC組塊 418可遍及物理頁406中的多個行,物理頁418可包括多個ECC組塊418。圖4B是示出了根據本發(fā)明的具有分散的奇偶校驗的N+P個存儲元件450陣列的 另一種實施方式的示意性方框圖。在所描述的實施方式中,奇偶校驗數據408p是分散的。 因此,存儲奇偶校驗數據408p的邏輯頁454的存儲元件402改變了。例如,LP 454在存儲 元件3402c上包括用于特定數據列的奇偶校驗數據408p,在存儲元件2402b上包括用于另 一數據列的奇偶校驗數據。在這種實施方式中,ECC組塊456仍然獨立于奇偶校驗數據。在 另一種實施方式中,奇偶校驗信息存儲在用于LP454內的所有ECC組塊456的相同存儲元 件中,并且僅在LP妨4的邊界上的改變。在另一種實施方式中,奇偶校驗的位置存儲在LEB 452內的相同存儲元件402中,并僅在LEB 452的邊界上改變。增強的數據完整性圖5是示意性框圖,示出了根據本發(fā)明的增強冗余存儲系統(tǒng)中的數據完整性的裝 置500的一種實施方式。裝置500包括縮減裝置116的一種實施方式,在一種實施方式中, 裝置500包括接收模塊502、數據讀取模塊504、重新生成模塊506和ECC模塊508,下文 將描述這些模塊。Jonathan Thatcher等人于2009年5月18日提交的題為“Apparatus, System, and Method to Increase Data Integrity in a RedundantStorage System,,、φ 請?zhí)枮椤拿绹鴮@暾堉幸裁枋隽搜b置500,其通過援引并入本文。在一種實施方式中,裝置500包括接收從邏輯頁416中讀取數據(請求的數據) 的讀取請求的接收模塊502。邏輯頁416遍及Ν+Ρ個存儲元件402的陣列400,并可包括一 個或多個ECC組塊418。在一種實施方式中,接收模塊502接收從多個邏輯頁416中讀取數 據的請求。N和P每個代表多個存儲元件402。N個存儲元件402的每一個存儲ECC組塊418的一部分,P個存儲元件402存儲 奇偶校驗數據。如圖4Α和4Β所示,存儲奇偶校驗數據408ρ的實際存儲元件402可通過頁 406,410,412,LEB 414或其他存儲分區(qū)改變。在一個或多個ECC組塊418中存儲的數據可 包括請求的數據。此外,存儲在P個存儲元件402上的奇偶校驗數據生成自存儲在每個ECC 組塊418上的數據。例如,如果來自ECC組塊418的數據和ECC丟失或損壞,可利用余下的數據和ECC恢復并還原丟失或損壞的數據和ECC。奇偶校驗數據可包括簡單XOR奇偶校 驗信息,或者可以更復雜并如現有技術已知的那樣涉及存儲奇偶校驗數據的多個存儲元件 402。在一種實施方式中,ECC組塊418的存儲在N個存儲元件402中的每一個上的那部分 存儲在每個存儲元件402的物理頁406的至少一部分上。在一種實施方式中,存儲奇偶校驗數據的P個的存儲元件402包括數據鏡像,該數 據鏡像包括存儲在N個存儲元件402中的數據的拷貝,而不包括奇偶校驗數據。因此,來自 具有鏡像數據的P個的設備的數據可直接作為替代,而不是在為N個存儲元件還原數據之 前利用奇偶校驗計算處理。在另一種實施方式中,數據鏡像包括數據的反相,從而邏輯“1” 在鏡像中具有對應的邏輯“0”,邏輯“0”在鏡像中具有邏輯“ 1”。在一種實施方式中,裝置500包括數據讀取模塊504,數據讀取模塊504從N+P個 存儲元件402的X個存儲元件402中的每一個上的物理頁406的至少一部分讀取數據(讀 取的數據),其中X等于N。X表示由數據讀取模塊504讀取的多個存儲元件402,并且其足 以恢復數據。因此,數據讀取模塊504可讀取陣列400中的存儲元件402的子集(X),與存 儲元件402(N+P)總數相等的子集(X)減少了存儲奇偶校驗數據(P)的存儲元件402的個 數。數據讀取模塊504響應于接收讀取請求的接收模塊502讀取數據。在一種實施方 式中,數據讀取模塊504為每個讀取請求讀取X個存儲元件402中的每一個上的物理頁406 的至少一部分。由數據讀取模塊504讀取的物理頁406可包括由讀取請求所請求的邏輯頁 416的一部分。在一種實施方式中,數據讀取模塊504為每個讀取從相同存儲元件402讀取數據。 由數據讀取模塊504讀取的存儲元件402可包括ECC組塊418的某些部分或包括來自ECC 組塊418和奇偶校驗數據408p的數據的組合。通過從相同存儲元件402讀取,數據讀取模 塊504最大化了最初未被讀取的存儲元件402上的數據完整性。未作為讀取請求的一部分 被讀取的存儲元件402中的數據包括可在隨后被用于修正一個或多個錯誤的數據。在一種實施方式中,數據讀取模塊504從存儲ECC組塊418的至少一部分的N個存 儲元件402讀取數據并且不從存儲奇偶校驗數據的P個的存儲元件402讀取數據。因此, 與其他存儲元件402相比,存儲奇偶校驗數據的存儲元件402經歷了較少的讀取,奇偶校驗 數據可具有較高的數據完整性。相對于非奇偶校驗數據存儲元件402來說,存儲奇偶校驗 數據的存儲元件402可變得更加可靠,這是因為奇偶校驗存儲元件402平均故障時間變得 大于非奇偶校驗存儲元件402。因此,當奇偶校驗數據被需要用于數據替換時,更高質量的 數據用作替代。在一種實施方式中,數據讀取模塊504確定讀取哪些存儲元件402。數據讀取模 塊504可確定是否從存儲奇偶校驗數據的存儲元件402上的物理頁406讀取,是否從不包 括奇偶校驗數據的物理頁406完全讀取,或者是否根據用戶設定的方式從存儲元件402讀 取,下文將詳細描述。通過在每次讀取中不讀取全部的存儲元件402且僅讀取那些獲取所 請求的數據所需要的一定量的存儲元件402,對陣列400的全部讀取次數下降。因此,存儲 元件402不會快速失效,而且存儲元件402上的數據經受了較少的讀取干擾,或者當相鄰的 位被讀取時,存儲元件402上的數據中被激活的位也較少。在一種實施方式中,裝置500包括重新生成丟失的數據的重新生成模塊506。由于數據讀取模塊504僅從X個存儲元件402的物理頁406讀取,被數據讀取模塊504讀取的 存儲元件402中的一個或多個可包括導致并非整個ECC組塊418被讀取的奇偶校驗數據, 由此導致了“丟失的數據”。重新生成模塊506使用由數據讀取模塊506讀取的奇偶校驗數 據和讀取的數據中剩余的并非奇偶校驗數據的部分來重新生成丟失的數據。重新生成模塊506將丟失的數據替換進ECC組塊418,并且與讀取的數據的剩余 部分相結合的該丟失的數據現在包括ECC組塊418。在數據讀取模塊504并不讀取奇偶校 驗數據的例程中,重新生成模塊506不需要重新生成丟失的數據。舉例來說,重新生成模塊 506可響應于讀取的數據的一部分(包括奇偶校驗數據)或從來自讀取奇偶校驗數據的讀 取數據模塊504的信號重新生成丟失的數據。在一種實施方式中,裝置500包括確定一個或多個ECC組塊418是否包括錯誤的 ECC模塊508。ECC模塊508可使用每個ECC組塊418中的ECC來確定ECC組塊418中的 數據是否包括錯誤。ECC組塊418可包括讀取的數據和任何重新生成的丟失的數據。每個 ECC組塊418中的ECC可被用于檢測并修正通過傳輸和存儲而引入ECC組塊418中的數據 的錯誤。通常,ECC能夠檢測特定數量的錯誤并具其能修正的錯誤的量小于ECC所能檢測 到的錯誤的量。例如,ECC能夠檢測六位中的錯誤,但僅能修正位錯誤中的三位。具有數據 組塊的包括大量數據的存儲系統(tǒng)通常使用具有多位ECC修正的高級ECC。具有高級、多位 ECC修正的ECC可檢測16位中的錯誤,并且修改位錯誤中的8位。ECC模塊508通過將錯 誤的位改變成正確的1或0狀態(tài)而修正錯誤的位,從而ECC組塊418與其被寫入固態(tài)存儲 器110中且ECC被生成以用于ECC組塊418時一致。圖6是示意性框圖,示出了根據本發(fā)明的增強冗余存儲系統(tǒng)中的數據完整性的裝 置600的另一種實施方式。裝置600包括具有接收模塊502、數據讀取模塊504、重新生成 模塊506和ECC模塊508的輪流的壞塊映射裝置114,這些模塊大體上類似于相對于圖5的 裝置500所描述的模塊。在不同實施方式中,裝置600也可包括ECC檢查模塊602、替換模 塊604、設備錯誤確定模塊606、周期性讀取模塊608、奇偶校驗輪換模塊610、讀取輪換模塊 612和ECC修正模塊614,將在下文中描述這些模塊。在一種實施方式中,裝置600包括ECC檢查模塊602。如果ECC模塊508確定ECC 組塊418包括錯誤,則ECC檢查模塊602確定是否能夠利用存儲在ECC組塊418中的ECC 修正錯誤。能夠利用ECC修正的錯誤的數量由用于生成ECC的ECC算法的魯棒性來確定。 如果ECC組塊418中的錯誤多于能夠用存儲在ECC組塊418中的特定ECC所修正的量,ECC 檢查模塊602確定錯誤不可修正。ECC組塊418具有多于能夠用與數據一起存儲的ECC所 修正的錯誤,這種狀況可以是存儲元件402失效的指示。在一種實施方式中,裝置600包括替換模塊604。如果ECC檢查模塊602確定錯誤 不可利用與ECC組塊418 —起存儲的ECC修正,替換模塊604從未被數據讀取模塊504讀 取的存儲元件402讀取數據(替換數據)并且使用替換數據和所讀取的數據來替換來自有 錯誤的存儲元件402的數據,從而生成不包括錯誤或包括大量隨后可用替換ECC組塊418 中的ECC修正的錯誤的ECC組塊418 (替換ECC組塊418)。替換模塊604讀取先前未被數 據讀取模塊504讀取的數據,這是因為ECC組塊418中的錯誤不能用ECC組塊418中的ECC 修正。在一種實施方式中,未被數據讀取模塊504讀取的存儲元件402是存儲奇偶校驗數據的存儲元件402。替換模塊604可讀取存儲奇偶校驗數據的存儲元件402以生成替換 數據。在另一種實施方式中,未被數據讀取模塊504讀取的存儲元件402是存儲ECC組塊 418的一部分而不存儲奇偶校驗數據的存儲元件402。替換模塊402可讀取存儲ECC組塊 418的一部分的存儲元件402以將ECC組塊418的一部分用作替換數據,或使用替換數據和 由數據讀取模塊504讀取的數據(包括奇偶校驗數據)以替代有錯誤的存儲元件502上的 數據。在一種實施方式中,裝置600包括ECC修正模塊614,ECC修正模塊614使用ECC和 來自ECC組塊418的數據修正數據中的錯誤。如果ECC檢查模塊602確定錯誤能夠在ECC 組塊418中修正,則ECC修正模塊614可利用ECC組塊418中的ECC修正這些錯誤。在另一種實施方式中,ECC檢查模塊602確定ECC組塊418中的錯誤不可修正。 在確定具有錯誤的存儲元件402存儲奇偶校驗數據的情況下,由數據讀取模塊504讀取的 來自其他存儲元件402的數據加上來自替換存儲元件402的ECC組塊數據構成了 ECC組塊 418,而且隨后ECC修正模塊614使用ECC組塊418并修正存儲在替換ECC組塊418中的數 據中的任何錯誤。在不存儲奇偶校驗數據的存儲元件被識別為具有錯誤的情況下,替換模 塊604使用替換數據和來自由數據讀取模塊504讀取的數據中的奇偶校驗數據以替代確定 為具有錯誤的存儲元件上的數據,從而創(chuàng)建替換ECC組塊418,在一種實施方式中,ECC檢查 模塊602能夠確定具有可修正的錯誤或不具有錯誤。如果可修正的錯誤存在于替換ECC組 塊的數據中,則ECC修正模塊614使用來自替換ECC組塊418的數據修正替換ECC組塊418 中的數據中的錯誤。在一種實施方式中,裝置600包括設備錯誤確定模塊606,設備錯誤確定模塊606 與ECC檢查模塊602和替換模塊604配合工作以確定哪個存儲元件402包括具有錯誤的數 據。錯誤可以是不可用ECC組塊418中的ECC修正的錯誤。不可用ECC修正的錯誤可以是 故障存儲元件402的信號,該信號可能需要故障存儲元件402的引退。此外,如下文更詳細 地描述的那樣,由于ECC組塊418遍及多個存儲元件402,錯誤所源自的存儲元件402不能 被ECC單獨確定。設備錯誤確定模塊606可包括下文更詳細描述的檢測裝置118的一種實 施方式。在另一種實施方式中,ECC組塊418內的ECC能夠修正特定存儲元件402中的錯 誤的大部分位。在這種實施方式中,這種專用的ECC碼可直接識別需要作為替換的存儲元 件402。在該實施方式中,設備錯誤確定模塊606分析修正的數據的輸出并根據ECC修正模 塊614提供的信息確定哪個存儲元件402失效。在一種實施方式中,裝置600包括周期性讀取模塊608,周期性讀取模塊608周期 性地從未被數據讀取模塊504讀取的一個或多個存儲元件402讀取數據。當存儲元件402 未被數據讀取模塊504讀取時,這些存儲元件402中的潛在缺陷或故障的機率將未被發(fā)現 地大幅增加。潛在故障保持未被發(fā)現,直到缺陷的設備被需要時。通常,潛在故障在具有冗 余性和容許一定數量的故障的系統(tǒng)中尤其重要。潛在故障創(chuàng)建了一種情況,在這種情況下, 具有假象的明顯冗余性,并且隨之而來的故障可導致系統(tǒng)失效。相反的,如果故障已經被發(fā) 現,則故障可能已經在隨后的額外故障發(fā)生之前通過修復或重新配置而避免。一般而言,這種潛在故障可用標準的、周期性的讀取檢測。然而,當數據讀取模塊 504并不是定期地從某些存儲元件402讀取時,周期性讀取模塊608可周期性地從這些存儲元件402讀取數據。周期性讀取模塊608可根據預定的或用戶配置的方式或根據閾值從較少使用的 存儲元件402讀取。例如,周期性讀取模塊608可從存儲元件402被讀取之時起跟蹤時間 量或跟蹤存儲替換陣列400全部讀取次數(不包括存儲元件402的讀取)。如果時間量或 全部讀取次數達到閾值,則周期性讀取模塊608可讀取存儲元件402。本領域技術人員會認 識到確定周期性讀取模塊608何時從較少使用的存儲元件402讀取的其他方法。在一種實施方式中,裝置600包括奇偶校驗輪換模塊610,奇偶校驗輪換模塊610 改變邏輯頁416的哪些存儲元件402為每個存儲元件402的存儲子集存儲奇偶校驗數據。 每個存儲子集包括存儲元件402的至少一部分,邏輯存儲子集包括陣列400的每個存儲元 件402上的存儲子集。存儲子集可包括存儲元件的物理或邏輯部分,存儲元件包括物理頁 406的一部分、物理頁406、物理擦除塊404的一部分、物理擦除塊404、設備、芯片或一個或 多個芯片塊。通過輪換奇偶校驗數據,奇偶校驗輪換模塊610促進了損耗均衡,這是由于一個 專用的存儲元件402不會持續(xù)地用于讀取和寫入奇偶校驗數據。因此,奇偶校驗數據可在 數據存儲的若干級別上輪換。例如,邏輯頁416可包括一行物理頁406 (例如,406a-m,ρ), 其中奇偶校驗數據408ρ存儲在第一存儲元件40 的物理頁406a上。下邏輯頁416的下 一行物理頁410a-m,p中的奇偶校驗數據408p可存儲在第二存儲元件402b的物理頁410b 上。這種方式可為每個邏輯頁416繼續(xù)。在不同的實施方式中,奇偶校驗輪換模塊610可 按頁 406,410,412,按 PEB404 等輪換。在一種實施方式中,對于邏輯存儲子集來說,奇偶校驗輪換模塊610在存儲空間 恢復操作之后改變存儲奇偶校驗數據的存儲元件402。存儲空間恢復操作可包括將有效數 據復制出邏輯存儲子集和擦除邏輯存儲子集以為存儲新寫入的數據準備邏輯存儲子集。存 儲空間恢復操作的一個實例是垃圾收集。在這種實施方式中,奇偶校驗輪換模塊610可指 令每個ECC組塊418的奇偶校驗數據408p存儲在LEB 414的一個PEB (如,PEB 1404a)中, 然后在垃圾收集進程之后輪換到相同LEB 414的不同PEB (如,PEBM04b),在垃圾收集進程 中,從LEB 414復制有效數據,LEB414然后重新可用于數據存儲。在一種實施方式中,數據讀取模塊504在每次讀取中從相同存儲元件402讀取數 據,并且奇偶校驗輪換模塊610改變存儲奇偶校驗數據的存儲元件402。因此,當奇偶校驗 輪換模塊410指令奇偶校驗數據408p存儲在每次由數據讀取模塊504讀取的存儲元件402 上時,數據讀取模塊504將讀取奇偶校驗數據408p。在一種實施方式中,數據讀取模塊504包括讀取輪換模塊612,讀取輪換模塊612 輪換N+P個存儲元件402中數據讀取模塊504讀取數據的X個存儲元件402。在一種實施 方式中,對于特定的讀取而言,N個存儲元件402存儲數據,單獨的P個存儲元件402存儲 奇偶校驗數據,數據讀取模塊504在N個存儲ECC組塊的存儲元件402之間讀取N-I個存 儲元件402,并且讀取存儲奇偶校驗數據408p的存儲元件402。對另一讀取而言,數據讀取 模塊504可讀取存儲ECC組塊418的N個存儲元件40加-11。在不同的讀取操作中,讀取輪 換模塊612指令數據讀取模塊504讀取相同邏輯頁416的不同存儲元件402。讀取輪換模 塊612在N+P個存儲元件402之間輪換讀取的X個存儲元件402,以進行損耗均衡和降低未 檢測到的潛在故障。本領域技術人員會認識到確定讀取輪換模塊612如何輪換數據讀取模塊504讀取數據的存儲元件402的其他方法。在一種實施方式中,奇偶校驗輪換模塊610為每個存儲元件402的存儲子集改變 邏輯頁416的存儲奇偶校驗數據408p的存儲元件402,并且讀取輪換模塊612輪換X個存 儲元件402中的數據讀取模塊504讀取數據的存儲元件402。在某些實施方式中,讀取輪換 模塊612輪換存儲元件402,從而數據讀取模塊504從存儲ECC組塊418的至少一部分的N 個存儲元件402讀取數據,并不從存儲奇偶校驗數據的P個存儲元件402讀取數據,而不考 慮存儲奇偶校驗數據的存儲元件402輪換到了哪里。因此,盡管奇偶校驗數據在輪換,但奇 偶校驗數據仍然未被讀取。隨后,周期性讀取模塊608可周期性地讀取存儲奇偶校驗數據 的存儲元件402。本領域技術人員會認識到奇偶校驗輪換模塊610和讀取輪換模塊612可 交互以輪換被讀取的存儲元件402的不同方法。圖7是示意性流程圖,示出了根據本發(fā)明的增強冗余存儲系統(tǒng)中的數據完整性的 方法700的一種實施方式。方法700開始,在步驟702,接收模塊502接收從邏輯頁416讀 取請求的數據的讀取請求,邏輯頁416遍及N+P個存儲元件的陣列400。存儲元件的陣列 400包括存儲ECC組塊418的一部分的N個存儲元件402和存儲奇偶校驗數據的P個的存 儲元件402。響應于步驟702中接收模塊502接收讀取請求,在步驟702中,數據讀取模塊504 從N+P個存儲元件402的X個存儲元件402中的每一個上的物理頁406的至少一部分讀取 數據,其中X等于N。因此,數據讀取模塊504讀取的存儲元件402的數量小于存儲元件402 的總數。響應于包括奇偶校驗數據的讀取的數據的一部分,在步驟706中,如果需要,重新 生成模塊506使用由數據讀取模塊504讀取的奇偶校驗數據和讀取的數據中不是奇偶校驗 數據的的剩余部分生成丟失的數據。由重新生成模塊506生成的數據用重新生成的數據替 換丟失的數據,從而為ECC模塊508提供替換ECC組塊418。ECC模塊508確定ECC組塊 418(包括讀取的數據和任何重新生成的丟失數據)是否具有錯誤,方法700結束。圖8是示意性流程圖,示出了根據本發(fā)明的增強冗余存儲系統(tǒng)中的數據完整性的 方法800的另一種實施方式。方法800開始,在步驟802,接收模塊502接收從邏輯頁416 讀取請求的數據的讀取請求,邏輯頁416遍及N+P個存儲元件的陣列400。存儲元件的陣列 400包括存儲ECC組塊418的一部分的N個存儲元件402和存儲奇偶校驗數據的P個的存 儲元件402。此外,奇偶校驗輪換模塊610可(為陣列400上的每個存儲元件402的存儲子 集)改變邏輯頁416的存儲奇偶校驗數據的存儲元件402.響應于步驟802中接收模塊502接收讀取請求,在步驟804中,數據讀取模塊504 確定所要讀取的X個存儲元件402。數據讀取模塊504可確定為僅讀取不存儲奇偶校驗數 據的存儲元件402。數據讀取模塊504(通過讀取輪換模塊61 可涉及預定的讀取方案或 算法,從而確定被讀取數據的X個存儲元件402。在步驟806,數據讀取模塊504從N+P個存儲元件402的X個存儲元件402中的 每一個上的物理頁406的至少一部分讀取數據,其中X等于N。在步驟808,重新生成模塊 506確定讀取的數據的一部分是否包括奇偶校驗數據。如果在步驟808中,重新生成模塊 506確定讀取的數據的一部分包括奇偶校驗數據,則在步驟810中,重新生成模塊506重新 生成丟失的數據以補償ECC組塊418未被讀取的部分。如果在步驟808中,重新生成模塊506確定讀取的數據的一部分不包括奇偶校驗數據,重新生成模塊506不重新生成數據。在步驟812中,ECC模塊508確定ECC組塊418是否包括任何錯誤。ECC組塊418 包括讀取的數據和任何重新生成的丟失數據。如果在步驟812中,ECC模塊508確定ECC 組塊418不包括任何錯誤,則方法800結束??蛇x地,如果在步驟812中,ECC模塊580確 定ECC組塊418包括錯誤,則在步驟814中,ECC檢查模塊602確定錯誤是否可利用存儲在 ECC組塊418中的ECC修正。如果在步驟814中,ECC檢查模塊602確定錯誤可利用ECC修 正,則在步驟816中,ECC模塊580利用ECC修改錯誤,方法800結束??蛇x地,如果在步驟814中,ECC檢查模塊602確定錯誤不可利用ECC修正,則在步 驟818中,設備錯誤確定模塊606從未被數據讀取模塊504讀取的一個或多個存儲元件402 讀取數據。在步驟820中,設備錯誤確定模塊402確定哪個存儲元件402導致了錯誤,從而 ECC組塊418具有太多可被修正的錯誤,這將在下文結合檢測裝置118做詳細說明。在步 驟822中,替換模塊604用替換數據替換導致ECC組塊418中的數據不可被修正的存儲元 件402中的數據,方法800返回,ECC模塊508在步驟812中確定替換ECC組塊418是否具 有錯誤。在一種實施方式中(未示出),設備錯誤確定模塊606不能確定哪些存儲元件402 具有錯誤并發(fā)送錯誤消息。有利地是,圖7和圖8中的方法700和800允許僅從需要讀取ECC組塊418的多 個存儲元件402中讀取數據,從而P個存儲元件402通常未被讀取,除非需要其在失效、故 障等情況下恢復數據。方法700、800延長了固態(tài)存儲設備102的壽命,并可以通過減少影 響讀取的數據附近的數據的讀取干擾的次數提高存儲在設備102中的數據的質量。檢測失效的數據存儲器圖9A是示意性框圖,示出了根據本發(fā)明的檢測和替代失效數據存儲器的裝置900 的一種實施方式。裝置900包括檢測裝置118的一種實施方式。該裝置可檢測數據存儲器 (包括固態(tài)存儲器110或任何類型的存儲芯片,易失性的或非易失性的)中的失敗。固態(tài) 驅動制造商最近發(fā)現固態(tài)存儲器110(例如NAND閃存)具有高故障率。此外,如上所述,當 ECC組塊418遍及多個存儲元件402時,錯誤所源自的存儲元件402通常不能被ECC單獨確 定。裝置900位于存儲設備902的陣列中故障的存儲芯片內或位于芯片(存儲設備 902)的一部分內,并隨后用來自另一存儲設備904或存儲設備904的一部分的數據作替換。 該構造包括存儲設備902的陣列,并且有一個或多個額外的設備904。在一種實施方式中, 存儲設備902、904是固態(tài)存儲器,并且存儲設備902、904可被稱為存儲元件402。下文中, “存儲設備”和“存儲元件”可交換使用,并且除非另有說明,存儲設備902、904和存儲元件 402都可以是固態(tài)存儲器或一些其他類型的易失性或非易失性存儲器。每個存儲設備902 可包括上述的存儲元件402。此外,存儲設備的陣列可包括上述的N+P個存儲元件 的陣列400。具體的,存儲元件的陣列400可包括N個存儲元件402 (每個存儲ECC組塊418 的一部分)和存儲奇偶校驗數據的P個存儲元件402。如上所述,ECC組塊418存儲數據和 根據數據生成的ECC。ECC檢查/修正電路910使用存儲在ECC組塊418中的ECC確定數 據中是否存在錯誤。ECC檢查/修正電路可包括上述的設ECC檢查模塊602和/或ECC修 正模塊614的一種實施方式。存儲設備902、904可在結構、尺寸等上一致。通常存儲設備902、904是存儲芯片,但也可以是芯片的群組、DIMM等。存儲設備902可包括N個上述的存儲元件402。奇偶校 驗信息存儲在額外存儲設備904中。此外,額外存儲設備904可包括上述的存儲奇偶校驗 數據的P個存儲元件402。如果單個額外存儲設備90 被包括,額外存儲設備90 通常 可包括從存儲設備的陣列生成的簡單奇偶校驗信息。如果使用多個額外存儲設備 904a-m,多維奇偶校驗或其他更復雜的奇偶校驗信息可存儲在額外存儲設備9(Ma-m中。在 另一種實施方式中,多個額外存儲設備9(Ma-m存儲簡單奇偶校驗數據。例如,每個額外存 儲設備904可包括相同的奇偶校驗數據。存儲設備902、904可以是易失性存儲器,例如靜 態(tài)隨機存取存儲器(靜態(tài)RAM)、動態(tài)RAM(DRAM)或類似存儲器,或者可以是非易失性存儲 器,例如閃存、納米隨機存取存儲器(納米RAM或NRAM)、磁阻RAM(MRAM)、相變RAM(PRAM)、 賽道存儲器(racetrack memory)、憶阻存儲器等。通常通過對陣列中存儲設備90 -!!的輸入的數據進行異或O(OR)運算,生成存儲 在額外存儲設備904上的奇偶校驗信息。當數據讀取自陣列902、904時,通常并行地讀取, 從而數據的一部分讀取自陣列中的每個存儲設備902。為簡便起見,該實施方式讀取存儲設 備902、904的所有數據。如上所述,為了增加數據完整性,這種設計所讀取存儲設備的量小 于全部存儲設備的量。ECC (不包括奇偶校驗信息)被用于確定讀取自存儲設備102的數據是否有效。ECC 可位于多個ECC組塊418中,其中每個ECC組塊418中的ECC對應于ECC組塊418中的數 據。此外,ECC組塊418可遍及多個存儲設備90加-11。如果ECC被ECC檢查/修正電路910 用于確定數據有效或數據是否包括可利用ECC修正的錯誤,則有效數據或修正的數據被裝 置900放行,而不采取進一步的操作。然而,如果ECC檢查/修正電路910發(fā)現數據無效且錯誤的量大于ECC所能修正 的量,類似于上述相對于縮減裝置116描述的情況,一個或多個存儲設備90 -!!的全部或 一部分有很大可能性發(fā)生故障。在這種情況下,來自額外存儲設備904的奇偶校驗信息作 為每個存儲設備90 -!!的替代,一次替換一個以發(fā)現哪個存儲設備902未起作用或包括大 量的錯誤數據。數據恢復906包括允許奇偶校驗信息被替代的XOR邏輯,從而存儲設備902 的被測試的有效數據被源于額外存儲設備904的數據所替代。在一個實例中,四個存儲設備90加-(1在一個陣列中,存儲有數據A、B、C和D,還有 一個具有奇偶校驗數據P的額外存儲設備9(Ma。為了生成奇偶校驗信息P,數據被異或運 算P = A~B~C~D (未示出,"表示異或運算),P存儲在額外存儲設備90 中。舉例來說, 假設第三存儲設備902c損壞,從而數據A、B、C、D不能利用ECC修正。損壞的數據C’將被 讀取,并且ECC檢查/修正電路910將使用ECC確定數據A、B、C’、D為損壞且不能被修正。 當數據A、B、C’、D與存儲在每個存儲設備902上的ECC組塊418的一部分一起存儲,從而 ECC組塊418遍及存儲設備90 -!!時,裝置900可能不能夠單獨從ECC檢測出第三存儲設 備902c的全部或一部分已經失效或具有太多要被修正的錯誤。在圖9A所描述的實施方式中,MUX 912和XOR邏輯914與每個存儲設備902包括 在一起。每個MUX 912能夠從其存儲設備902或從關聯的M)R 914選擇數據。每個M)R 914 結合讀取的數據和來自數據恢復906的奇偶校驗數據。數據恢復906包括與讀取的數據異 或的奇偶校驗信息。讀取的數據通常被緩沖908,從而如果存儲設備902、904中存在錯誤, 讀取的數據不會被改變。MUX 912和)(0R914可包括重新生成模塊506和/或替換模塊604的一部分或全部的一種實施方式。使存儲設備902、904取消選定的控制信號未被示出。當未被選定時,未被讀取的 存儲設備902的關聯MUX 912將同時被選定,并且丟失的數據將由數據恢復906重新生成。裝置900通過選定來自M)R 914的數據而不是讀取自存儲設備902的數據來測試 每個存儲設備90加-11。該進程為每個存儲設備90 -!!重復,直到ECC組塊被確定為可修 正。裝置900可通過控制器916控制數據和存儲設備902選擇??刂破?16可控制選定/ 取消選定數據的邏輯并反復以獨立故障的存儲設備902或存儲設備902的一部分。此外, 控制器916可包括設備錯誤確定模塊606、奇偶校驗輪換模塊610和讀取輪換模塊612的一 種實施方式。繼續(xù)該實例,如果第一存儲設備90 首先被測試,第一 MUX 912a選定M)R91 數據。在這個實例中,數據恢復906將是A~B~C,~D~P。代入P所表示的,數 據恢復 906 為 A"B"C' "D"A"B"C"D = (A"A) “ (B"B) “ (C,"C) “ (D"D) = 0"0"C"C' "0 = C"C'。 其與來自第一存儲設備的讀取的數據相異或:A~C~C’。由于C和C’不取消,結果是A’,并且 該結果將被損壞,ECC910仍然將檢測不可修正的錯誤。該進程為每個存儲設備902重復。當第三存儲設備902c被測試時,損壞的數據C,被從第三存儲設備902c讀取并與 其他存儲設備90h、902b、902d相異或數據恢復906 = A"B"C' ~D~P。代入P所表示的數 據恢復 906 = A~B~C,"D"A"B"C"D = (A"A) “ (B"B) “ (C' ~C) ~ (D~D)。與其自身異或的數據 為0,因此,XOR = 0~(TC,"C"0 = C' "C。如果第三MUX 912c選定第三M)R 9Hc數據而不 是直接來自第三存儲設備902c的數據,MUX 912c上的數據是第三存儲設備902c的數據C, 和數據恢復M)R 906的輸出的異或C’~(C’~C) =C0因此,正確的數據C替換了無效數據 C’。在這點上,ECC檢查/修正電路910通常確定數據有效或可修正。一旦數據被確定為有效或可修正,在數據被確定為可用ECC修正之時所選定的存 儲設備902c就被確定為失效的存儲設備902c。在這點上,用于失效的存儲設備902c的MUX 912c被永久地選定,并且具有奇偶校驗信息的額外存儲設備90 被用于替代失效的存儲 設備902c為失效的存儲設備902c的至少一個區(qū)域提供數據。該區(qū)域可以是頁、多頁、PEB、 多個PEB、芯片塊、芯片或存儲設備902c內的任何其他分區(qū),或者甚至可以包括整個存儲設 備902c。奇偶校驗數據仍然存儲在額外存儲設備902c上,而且上述進程被用于獲取正確的 數據C,正確的數據C被用于替代來自額外存儲設備90 的損壞的數據C’。在上述實例中,當裝置900確定存儲設備902c包括錯誤的數據時,來自存儲設備 902c的具有損壞的數據C’的數據可被從額外存儲設備90 獲取的被修正的數據替換。該 進程修正錯誤的數據,其用一個存儲器模塊904替換另一個存儲設備902。如下所述,本發(fā) 明也包括替換存儲設備902內的存儲位置的任何子集(區(qū)域),以及通過分析如上所述的錯 誤的存儲器位置而匹配來自額外存儲設備904的數據。例如,一旦裝置900檢測到不可用ECC 910修正的錯誤、隔離錯誤并修復數據,裝 置900可記錄錯誤記錄,錯誤記錄包含諸如存儲器位置的信息。每次發(fā)生錯誤,錯誤信息被 記錄并隨后被分析,從而將錯誤與特定頁、塊、邏輯擦除塊等隔離。一旦存儲設備902中的 區(qū)域被確定,該裝置可隔離那個區(qū)域并用來自額外存儲設備904的數據替換,直到具有失 效區(qū)域的存儲設備902被替換。下文更詳細地描述了錯誤記錄。本發(fā)明預先考慮到完成下述步驟的許多其他的方法檢測不可修正的錯誤、使用奇偶校驗數據以選擇性地隔離錯誤和隨后使用額外存儲設備904中的數據修正錯誤的數 據。盡管在圖9A和9B中描述的實例表明8位數據總線,但本發(fā)明也預料到了更寬或更窄 的其他陣列。圖9B是示意性框圖,示出了根據本發(fā)明的檢測和替代失效數據存儲器的裝置950 的另一種實施方式。在裝置950的實施方式中,MUX 912上方的M)R 914被移去,來自數據 恢復906的數據被直接輸入到MUX 912。第二組MUX裝置952接收來自存儲設備902和來 自接地以提供邏輯0的數據線的一組數據。當隔離錯誤時,一組MUX(例如MUX 952a、MUX 912a)被設置為不選定來自適當的 存儲設備(例如存儲設備90 )的數據。再次返回到上述實例,陣列包括數據A,B,C,D和 奇偶校驗P,奇偶校驗以與圖9A相同的方式生成(例如,P = A~B~C~D)。再次假設第三存儲 設備902c被損壞,因此,C,被讀取。如果第一存儲設備90 被選定為隔離,存儲設備90 下方的第一 MUX95M將讀取所有的0。隨后,數據恢復塊將異或數據和奇偶校驗數據恢復 906 = 0"B"C' "D"P = 0"B"C' "D"A"B"C"D = (0"A) “ (B"B) “ (C,"C) “ (D"D) = A"0"C' "C"0 =A"C' ~C = A’。隨后,這被反饋到第二 MUX112a,ECC檢查/修正電路910將繼續(xù)檢測不 可修正的錯誤。當第三存儲設備902c被選定時,數據恢復輸出為A~B~0~D~P = A"B"0"D"A"B"C"D =(A"A)"(B"B)"(0"C)"(D"D) = (Γ(Γ(Γ(Τθ = C。然后,第三存儲設備 902c 線上的第二MUX 112c選定數據恢復906的輸出,其為C,從而ECC檢查/修正電路910通常檢測有效數據A、 B、C和D。錯誤可隨后被記錄用于分析或垃圾收集,或者第三存儲設備902c可被選定,而來 自額外存儲設備904的數據可被用于提供修正的數據。本領域技術人員會認識到將實現下述步驟的其他電路檢測不可用ECC檢查/修 正電路910和存儲在ECC組塊418中的ECC修正的錯誤、通過順序地選定存儲設備902隔 離錯誤并使用奇偶校驗數據以用被修正的數據做替換、以及隨后一旦存儲設備902被選定 且ECC檢查/修正電路910確定數據為有效或可修正,則修正錯誤。此外,此處所述的本發(fā) 明預料到下述情況多個存儲設備902發(fā)生故障或包括壞數據,并且復雜的替換方式與來 自多個額外存儲設備904的數據一起使用以定位發(fā)生故障的存儲設備902。在這種實施方 式中,來自多個額外存儲設備904的奇偶校驗數據被用于創(chuàng)建數據,從而以輪換方案替換 相應數量的存儲設備902的數據,直到存儲設備902被發(fā)現,從而ECC組塊418中的任何錯 誤均可被修正。圖10是示意性框圖,示出了根據本發(fā)明的檢測和替代失效數據存儲器的裝置 1000的又一種實施方式。裝置1000包括檢測裝置118的一種實施方式,并且在一種實施方 式中,包括讀取模塊1002、ECC模塊1004和隔離模塊1006,下文將描述這些模塊。在一種實施方式中,裝置100包括從存儲設備的陣列中讀取數據的讀取模塊 1002。陣列包括兩個或多個存儲設備902和一個或多個存儲來自存儲設備902的奇偶校驗 信息的額外存儲設備904。在一些實施方式中,讀取模塊1002從邏輯頁416的至少一部分 讀取數據,邏輯頁416遍及存儲設備902、904的陣列。此外,存儲設備902、904的陣列可包 括N+P個存儲元件402的陣列。如上所述,存儲元件402的陣列400可包括N個存儲元件 402 (每個存儲ECC組塊418的一部分)和存儲奇偶校驗數據的P個存儲元件402。如下文相對于隔離模塊1006更詳細地描述的,來自選定為測試的存儲設備的數據不會被使用但會被替代。因此,在一種實施方式中,讀取模塊1002從N+P個存儲元件402 的X個存儲元件402中的每一個上的物理頁406的至少一部分讀取,其中X等于(N+P)-l。 未被讀取的存儲元件402被選定為測試下的存儲元件402。在一種實施方式中,裝置1000包括ECC模塊1004,ECC模塊1004使用糾錯碼(ECC) 確定測試的數據中是否存在一個或多個錯誤,和錯誤是否可用ECC修正。測試的數據可包 括由讀取模塊1002讀取的數據。在一些實施方式中,ECC與由讀取模塊1002讀取的數據一 起存儲在ECC組塊418中。數據被用于生成與數據一起存儲在ECC組塊418中的ECC。因 此,測試數據可包括ECC組塊418,例如由讀取模塊1002讀取的ECC組塊418,或由隔離模 塊1006生成的ECC組塊418,如下文更詳細地描述的。在一種實施方式中,1000包括隔離模塊1006,隔離模塊1006響應于ECC模塊1004
確定錯誤存在于由讀取模塊1002讀取的數據中且錯誤不可用ECC修正而從存儲設備的陣 列中選定存儲設備902。存在于數據中的不可修正的錯誤可以是發(fā)生故障的存儲設備902/ 存儲元件402的指示。隔離模塊1006用下述數據替代讀取自選定的存儲設備902的數據包括從存儲在 一個或多個額外存儲設備904上的奇偶校驗數據生成的數據的數據(替代數據)和讀取自 未被選定的存儲設備902的數據(有效數據)。在一種實施方式中,隔離模塊1006使用異 或邏輯以用數據替換選定的正被測試的存儲設備902,該數據源于替換數據和有效數據。在另一種實施方式中,ECC組塊418內的ECC能夠修正特定存儲設備902內出錯的 所有位的大部分。在這種實施方式中,專用的ECC碼可直接識別產生錯誤的存儲設備902。 在該實施方式中,隔離模塊1006分析修正的數據的輸出并從ECC模塊1004提供的信息確 定哪些存儲設備902失效。另外,隔離模塊1006通過存儲設備902迭代,以找出不可修正的錯誤所源自的存 儲設備902。具體地,如下文詳細所述的,隔離模塊1006響應于選定的存儲設備902被檢測 為不具有不可修正的錯誤而選定下一個存儲設備902以測試。下一個存儲設備902可包括 存儲設備以在取消選定被測試過的存儲設備902之后選定和測試。因此,隔離模塊1006選 定存儲設備902中的每一個用于測試,直到找出錯誤的存儲設備902或所有的存儲設備902 被測試。在一種實施方式中,如果所有的存儲設備902已被選定和測試而沒有檢測到故障 的存儲設備902,隔離模塊1006返回或報告錯誤。在這種情況下,多個存儲設備902可發(fā)生 錯誤,并且可能需要用戶進一步的操作。在一種實施方式中,隔離模塊1006可存儲先前發(fā) 生故障的存儲設備902的標識,從而隔離模塊1006隨后不必迭代這些存儲設備902。隔離 模塊1006可包括在圖9A和圖9B中描述的控制器916。ECC模塊1004確定測試數據(現在是結合有替代數據的可用數據)是否不包括錯 誤或包括可用ECC修正的錯誤。結合有替代數據的可用數據不包括錯誤或包括可用ECC修 正的錯誤的事實可表明數據被替代的選定的存儲設備902是錯誤所源自的存儲設備。一旦數據被確定為有效或可修正,在數據被確定為可被ECC修正時被選定的存儲 設備902隨后被裝置1000確定為是失效的存儲設備,并在下文中被稱為“選定的出錯的存 儲設備902”。如果結合有替代數據的可用數據是有效的且不包含錯誤,選定的出錯的存儲 設備902(隔離模塊1006為其替代數據)是出錯的原因。類似地,如果余下的僅有的錯誤 是可利用ECC修正的,不可修正的錯誤通常源于選定的存儲設備902(隔離模塊1006為其替代數據)。注意到圖9A和9B示出了存儲數據的具體存儲設備902和存儲奇偶校驗數據的具 體存儲設備904,如上文中相對于縮減裝置116所描述的,奇偶校驗數據可按頁、擦除塊等 輪換,從而對于一頁來說,額外存儲設備904可位于陣列的尾部,對于下一頁來說,額外存 儲設備904可以是陣列中的第一個設備,依此類推。存儲奇偶校驗數據的額外存儲設備904 可基于奇偶校驗輪換方案變換,如圖9A和9B中的電路或類似電路可允許陣列中的任何設 備存儲用于替換另一存儲設備902的奇偶校驗數據。圖11是示意性框圖,示出了根據本發(fā)明的檢測和替代失效數據存儲器的裝置 1100的再一種實施方式。裝置1100包括讀取模塊1002、ECC模塊1004和隔離模塊1006, 這些模塊基本上類似于相對于圖10的裝置1000描述的模塊。在不同的實施方式中,裝置 1100還可包括引退模塊1102、存儲設備重新配置模塊1104、記錄模塊1106、存儲區(qū)域測試 模塊1108、區(qū)重新配置模塊1110、分析模塊1112、錯誤存儲恢復模塊1114、修正數據模塊 1116和報告模塊1118,下文將描述這些模塊。在一種實施方式中,裝置1100包括引退模塊1102。響應于ECC模塊1004確定選 定的出錯的存儲設備,引退模塊1102引退選定的存儲設備902或選定的存儲設備902上的 一個或多個存儲區(qū)域。存儲區(qū)域(包括存儲設備902上的物理或邏輯區(qū)域,并包括選定的 存儲設備的至少一部分)如果包括一個或多個錯誤,則可以被引退。存儲區(qū)域可包括一個 或多個ECC組塊418的一部分、一個或多個物理頁406、一個或多個邏輯頁416、一個或多個 物理擦除塊404、一個或多個邏輯擦除塊414、芯片、芯片的一部分、一個或多個芯片塊的一 部分、一個或多芯片塊或者存儲設備902/存儲元件402的任何其他部分。引退模塊1102可通過永久地或暫時地將引退的存儲器脫離標準使用來引退選定 的存儲設備902或存儲區(qū)域(引退的存儲器)。在一種實施方式中,引退模塊1102通過向 存儲控制器發(fā)出引退的存儲器不再可用于標準讀取和寫入的信號來引退存儲器。隨后,引 退的存儲器可被進一步測試,然后被永久的關閉或基于引退策略被跟蹤。引退模塊1102甚 至可擦除引退的存儲器并允許其上的繼續(xù)操作,同時監(jiān)測為進一步的錯誤監(jiān)測引退的存儲 器。本領域技術人員會認識到引退存儲器的其他方法。引退模塊1102可使引退決定基于引退策略。在一種實施方式中,引退策略包括確 定何時引退引退的存儲器、引退的存儲器怎樣引退及類似問題的規(guī)則、用戶偏好和邏輯。引 退策略可包括引退的標準、引退的不同級別和引退的手段。例如,引退策略可指明在一定 數量的錯誤或錯誤的級別或嚴重程度之后,引退的存儲器暫時地停止標準操作并被標記為 測試協議。在另一個實例中,引退策略可指明在一定數量的錯誤之后,將警報發(fā)送給用戶。在某些實施方式中,引退模塊1102可在錯誤之后標記存儲區(qū)域,但隨后允許存儲 區(qū)域被存儲空間恢復操作(例如垃圾收集)恢復。例如,具有錯誤的擦除塊可被擦除,并且 后續(xù)的數據可被寫入擦除塊。如果用ECC模塊1004和隔離模塊1006在擦除塊中識別了額 外的錯誤,擦除塊可永久的引退。在一種實施方式中,引退策略為引退的存儲器指明宏引退手段或“自上而下”的方 法。具體地,宏引退可假設初始區(qū)是有缺陷的,初始區(qū)包括比實際缺陷大的存儲區(qū)。初始區(qū) 可包括選定的出錯的存儲設備902或整個設備上的存儲區(qū)域。隨后,宏引退可利用進一步 測試將初始區(qū)減少到實際有缺陷的存儲區(qū)域。在一種實施方式中,宏引退指明當選定的存儲設備902出錯時,整個存儲設備902被引退。在這點上,引退模塊1102可實施進一步地 測試以確定存儲設備902上的錯誤的范圍。引退模塊1102還可將錯誤隔離在存儲設備902 上的存儲區(qū)域之外。存儲設備902上未被錯誤影響的存儲區(qū)域可重新投入標準使用。因此, 在宏引退下,引退的存儲區(qū)域是集中的并通過額外測試被隔離。在另一種實施方式中,引退策略為引退的存儲器指明微引退手段或“自下而上”的 方法。具體地,微引退可始于已知的或假設為有缺陷的初始區(qū),并擴大初始區(qū)以包括有缺 陷的其他存儲區(qū)域。在一種實施方式中,在微引退下,僅僅是具有錯誤的存儲分區(qū)被初始引 退,而不是整個存儲設備902。引退模塊1102可進一步為額外錯誤測試或監(jiān)測相鄰存儲區(qū) 域上的標準讀取。如果發(fā)現額外錯誤,引退模塊1102可進一步引退存儲設備902上的額外 存儲區(qū)域或增加引退的存儲區(qū)域的尺寸。如下文所描述的,引退模塊1102可與其他模塊協 同工作以將錯誤定位和監(jiān)測存儲設備902。在一種實施方式中,裝置1100包括存儲設備重新配置模塊1104,存儲設備重新配 置模塊1104識別選定的出錯的存儲設備,從而數據被生成以為了將來的操作替代來自選 定的存儲設備902的讀取數據。如上所述,選定的出錯的存儲設備可以是響應于ECC模塊 1004確定結合有替代數據的可用數據不包含錯誤或包含可用ECC修正的錯誤而選定的存 儲設備。存儲設備重新配置模塊1104可與引退模塊1102協同工作以永久地或暫時地用結 合有替代的奇偶校驗數據的可用數據(如圖9A和9B所述)替代來自引退的存儲設備902 的數據。在一種實施方式中,裝置1100包括記錄模塊1106。響應于選定的出錯的存儲設 備,記錄模塊記錄選定的存儲設備902的標識并且/或者記錄指明包括一個或多個錯誤的 一個或多個存儲區(qū)域的存儲器位置數據。每次發(fā)生錯誤,錯誤信息可被記錄模塊1106記錄 并隨后被分析以將錯誤與特定存儲區(qū)域(如頁、塊、擦除塊等)隔離。一旦存儲設備902中 的存儲區(qū)域被確定,裝置1100可隔離那個區(qū),并用來自額外存儲設備904的數據替換,直到 選定的出錯的存儲設備被替代。記錄模塊1106可與引退模塊1102協同運行以跟蹤存儲設備902或存儲區(qū)域中的 錯誤。例如,根據宏引退,引退模塊1102可記錄選定的出錯的存儲設備的標識,而不記錄包 括具有一個或多個錯誤的存儲區(qū)域的存儲器位置數據,因為引退模塊1102在隔離錯誤之 前始于較大的區(qū)。如下所述,記錄模塊1106還可為被存儲區(qū)域測試模塊1108進行的進一 步的存儲區(qū)域測試識別的一個或多個存儲區(qū)域記錄存儲器位置數據,從而縮窄已知的出錯 的存儲設備902的區(qū)域。在另一種實施方式中,取代于記錄選定的出錯的存儲設備的標識,記錄模塊1106 根據微引退記錄存儲設備902上包括的一個或多個錯誤的一個或多個存儲區(qū)域。因此,整 個存儲設備902可不被記錄為出錯,而僅包括錯誤的存儲區(qū)域被記錄為出錯。此外,響應于 讀取模塊1002的后續(xù)讀取以及用ECC模塊1004和隔離模塊1006確定具有可通過結合替 代數據和可用數據而被修正的不可修正錯誤的額外存儲區(qū)域,記錄模塊1106也可記錄存 儲位置數據,該存儲位置數據指明包括選定的存儲設備902中的一個或多個錯誤的一個或 多個額外存儲區(qū)域。后續(xù)的讀取可包括由存儲區(qū)域測試模塊1108初始化,以將特定的額外 存儲區(qū)域作為目標來進行如下所述的測試。此外,后續(xù)的讀取可包括來自讀取請求的標準 讀取。
在一種實施方式中,裝置1100包括存儲區(qū)域測試模塊1108,存儲區(qū)域測試模塊 1108識別選定的存儲設備902內包括錯誤的一個或多個存儲區(qū)域。存儲區(qū)域測試模塊1108 可測試存儲設備902中被引退模塊1102根據宏引退記錄的存儲區(qū)域。因此,存儲區(qū)域測試 模塊1108可進一步通過利用讀取模塊1002進行的后續(xù)讀取和使用ECC模塊1004和隔離 模塊1006替代測試的存儲區(qū)域上的數據來識別具有一個或多個錯誤的存儲區(qū)域而隔離存 儲設備902上的包括錯誤的區(qū),并為測試下的具體存儲區(qū)域確定具有通過結合替代數據和 可用數據(如上所述)而可被修正的不可修正的錯誤的存儲區(qū)域。例如,記錄模塊1102根據宏引退記錄出錯的存儲設備902的標識,引退模塊1102 通過將選定的存儲設備902移出標準使用引退選定的出錯的存儲設備902并指派選定的存 儲設備902用于進一步測試,并且存儲區(qū)域測試模塊1108識別存儲設備902中出錯的存儲 區(qū)域。存儲區(qū)域測試模塊1108可將特定的存儲區(qū)域作為目標以用于測試,例如鄰近出錯的 存儲區(qū)域的存儲區(qū)域。此外,存儲區(qū)域測試模塊1108可擴大或壓縮測試下的或已知的包括 錯誤的存儲區(qū)域。在一種實施方式中,根據宏引退,當記錄模塊1102已經識別了出錯的存儲區(qū)域 時,存儲區(qū)域測試模塊1108可測試額外的存儲區(qū)域以確定存儲設備902中錯誤的范圍。由 于數據錯誤可局限于存儲設備902的某些區(qū),存儲區(qū)域測試模塊1108可測試鄰近錯誤的存 儲區(qū)域的額外存儲區(qū)域。本領域技術人員會認識到存儲區(qū)域測試模塊1108可測試額外的 存儲區(qū)域的不同方法。在一種實施方式中,裝置1100包括區(qū)重新配置模塊1110,區(qū)重新配置模塊1110用 來自一個或多個額外存儲設備的替代數據替代選定的存儲設備902中的一個或多個存儲 區(qū)域中的數據以用于將來的操作,從而選定的存儲設備902中的一個或多個存儲區(qū)域之外 的數據不被替代。例如,根據微引退,僅這些出錯的存儲區(qū)域可被初始引退。因此,區(qū)重新 配置模塊1110可替代出錯的存儲區(qū)域中的數據,而不替代其余存儲設備902中的數據。在 這種方式下,整個存儲設備902在沒有進一步測試的情況下是備用引退。在某些實施方式中,區(qū)重新配置模塊1110可使用相同額外存儲設備904替代一些 存儲區(qū)域上的數據。區(qū)重新配置模塊1110用來自額外存儲設備904的替代數據替代來自 選定的存儲設備902上存儲區(qū)域的數據,并且如果存儲區(qū)域和額外存儲區(qū)域不共享共同的 邏輯頁416,替代來自相同額外存儲設備904的額外存儲區(qū)的數據。額外存儲區(qū)域可駐留在 相同選定的存儲設備902上或不同的選定的存儲設備902上。例如,裝置1100可確定第一存儲設備90 上的區(qū)X出錯、第二存儲設備902b上 的區(qū)Y出錯、第三存儲設備902c上的區(qū)Z出錯,等等。只要區(qū)(X、Y、Z等)不重疊存儲器 地址(例如,區(qū)X中的地址不與區(qū)Y、Z等中的地址相同),區(qū)重新配置模塊1110可用修正 的數據替代第一存儲設備90 的區(qū)X的數據、用修正的數據替代第二存儲設備902b上區(qū) Y的數據、以及用來自相同額外存儲設備的修正的數據替代第三存儲設備902c的區(qū)Z的數 據。如果存儲區(qū)域和額外存儲區(qū)域共享共同的邏輯頁416或共同的存儲器地址,區(qū)重 新配置模塊1110可用來自額外存儲設備904的替代數據替代來自一個或多個存儲區(qū)域的 數據,并替代一個或多個不同的額外存儲設備904的額外存儲區(qū)域中的數據。在一種實施方式中,裝置1100包括分析記錄以確定選定的存儲設備902中具有數據錯誤的區(qū)的分析模塊1112,存儲設備90 -!!中具有錯誤的區(qū)的大小可通過分析記錄的 錯誤獨立地確定。此外,分析模塊1112也可利用故障中的更多詳情確定錯誤類型。例如,不 可修正的錯誤可被檢測,進一步的分析可表明錯誤是由于擦除失敗、程序失敗、讀取失敗、 診斷失敗、POST失敗和記錄。在一種實施方式中,裝置1100包括錯誤存儲恢復模塊1114,錯誤存儲恢復模塊 1114響應于選定的出錯的存儲設備擦除具有一個或多個錯誤的擦除塊以將該擦除塊準備 好用于將來的數據存儲。在閃存中,程序干擾(寫入干擾)和讀取干擾能夠導致暫時的錯 誤。對于特定的存儲位置而言,當存儲位置周圍的數據被編程或讀取時,數據線對其他編 程/讀取的位置的接近程度能夠干擾存儲位置中的數據。這種錯誤可以是通過在垃圾收集 (存儲空間恢復)操作中刷新存儲位置而解決的暫時性錯誤。在垃圾收集操作中,通常,有效數據從擦除塊或存儲器的其他區(qū)移動到另一區(qū),擦 除塊被擦除。對于閃存而言,這可涉及將“1”寫入擦除塊中的所有存儲單元,這種操作為單 元充電。隨后,擦除塊可被重新使用,新數據可被存儲在擦除塊中。然后,裝置1100可繼續(xù) 記錄錯誤,而且如果出錯的存儲位置在垃圾收集操作之前再次出錯,存儲位置可被引退并 被標記為永久不可用,而對應于額外存儲設備904中存儲位置的數據可被用于替換失效的 存儲位置。在一種實施方式中,裝置1100包括修正數據模塊1116,修正數據模塊1116響應于 選定的出錯的存儲設備而返回修正的數據。在一種實施方式中,當隔離模塊1006已經識別 了選定的出錯的存儲設備902時,修正的數據是通過隔離模塊1006結合有可用數據的替代 數據。如上所述,當結合有替代數據的可用數據不包含錯誤或包含可用ECC修正的錯誤時, 選定的出錯的存儲設備902被識別。在一種實施方式中,裝置1100包括響應于選定的出錯的存儲設備而報告錯誤的 報告模塊1118。報告模塊1118可報告錯誤以警告用戶潛在的存儲設備902故障或幫助錯 誤診斷。此外,報告模塊1118也可報告潛在的用戶可選定為引退的存儲設備902或存儲區(qū) 域。圖12是示意性流程圖,示出了根據本發(fā)明的檢測和替換失效數據存儲器的方法 1200的一種實施方式。方法1200開始,在步驟1202,讀取模塊1002從具有兩個或多個存 儲設備902和一個或多個額外存儲設備904(存儲來自存儲設備902的奇偶校驗信息)的 存儲設備的陣列讀取數據。在步驟1204,ECC模塊1004確定測試的數據中是否存在一個或多個錯誤,和錯誤 是否可用ECC修正。測試的數據包括由讀取模塊1002讀取的數據。ECC可與由讀取模塊 1002讀取的數據一起存儲在ECC組塊418中。響應于ECC模塊1004確定錯誤存在于讀取 模塊1002讀取的數據中而且錯誤不可用ECC修正,在步驟1206,隔離模塊1006從存儲設備 的陣列中選定存儲設備902。在步驟1208,隔離模塊1006用替代數據或根據存儲在一個或多個額外存儲設備 904上的奇偶校驗數據生成的數據替代讀取自選定的存儲設備902的數據。隔離模塊1006 使替代數據結合可用數據或讀取自未被選定的存儲設備902的數據。在步驟1208中,ECC 模塊1004為選定的存儲設備902確定結合有替代數據的可用數據不包含錯誤或包含可用 ECC修正的錯誤,方法1200結束。
圖13是示意性流程圖,示出了根據本發(fā)明的檢測和替換失效數據存儲器的方法 1300的另一種實施方式。方法1300示出了隔離模塊1006迭代每個存儲設備902。方法 1300開始,在步驟1302,ECC模塊1004檢測讀取的數據中的錯誤。在步驟1304,方法1300 選定存儲設備90 并迭代以確定哪個存儲設備902是壞的。在這個實例中,變量設置為 0(i = 0)。在步驟1306,讀取模塊1002隨后從存儲設備902讀取數據,除了被測試的存儲 設備902具有選定的MUX 912以從數據恢復906讀取數據。對于未選定的存儲設備902來 說,未修正的數據在步驟1308被讀取。在初次通過方法1300時,i =0,第一存儲設備90 被選定。對于選定的存儲設備90 ,未被修正的數據成為與數據恢復906的輸出(如C’C) 相異或的讀取的數據(如A)。然后,在步驟1312,ECC模塊1004確定數據是否可修正。如果數據可修正,則在步驟1316,隔離模塊1006返回選定的設備(i),方法1300 完成。如果ECC模塊1004在步驟1312確定數據仍然不可修正,則在步驟1314,隔離模塊 1006增加變量i。然后在步驟1318,隔離模塊1006確定變量i是否達到最大值,達到最大 值表明所有的存儲設備902已經被測試,如果隔離模塊1006在步驟1318確定變量i達到最 大值,則隔離模塊1006在步驟1320返回失效的消息,這表明不止一個存儲設備902出錯, 或一些其他的錯誤不能被裝置900修正。如果隔離模塊1006在步驟1318確定變量i未達到最大值,隔離模塊1006返回并 測試下一存儲設備902。方法1300繼續(xù),直到裝置900在步驟1312確定錯誤可修正或者所 有的存儲設備902都已被測試,裝置在步驟1320返回失敗信息。方法1300僅僅是本發(fā)明的一種實施方式,本領域技術人員會認識到選擇性地測 試存儲設備以用來自額外存儲設備904的數據替代存儲設備902的數據的其他方法。圖14是示意性流程圖,示出了根據本發(fā)明的檢測和替換失效數據存儲器的方法 1400的又一種實施方式。方法1400涉及分析錯誤以確定怎樣將存儲設備分段或分區(qū)以修 正錯誤。圖13的方法1300首先執(zhí)行,裝置1000隔離錯誤并返回哪個存儲設備902出錯和 存儲位置信息。方法1400開始,由記錄模塊1106記錄的錯誤數據被分析模塊1112分析 以確定發(fā)生了哪種類型的錯誤。例如,在步驟1402中,另一 ECC910不可修正的錯誤可被檢 測,并且進一步的分析可指示錯誤是由于擦除失敗1404、程序失敗1406、讀取失敗1408、診 斷失敗1410、POST失敗1412等。記錄的錯誤數據可被用于將錯誤與存儲設備902的特定 區(qū)隔離?;诜治觯诓襟E1414,方法1400將特定的壞的存儲設備識別為最小,但分析也 可以能夠隔離存儲設備902內壞的特定區(qū)。在步驟1416,方法1400確定壞的存儲設備902 是否已經被隔離。如果隔離,則在步驟1418,存儲設備重新配置模塊1104重新配置裝置 900、裝置950,以用來自額外存儲設備904的數據替換壞的存儲設備902,在步驟1420,當第 一次檢測到錯誤時,方法1400可重試操作。如果未隔離,則在步驟1422,方法1400返回失 敗消息。圖15A是示意性流程圖,示出了根據本發(fā)明的記錄具有錯誤的存儲區(qū)域的方法 1500的一種實施方式。方法1500是根據宏引退的一種實施方式,并且發(fā)生在錯誤在選定的 存儲設備902上被檢測出之后。方法1500開始,在步驟1502,記錄模塊1106記錄選定的存 儲設備902的標識。在另一種實施方式中,記錄模塊1106記錄初始區(qū),該初始區(qū)包括存儲 設備902上具有錯誤的區(qū)的擴展集。
在步驟1504,存儲區(qū)域測試模塊1108識別選定的存儲設備902中包括錯誤的存 儲區(qū)域。在另一種實施方式中,存儲區(qū)域測試模塊1108識別初始區(qū)(具有錯誤的區(qū)的擴展 集)內包括錯誤的存儲區(qū)域。在步驟1506,記錄模塊1106為由存儲區(qū)域測試模塊1108識別的一個或多個存儲 區(qū)域記錄存儲位置數據。此外,在步驟1508,存儲區(qū)域測試模塊1108利用后續(xù)的讀取(由 讀取模塊1002進行)和使用ECC模塊1004和隔離模塊1006確定具有不可修正的錯誤的 存儲區(qū)域(如上所述)來識別具有一個或多個錯誤的存儲區(qū)域,方法1500結束。存儲區(qū)域測試模塊1108可繼續(xù)將存儲設備902內的存儲區(qū)域作為整體或更大的 存儲區(qū)域測試,以隔離錯誤。在這種方式下,測試的區(qū)在自上而下的方法中重復的聚集。此 外,引退模塊1102可將存儲設備從標準操作引退,而方法1500根據引退策略進行。圖15B是示意性流程圖,示出了根據本發(fā)明的記錄具有錯誤的存儲區(qū)域的方法 1550的另一種實施方式。方法1550是根據宏引退的一種實施方式,并且發(fā)生在錯誤在選 定的存儲設備902上被檢測出之后。方法1550開始,在步驟1552中,記錄模塊1106記錄 包括一個或多個錯誤的一個或多個存儲區(qū)域。在步驟15M中,ECC模塊1004和隔離模塊 1006利用上述的后續(xù)的讀取識別具有錯誤的額外存儲區(qū)域。后續(xù)的讀取可包括由存儲區(qū)域 測試模塊1108初始化以將特定的存儲區(qū)域(例如相鄰的存儲區(qū)域)作為目標的讀取,從而 擴大已知的包括錯誤的存儲區(qū)域。后續(xù)的讀取也可是來自讀取請求的標準讀取,例如,如果 引退模塊1102未將存儲區(qū)域從標準操作中引退。在步驟1556中,記錄模塊1106記錄表明一個或多個具有錯誤的額外存儲區(qū)域的 存儲位置數據,方法1550結束。存儲區(qū)域測試模塊1108可繼續(xù)測試存儲區(qū)域以擴張存儲 區(qū)域或測試下的存儲區(qū)域。在這種方式下,測試下的區(qū)或已知為包括錯誤的區(qū)被重復地擴 大以按照自下而上的方法定位額外的錯誤。此外,引退模塊1102可將存儲區(qū)域從標準操作 中引退,同時方法1550根據引退策略進行。圖16是示意性流程圖,示出了根據本發(fā)明的引退擦除塊的方法1600的一種實施 方式。方法1600開始,在步驟1602,ECC模塊1004和隔離模塊1006如上所述地檢測存儲 設備902中的錯誤。在步驟1604,記錄模塊1106根據上述的引退策略記錄錯誤。在步驟 1606,引退模塊1102根據引退策略引退存儲設備902或存儲設備902內的存儲區(qū)域。如下 所述,在步驟1608中,重新配置裝置120可隨后配置存儲設備902以將數據寫入未出錯的 區(qū),方法1600結束。重新配置存儲元件圖17是示意性方框圖,示出了根據本發(fā)明的使用奇偶校驗數據重新配置受保護 的固態(tài)存儲元件402的陣列的裝置1700的一種實施方式。裝置1700包括重新配置裝置 120的一種實施方式,并且在一種實施方式中,包括存儲元件錯誤模塊1702、重新配置數據 讀取模塊1704、數據重新生成模塊1706、數據重新配置模塊1708和新配置存儲模塊1710, 下文將描述這些模塊。裝置1700在由David Flynn等人于2009年5月18日提交的題為 “Apparatus, System, and Method for Reconfiguring an Array toOperate with Less Storage Elements”、申請?zhí)枮椤拿绹鴮@暾堉幸灿兴枋?,通過引用將該申請并入 本文中。在一種實施方式中,裝置1700包括存儲元件錯誤模塊1702,存儲元件錯誤模塊1702確定一個或多個存儲元件402不可用于存儲數據(不可用存儲元件)。存儲元件402 可駐留在三個或更多個存儲元件402的陣列中。此外,陣列中的每個存儲元件402可包括 非易失性固態(tài)存儲器110。類似于上述的存儲元件的陣列400,數據被寫入陣列400的邏輯 頁416,邏輯頁416包括陣列400的每個存儲元件402上的頁。注意到不可用存儲元件402 可僅具有不可用的存儲元件402的區(qū)域,例如頁、擦除塊等,從而存儲元件402可用于區(qū)域 而不是不可用的區(qū)域。下述情況是有利的在服務中保持盡可能大的容量以提升性能和延 長存儲元件402的可用壽命。陣列400可包括N個存儲第一 ECC組塊418的存儲元件402和存儲生成自第一 ECC組塊418的第一奇偶校驗數據的P個存儲元件402。N個存儲元件402可存儲多個ECC 組塊418,P個存儲元件402可存儲生成自多個ECC組塊408的奇偶校驗數據。第一 ECC組 塊418的一部分存儲在N個存儲元件402中的每一個上。ECC組塊418包括數據(存儲的 數據)和生成自存儲的數據的ECC,第一 ECC組塊418的一部分存儲在N個存儲元件402中 的每一個上。在一種實施方式中,陣列400的存儲元件402中的每一個包括一個或多個附 加點,數據順序地存儲在存儲元件的陣列400上。數據被順序地存儲,從而數據被寫入附加點。順序存儲與隨機存取存儲的區(qū)別在 于在讀取-修改-寫入操作中,數據從一個位置被讀取、被修正,然后被寫入當前寫入數據 的附加點中。一旦數據被寫入,附加點移動到新寫入數據的尾端并為寫入新附加點的下一 數據準備好。在一種實施方式中,不可用存儲元件402是具有錯誤的存儲元件402或被如上所 述的檢測裝置118識別或引退的存儲元件402。在某些實施方式中,存儲元件錯誤模塊1702 通過確定第一 ECC組塊418中的錯誤不可用與第一 ECC組塊418 —起存儲的ECC修正來確 定存儲元件402出錯或不可用。存儲元件錯誤模塊1702可利用多個ECC組塊418來確定 存儲元件402出錯。不可用ECC修正的錯誤可表示,在讀取和寫入干擾之外,存儲元件402 存在問題。此外,用戶可具體指定不可用的存儲元件402。在一種實施方式中,存儲元件錯誤模塊1702通過確定正在起作用的存儲元件 402(正在失效的存儲元件)達到替代閾值來確定存儲元件402出錯。例如,存儲元件402 可仍然起作用,但可能正在失效、性能上退化或注定要失效。替代閾值可以是存儲元件402 的狀況的指示符。替代閾值可包括存儲在正在失效的存儲元件402中的數據的錯誤率、存 儲在正在失效的存儲元件402中的數據的錯誤次數、正在失效的存儲元件402上的讀取和 /或寫入操作的次數、正在失效的存儲元件402中的環(huán)境條件及類似指示。在存儲元件錯誤模塊1702確定一個或多個不可用存儲元件402之后,存儲元件錯 誤模塊1702可確定一個或多個額外不可用存儲元件402,如下文詳細描述的。在一種實施方式中,裝置1700包括重新配置數據讀取模塊1704,重新配置數據讀 取模塊1704從除不可用存儲元件402之外的存儲元件402讀取數據(可用數據)。在一種 實施方式中,可用數據包括來自邏輯頁416的數據。重新配置數據讀取模塊1704讀取可用 數據且并不讀取來自正在失效的存儲元件上的數據,從而獲取的數據不具有錯誤,或者獲 取的數據具有一些可用與數據一起存儲的ECC修正的錯誤。通常,相比于從正在失效的存 儲元件使用的數據,可用數據包含錯誤的機率較低。此外,如果不可用存儲元件402是非功 能性,不可用存儲元件402甚至可不被重新配置數據讀取模塊1704訪問。
在一種實施方式中,重新配置數據讀取模塊1704運行在后臺進程(例如存儲空間 恢復操作)中。存儲空間恢復操作的一個實例包括垃圾收集進程。通過在后臺進程中運行, 重新配置數據讀取模塊1704可將對固態(tài)存儲設備102的操作的妨礙最小化。在一種實施方式中,裝置1700包括數據重新生成模塊1706。響應于包括第一奇偶 校驗數據的可用數據,數據重新生成模塊1706使用第一奇偶校驗數據從第一 ECC組塊418 重新生成丟失的數據(丟失數據)。在另一種實施方式中,響應于包括ECC組塊418的可用 數據,數據重新生成模塊1706重新生成第一奇偶校驗數據。第一奇偶校驗數據可包括簡單 XOR奇偶校驗信息或者可以更復雜,涉及多個存儲奇偶校驗數據的存儲元件402。第一奇偶 校驗數據可以由檢測裝置118提供。同樣地,數據重新生成模塊1706可利用XOR操作(如 圖9A和9B描述的)或其他類似的本領域已知的奇偶校驗操作重新生成丟失數據。數據重 新生成模塊1706可利用用于ECC組塊418的奇偶校驗數據為多個ECC組塊418重新生成 丟失數據。在一種實施方式中,數據重新生成模塊1706運行在后臺進程(例如存儲空間恢 復操作)中。在一種實施方式中,裝置1700包括數據重新配置模塊1708,數據重新配置模塊 1708從可用數據、丟失數據和由存儲控制器接收的數據(新數據)中的一個或多個生成第 二 ECC。第二 ECC和用于創(chuàng)造第二 ECC的數據一起形成了第二 ECC組塊418。此外,數據重 新配置模塊1708也可從第二 ECC組塊418生成第二奇偶校驗數據以保護第二 ECC組塊418 中的數據。在一種實施方式中,數據重新配置模塊1708使新數據與第一 ECC組塊418分離, 從而第一 ECC與第二 ECC —致,而且第一 ECC組塊418與第二 ECC組塊418 —致。在另一 種實施方式中,新數據與來自第一 ECC組塊418的數據混合,從而數據重新配置模塊1708 為新數據和來自第一 ECC組塊418的一部分數據生成第二 ECC。在一種實施方式中,數據重 新配置模塊1708運行在后臺進程中,后臺進程例如存儲空間恢復操作(垃圾收集)。在一種實施方式中,裝置1700包括新配置模塊1710,新配置模塊1710將第二 ECC 組塊418的至少一部分和關聯的第二奇偶校驗數據存儲在(N+P)-Z個存儲元件402上,其 中,1≤Z≤P。因此第二 ECC組塊418和任何額外的重新配置的ECC組塊418被重新配置 為存儲在具有較少存儲元件402的陣列中。Z是不可用存儲元件402的數量。在簡單情況下,Z = 1,從而新配置存儲模塊1710將第二 ECC組塊418存儲在比 存儲第一 ECC組塊418存儲的設備少一個的設備上。每次存儲元件402或存儲元件402的 區(qū)域變得不同用時,重新配置裝置120重新配置存儲在存儲元件402的陣列400中的數據, 從而新配置存儲模塊1710將數據存儲在少一個的存儲元件402上,至少為了正被引退的區(qū) 域。在一種實施方式中,對于某些存儲區(qū)域而言,ECC組塊418存儲在N+P個存儲元件402 中,在其他存儲區(qū)域中,其他ECC組塊418存儲在(N+P)-l個存儲區(qū)域中,在其他存儲區(qū)域 中,其他ECC組塊418存儲在(N+P) -2個存儲區(qū)域中,等等。在一種實施方式中,陣列400的存儲元件402中的每一個包括一個或多個附加點, 數據順序地存儲在存儲元件的陣列400上。在這種實施方式中,新配置存儲模塊1710將第 二ECC組塊418和關聯的奇偶校驗數據存(N+P)-Z個存儲元件402中的每一個的附加點上。 每個附加點被移動到在恰好在移動附加點之前存儲的數據的尾端。當新配置存儲模塊1710存儲產生第二 ECC組塊418和第二奇偶校驗數據時,可利用少一個的奇偶校驗設備或少一個的數據設備重新配置數據。例如,如果第一 ECC組塊418 存儲在N個存儲元件402中并利用兩個或多個存儲元件402(即,PP ^ 2)上的奇偶校驗數 據保護,則新配置存儲模塊1710能夠生成第二 ECC組塊418和第二奇偶校驗數據,從而第 二 ECC組塊418仍然存儲在N個存儲元件402上,但奇偶校驗信息存儲在P_1個存儲元件 402上。在這個實例中,陣列400的性能不會受到影響,但數據的奇偶校驗保護將少一層并 且能容許的存儲元件402失效也將少一次。 在P = 1或奇偶校驗保護保持不變的情況下,新配置存儲模塊1710能夠生成第二 ECC組塊和第二奇偶校驗數據,從而第二 ECC組塊能夠被存儲在N-I個存儲元件402上,并 且奇偶校驗信息能夠存儲在P個存儲元件402上。在這種情況下,陣列400的性能將降低, 這是由于存儲數據的存儲元件402較少,然而,奇偶校驗保護將保持不變。
不可用存儲元件402可以是存儲數據的存儲元件402或存儲奇偶校驗數據的存儲 元件402,這取決于被存取的邏輯頁416的位置和奇偶校驗數據的輪換。然而,存儲在不可 用存儲設備402上的數據的性質不需要與由新配置存儲模塊1710存儲的數據的配置有任 何關系。因此,如果不可用存儲元件402存儲奇偶校驗數據,在一種實施方式中,新配置存 儲模塊1710可將第二 ECC組塊418的一部分存儲在(N-Z)個存儲元件402上,將關聯的第 二奇偶校驗數據存儲在P個存儲元件402上,或者在另一種實施方式中,新配置存儲模塊 1710可將第二 ECC組塊418的一部分存儲在N個存儲元件402上,將關聯的第二奇偶校驗 數據存儲在P-Z個存儲元件402上,其中P > 1。在一種實施方式中,新配置存儲模塊1710將第二 ECC組塊418的一部分存儲在先 前是存儲奇偶校驗數據的存儲元件402的設備上。同樣地,在另一種實施方式中,新配置 存儲模塊1710將與第二 ECC組塊418關聯的奇偶校驗數據存儲在先前是存儲來自ECC組 塊418的數據的存儲元件402的設備上。一旦存儲區(qū)域(例如邏輯擦除塊414)已被擦除, 且準備好再次存儲數據,重新配置裝置120能夠以任何方便的組合存儲數據和奇偶校驗數 據。在優(yōu)選實施方式中,第二 ECC組塊418存儲在不同于被讀取以獲取第一 ECC組塊418 的邏輯擦除塊414的邏輯擦除塊414中。存儲的重新配置可重新配置邏輯擦除塊414以及 ECC組塊418存儲在邏輯擦除塊414內的方式。這可從存儲在存儲元件402上的ECC組塊 418內部改變位數。在另一種重新配置中,ECC組塊418的大小可被修改以維持由存儲元件 402上的ECC組塊418存儲的相同位數。冗余存儲系統(tǒng)(例如RAID系統(tǒng))在一定數量的數據或奇偶校驗存儲元件402失效 的情況下提供了數據保護。陣列400以一種類RAID的方式被保護,因為數據類似于RAID被 條帶化且利用奇偶校驗數據被保護。如果這些存儲元件402不被替代,缺陷的或不可用的 存儲元件402的數量降低到RAID系統(tǒng)所能容納的失效存儲元件402的數量之下,數據將丟 失。然而,通過將存儲元件的N+P個陣列400重新配置成存儲元件的(N+P)-Z個陣列400, 即使在存儲元件402未被替代的情況下,陣列仍400可保持數據保護的級別。有利地是,不 像常規(guī)RAID配置,失效的存儲元件402不需要被替代。通過重新配置被RAID的數據,余下 的功能性存儲元件402可被重新配置為容納失效的存儲元件402。在按上述的那樣使用宏引退方法的情況下,可能需要逆向重新配置以將(N+P)_l 變回(N+P)狀態(tài)。這個進程實質上與上述的一樣,本領域技術人員將認識到第二 ECC組塊 418可被進一步重新配置為存儲在N+P個存儲元件418上。
此外,如果更多的存儲元件402失效或變得不可用,裝置1700可繼續(xù)重新配置ECC 組塊418。在存儲元件錯誤模塊1702識別一個或多個不可用存儲元件402并且重新配置數 據讀取模塊1704、數據重新生成模塊1706、數據重新配置模塊1708和新配置存儲模塊1710 運作以將一個或多個ECC組塊418存儲在(N+P) -Z個存儲元件402之后,存儲元件錯誤模 塊1702可識別更多個不可用存儲元件402。因此,重新配置數據讀取模塊1704、數據重新 生成模塊1706、數據重新配置模塊1708和新配置存儲模塊1710運作以將一個或多個額外 ECC組塊418存儲在((N+P)-Z)-Y個存儲元件402上。Y可以表示在最近的重新配置之后 確定的不可用存儲元件402的數量。圖18是示意性方框圖,示出了根據本發(fā)明的使用奇偶校驗數據重新配置受保護 的固態(tài)存儲元件402的陣列的裝置1800的另一種實施方式。裝置1800包括存儲元件錯誤 模塊1702、重新配置數據讀取模塊1704、數據重新生成模塊1706、數據重新配置模塊1708 和新配置存儲模塊1710,這些模塊大體上類似于相對于圖17的裝置1700描述的模塊。在不 同實施方式中,裝置1800也可包括重新配置記錄模塊1802和存儲元件錯誤位置模塊1804, 下文將描述這些模塊。在一種實施方式中,裝置1800包括重新配置記錄模塊1802,重新配置記錄模塊 1802識別存儲元件的陣列400的一個或多個區(qū)域,其中數據存儲在(N+P)-Z個存儲元件 402上。重新配置記錄模塊1802可通過將關于區(qū)域的數據記錄在記錄文件中來識別區(qū)域, 記錄文件例如區(qū)域的位置、時間戳或有關于重新配置的數據何時首先被存儲在區(qū)域中的序 列信息,等等。一個或多個區(qū)域可包括存儲元件402上或多個存儲元件402上的物理或邏 輯區(qū)域。區(qū)域可包括邏輯頁416的一部分、邏輯頁416、邏輯頁416的群組、擦除塊的一部 分、擦除塊、擦除塊的群組、一個或多個芯片塊或一個或多個芯片。在一種實施方式中,重新 配置記錄模塊1802利用邏輯-物理映射識別記錄中的區(qū)域。記錄文件可在讀取操作、程序 化操作等中使用,從而存儲控制器104得知要存取哪些存儲元件402。在一種實施方式中,重新配置記錄模塊1802為不可用存儲元件402上的數據存儲 跟蹤不可用的存儲區(qū)域。如果存儲元件402的某些部分不可用且不起作用,數據可仍然存 儲在可用部分上。因此,重新配置記錄模塊1802跟蹤不可用存儲區(qū)域上,從而數據存儲在 (N+P)-Z個存儲元件上用于不可用區(qū)域,并存儲在N+P個存儲元件402上用于不可用存儲 區(qū)域之外的位置。存儲區(qū)域包括N+P個存儲元件402的每一個的一部分,并可包括邏輯頁 416的一部分、邏輯頁416、多個邏輯頁416、邏輯擦除塊414的一部分、邏輯擦除塊414、多 個擦除塊414、芯片塊、多個芯片塊、芯片和/或多個芯片。重新配置記錄模塊1802防止浪 費存儲元件402的功能性部分。在一種實施方式中,重新配置記錄模塊1802跟蹤具有變化數量的存儲元件402的 不可用存儲區(qū)域。具體地,重新配置記錄模塊1802可跟蹤一個或多個不可用存儲區(qū)域,其 中,數據在(N+P) -Z個存儲元件402和一個或多個額外不可用存儲區(qū)域上,在額外不可用存 儲區(qū)域中,數據存儲在((N+P)-Z)-X個存儲元件402上。在除了不可用存儲區(qū)域之外的存 儲區(qū)域中,數據存儲在N+P個存儲元件402中。通常,相比于具有較少不可用存儲元件402的存儲區(qū)域而言,具有較多不可用存 儲元件402的存儲區(qū)域具有較高的性能。在一種實施方式中,根據數據的性能要求,數據存 儲并隔離在存儲元件的陣列400中。在該實施方式中,具有較高性能要求的數據被指定有高優(yōu)選級,以被存儲在具有較高性能的存儲區(qū)域中。例如,頻繁存取的某些數據可被存儲在 具有較高性能的存儲區(qū)域中。如上所述,N個存儲元件402的N值較大的存儲元件的陣列 400可具有較高的性能。在一種實施方式中,存儲元件錯誤模塊1702通過確定第一 ECC組塊418中的錯誤 不可利用與第一 ECC組塊418 —起存儲的ECC修正來確定存儲元件402出錯。例如,存儲 元件錯誤模塊1702可使用檢測裝置118來確定第一 ECC組塊418中的錯誤不可修正。在 另一種實施方式中,存儲元件錯誤模塊1702包括存儲元件錯誤位置模塊1804,存儲元件錯 誤位置模塊1804使用存儲在存儲一個或多ECC組塊418的一個或多個存儲元件402中的 和存儲在存儲關聯的奇偶校驗數據的存儲元件402中的數據來識別不可用于存儲數據的 存儲元件402。存儲元件錯誤位置模塊1804可包括上述的檢測裝置118的一種實施方式, 以識別不可用的存儲元件。在一種實施方式中,存儲元件錯誤位置模塊1804使用硬件門和 邏輯來替換存儲在存儲一個或多個ECC組塊418的一個或多個存儲元件402中的數據。圖19是示意性流程圖,示出了根據本發(fā)明的使用奇偶校驗數據重新配置受保護 的固態(tài)存儲元件402的陣列400的方法1900的一種實施方式。方法1900開始,在步驟1902, 存儲元件錯誤模塊1702確定一個或多個存儲元件402不可用于存儲數據(不可用存儲元 件)。存儲元件402是三個或更多個存儲元件402的陣列的一部分,數據被寫入陣列400的 邏輯頁416中。此外,陣列400包括存儲第一 ECC組塊418的N個存儲元件402和存儲生 成自第一 ECC組塊418的第一奇偶校驗數據的P個存儲元件402。在步驟1904,重新配置數據讀取模塊1704從除不可用存儲元件402之外的存儲元 件402讀取數據(可用數據)??捎脭祿▉碜赃壿嬳?16的數據。如果可用數據包括 第一奇偶校驗數據,則在步驟1906,數據重新生成模塊1706用第一奇偶校驗數據重新生成 來自第一 ECC組塊418的丟失的數據(丟失數據)。在步驟1908,數據重新配置模塊1708從可用數據、丟失數據和/或存儲控制器接 收的數據生成第二 ECC (新數據)。第二 ECC和數據被數據重新配置模塊1708用以創(chuàng)建第 二 ECC組塊418。數據重新配置模塊1708也從第二 ECC組塊418生成第二奇偶校驗數據。 在一種實施方式中,數據重新配置模塊1708不包括新數據,因此第二 ECC生成自第一 ECC 組塊418的數據并因此通常與第一 ECC —致。在這種情況下,第二 ECC組塊418與第一 ECC 組塊418 —致。在新數據與第一 ECC組塊418的數據混合的情況下,第二 ECC組塊418的 數據不同于第一 ECC組塊418的數據,因此,第二 ECC不同于第一 ECC,第二 ECC組塊418不 同于第一 ECC組塊418。在步驟1910,新配置存儲模塊1710將第二 ECC組塊418的一部分和關聯的第二奇 偶校驗數據存儲在(N+P)-Z個存儲元件402上,其中1P,方法1900結束。在一種實 施方式中,至少重新配置數據讀取模塊1704、數據重新生成模塊1706和數據重新配置模塊 1708可運行在后臺進程中。此外,后臺進程可與垃圾收集一起運行。圖20是示意性流程圖,示出了根據本發(fā)明的用于確定額外不可用存儲元件402的 方法2000的一種實施方式。方法2000開始,在步驟2002,存儲元件錯誤模塊1702確定一 個或多個存儲元件402是不可用存儲元件402。在步驟2004,重新配置數據模塊1704、數據 重新生成模塊1706、數據重新配置模塊1708和新配置存儲模塊1710運作以將一個或多個 ECC組塊418存儲在(N+P)-Z個存儲元件402上,其中,Z是被發(fā)現不可用的存儲元件402的數量。在步驟2006,存儲元件錯誤模塊1702再次確定一個或多個額外存儲元件402不 可用。在步驟2008,重新配置數據模塊1704、數據重新生成模塊1706、數據重新配置模塊 1708和新配置存儲模塊1710運作以將一具或多個額外ECC組塊418存儲在((N+P)_Z)_Y 個存儲元件402上,其中,Y是被發(fā)現為不可用的額外存儲元件402的數量。在步驟2010, 重新配置記錄模塊1802跟蹤一個或多個不可用存儲區(qū)域,其中,數據存儲在(N+P)-Z個存 儲元件402和一個或多個額外不可用存儲區(qū)域上,在額外不可用存儲區(qū)域中,數據存儲在 ((N+P) -Z) -Y個存儲元件402上,方法2000結束。本發(fā)明可采用其他指定形式實施而不脫離本發(fā)明的宗旨或本質特點。描述的實施 方式在各個方面被視為僅僅是示例性而不是限制性的。因此,本發(fā)明的范圍由附屬的權利 要求確定,而不是由上述說明書確定。在本發(fā)明的權利要求的含義和等價范圍內的所有改 變被包含在本發(fā)明的保護范圍內。
權利要求
1.一種檢測和替代失效的數據存儲器的裝置,該裝置包括讀取模塊,其從存儲設備的陣列讀取數據,該陣列包括兩個或多個存儲設備和一個或 多個額外存儲設備,額外存儲設備存儲來自存儲設備的奇偶校驗信息;ECC模塊,其利用糾錯碼(ECC)確定測試的數據是否存在一個或多個錯誤以及錯誤是 否可用ECC修正,測試的數據包括由讀取模塊讀取的數據;隔離模塊,所述隔離模塊響應于ECC模塊確定錯誤存在于由讀取模塊讀取的數據中且該錯誤不 可用ECC修正而從存儲設備的陣列選定存儲設備;并利用包括生成自奇偶校驗數據的數據(替代數據)和讀取自未被選定的存儲設備的數 據(可用數據)的數據替代讀取自選定的存儲設備的數據,奇偶校驗數據存儲在一個或多 個額外存儲設備上,其中,測試的數據還包括結合有替代數據的可用數據。
2.如權利要求1所述的裝置,其中,隔離模塊響應于ECC模塊確定結合有替代數據的可 用數據包含不可用ECC修正的錯誤而選定用于測試的下一存儲設備,下一存儲設備選自存 儲設備的陣列,隔離模塊選定每個隔離模塊用于測試,直到ECC模塊確定結合有替代數據 的可用數據不包含錯誤或包含可用ECC修正的錯誤。
3.如權利要求1所述的裝置,還包括引退模塊,其響應于ECC模塊確定結合有替代數據 的可用數據不包含錯誤或包含可用ECC修正的錯誤而基于引退策略引退選定的存儲設備 和選定的存儲設備上的一個或多個存儲區(qū)域中的一個,該一個或多個存儲區(qū)域包括一個或 多個錯誤,存儲區(qū)域包括選定的存儲設備的至少一部分。
4.如權利要求1所述的裝置,還包括存儲設備重新配置模塊,其響應于ECC模塊確定結 合有替代數據的可用數據不包含錯誤或包含可用ECC修正的錯誤而識別選定的存儲設備, 從而為將來的操作生成數據以替代來自選定的存儲設備的讀取數據。
5.如權利要求1所述的裝置,還包括記錄模塊,其響應于ECC模塊確定結合有替代數據 的可用數據不包含錯誤或包含可用ECC修正的錯誤,進行下述操作中的一個或多個記錄選定的存儲設備的標識;和記錄指明包括一個或多個錯誤的一個或多個存儲區(qū)域的存儲位置數據,該區(qū)域包括選 定的存儲設備的至少一部分。
6.如權利要求5所述的裝置,其中,記錄模塊記錄選定的存儲設備的標識而不記錄包 括具有一個或多個錯誤的存儲區(qū)域的存儲位置數據。
7.如權利要求6所述的裝置,還包括存儲區(qū)域測試模塊,其識別選定的存儲設備內包 括錯誤的一個或多個存儲區(qū)域,并且其中,記錄模塊還記錄包括由存儲區(qū)域測試模塊識別 的一個或多個存儲區(qū)域的存儲位置數據。
8.如權利要求7所述的裝置,其中,存儲區(qū)域測試模塊利用由讀取模塊進行的后續(xù)讀 取并使用ECC模塊和隔離模塊確定具有不可修正的錯誤的存儲區(qū)域來識別具有一個或多 個錯誤的存儲區(qū)域,其中所述不可修正的錯誤通過結合替代數據和可用數據是可修正的。
9.如權利要求5所述的裝置,其中,記錄模塊記錄包括一個或多個錯誤的一個或多個 存儲區(qū)域,還響應于讀取模塊進行的后續(xù)讀取和使用ECC模塊和隔離模塊確定具有不可修 正的錯誤的存儲區(qū)域,記錄指明選定的存儲設備中包括一個或多個錯誤的一個或多個額外存儲區(qū)域的存儲位置數據,其中所述不可修正的錯誤通過結合替代數據和可用數據是可修 正的。
10.如權利要求9所述的裝置,其中,后續(xù)讀取包括由存儲區(qū)域測試模塊初始化的讀取 和來自讀取請求的讀取中的一個。
11.如權利要求5所述的裝置,還包括區(qū)重新配置模塊,其為了將來的操作,用來自一 個或多個額外存儲設備的替代數據替代選定的存儲設備中一個或多個存儲區(qū)域的數據,從 而選定的存儲設備中一個或多個存儲區(qū)域外的數據不被替代。
12.如權利要求11所述的裝置,其中,區(qū)重新配置模塊用來自一個或多個額外存儲設 備的替代數據替代來自選定的存儲設備上的一個或多個存儲區(qū)域的數據,并用來自相相同 的一個或多個額外存儲設備的替代數據替代來自相同選定的存儲設備或不同選定的存儲 設備上的一個或多個額外存儲區(qū)域的數據,一個或多個額外存儲區(qū)域中的每一個包括一個 或多個錯誤,其中,一個或多個存儲區(qū)域和一個或多個額外存儲區(qū)域不共享共同的邏輯頁。
13.如權利要求11所述的裝置,其中,區(qū)重新配置模塊用來自一個或多個額外存儲設 備的替代數據替代來自一個或多個存儲區(qū)域的數據,并用來自一個或多個不同的額外存儲 設備的替代數據替代一個或多個額外存儲區(qū)域,一個或多個額外存儲區(qū)域中的每一個包括 一個或多個錯誤,其中,一個或多個存儲區(qū)域和一個或多個額外存儲區(qū)域共享共同的邏輯 頁。
14.如權利要求5所述的裝置,其中,存儲區(qū)域包括下述中的一個或多個一個或多個 ECC組塊、一個或多個物理頁、一個或多個邏輯頁、一個或多個物理擦除塊、一個或多個邏輯 擦除塊、芯片、芯片的一部分、一個或多個芯片塊的一部分和一個或多個芯片塊。
15.如權利要求5所述的裝置,還包括分析模塊,其分析記錄以確定下述中的一項或多 項選定的存儲設備中具有數據錯誤的區(qū)和錯誤類型。
16.如權利要求1所述的裝置,還包括錯誤存儲恢復模塊,其響應于ECC模塊確定結合 有替代數據的可用數據不包含錯誤或包含可用ECC修正的錯誤而擦除具有一個或多個錯 誤的擦除塊以將擦除塊準備用于將來的數據存儲。
17.如權利要求16所述的裝置,其中,引退模塊引退擦除塊并響應于下述情況用來自 一個或多個額外存儲設備的替代數據替代來自擦除塊的數據存儲錯誤恢復模塊擦除擦除塊,順序地將額外數據寫入擦除塊,讀取模塊順序地讀取額外數據,和使用ECC模塊和隔離模塊確定擦除塊包括不可修正的錯誤,其中所述不可修正的錯誤 通過結合替代數據和可用數據是可修正的。
18.如權利要求1所述的裝置,其中,讀取模塊從邏輯頁的至少一部分讀取數據,邏輯 頁遍及存儲設備的陣列,存儲設備的陣列包括N+P個存儲元件的陣列,存儲元件的陣列包 括N個每個存儲ECC組塊的一部分的存儲元件和P個存儲奇偶校驗數據的存儲元件,ECC組 塊包括存儲的數據和生成自存儲的數據的ECC,其中ECC遍及存儲的數據,P個存儲元件存 儲生成自存儲在N個存儲元件中的ECC組塊的奇偶校驗數據。
19.如權利要求1所述的裝置,還包括修正數據模塊,其響應于ECC模塊確定結合有替 代數據的可用數據不包含錯誤或包含可用ECC修正的錯誤而返回修正的數據。
20.如權利要求1所述的裝置,還包括報告模塊,其響應于ECC模塊確定結合有替代數 據的可用數據包含不可用ECC修正的錯誤而報告錯誤。
21.如權利要求1所述的裝置,其中,每個存儲設備包括非易失性固態(tài)存儲器。
22.—種檢測和替代失效的數據存儲器的系統(tǒng),該系統(tǒng)包括存儲設備的陣列,該陣列包括兩個或多個存儲設備和一個或多個額外存儲設備,額外 存儲設備存儲來自存儲設備的奇偶校驗信息; 控制陣列的存儲控制器; 從存儲設備的陣列讀取數據的讀取模塊;ECC模塊,其利用糾錯碼(ECC)確定測試的數據是否存在一個或多個錯誤以及錯誤是 否可用ECC修正,測試的數據包括由讀取模塊讀取的數據; 隔離模塊,所述隔離模塊響應于ECC模塊確定錯誤存在于由讀取模塊讀取的數據中 且該錯誤不可用ECC修正而從存儲設備的陣列選定存儲設備;并 利用包括生成自奇偶校驗數據的數據(替代數據)和讀取自未被選定的存儲設備的數 據(可用數據)的數據替代讀取自選定的存儲設備的數據,奇偶校驗數據存儲在一個或多 個額外存儲設備上,其中,測試的數據還包括結合有替代數據的可用數據。
23.一種包括計算機可讀媒體的計算機程序制品,該計算機可讀媒體具有計算機可讀 的程序代碼,可執(zhí)行該程序代碼以實現檢測和替代失效的數據存儲器的操作,該計算機程 序制品的操作包括從存儲設備的陣列讀取數據,該陣列包括兩個或多個存儲設備和一個或多個額外存儲 設備,額外存儲設備存儲來自存儲設備的奇偶校驗信息;利用糾錯碼(ECC)確定測試的數據是否存在一個或多個錯誤以及錯誤是否可用ECC修 正,測試的數據包括由讀取模塊讀取的數據;響應于ECC模塊確定錯誤存在于數據中且該錯誤不可用ECC修正而從存儲設備的陣列 選定存儲設備;利用包括生成自奇偶校驗數據的數據(替代數據)和讀取自未被選定的存儲設備的數 據(可用數據)的數據替代讀取自選定的存儲設備的數據,奇偶校驗數據存儲在一個或多 個額外存儲設備上;及確定測試的數據是否不包含錯誤或包含可用ECC修正的錯誤,測試的數據還包括結合 有替代數據的可用數據。
全文摘要
本發(fā)明公開了一種用于檢測和替代失效的數據存儲器的裝置、系統(tǒng)和方法。讀取模塊1002從存儲設備902、904的陣列讀取數據。該陣列包括存儲設備902和存儲來自存儲設備902的奇偶校驗信息的額外存儲設備904。ECC模塊1004利用糾錯碼(ECC)確定測試的數據是否存在錯誤以及錯誤是否可用ECC修正。測試的數據包括由讀取模塊1002讀取的數據。隔離模塊1006響應于ECC模塊1004確定錯誤存在于由讀取模塊1002讀取的數據中且數據是不可修正的而選定存儲設備902。隔離模塊1006還用替代數據和可用數據替代讀取自選定的存儲設備902的數據,其中,測試的數據包括結合有替代數據的可用數據。
文檔編號G11C29/00GK102124527SQ200980128013
公開日2011年7月13日 申請日期2009年5月18日 優(yōu)先權日2008年5月16日
發(fā)明者喬納森·撒切爾, 喬舒亞·昂, 凱文·維格爾, 大衛(wèi)·弗林, 杰里米·菲靈吉姆, 比爾·因斯克普, 約翰·斯特拉瑟 申請人:弗森-艾奧公司