本發(fā)明涉及計算機技術(shù),尤其涉及一種閃存糾錯方法和裝置。
背景技術(shù):
::隨著閃存技術(shù)的不斷成熟,其被廣泛應用于固態(tài)存儲領域。但是閃存中保存的數(shù)據(jù),可能存在若干比特位的錯誤,如果直接將閃存物理頁中讀出的數(shù)據(jù)返回給上層業(yè)務,就可能造成業(yè)務失敗。為了保證返回給上層業(yè)務的數(shù)據(jù)是正確有效的,需要對業(yè)務數(shù)據(jù)進行錯誤檢查和糾正(ErrorCorrectingCode,簡稱為:ECC)保護,即對業(yè)務數(shù)據(jù)進行ECC編碼,然后將ECC編碼后的數(shù)據(jù)寫入閃存。每當讀取數(shù)據(jù)時,對從閃存中讀取出來的數(shù)據(jù)進行錯誤檢查和糾正,從而提升業(yè)務數(shù)據(jù)的可靠性。但ECC保護的糾錯能力有一定的范圍,只能在頁面數(shù)據(jù)中出現(xiàn)比特位錯誤數(shù)量不超過一定的上限時才有效。如果所讀取的介質(zhì)顆粒中發(fā)生錯誤的比特的個數(shù)超過了ECC糾錯碼的糾錯能力,則糾錯碼將無法恢復原始存儲的數(shù)據(jù)信息,導致存儲信息的丟失。為了避免存儲信息的丟失,現(xiàn)有技術(shù)中常用的解決方案是Readretry,即如果用默認的讀電壓閾值讀取介質(zhì)顆粒的狀態(tài)后用糾錯碼無法恢復原始信息時,通過調(diào)整讀電壓閾值,再次進行讀取介質(zhì)顆粒的狀態(tài)并用糾錯碼恢復原始信息的機制?,F(xiàn)有技術(shù)需要多次調(diào)整讀電壓閾值進行嘗試性的讀取數(shù)據(jù),從而造成了讀時延的成倍增加(通常從微秒量級增加到毫秒量級),導致SSD存儲系統(tǒng)性能的大幅降低。技術(shù)實現(xiàn)要素:本發(fā)明實施例提供一種閃存糾錯方法和裝置,以克服現(xiàn)有技術(shù)中由于讀時延的成倍增加而導致的SSD存儲系統(tǒng)大幅降低的問題。第一方面,本發(fā)明實施例提供一種閃存糾錯方法,包括:步驟101:在對采用第n讀電壓閾值讀取的閃存頁數(shù)據(jù)進行糾錯譯碼失敗后,采用第n+1讀電壓閾值讀取閃存頁的數(shù)據(jù),其中,第n+1讀取電壓閾值與第n讀電壓閾值不同,n為大于等于1的正整數(shù);步驟102:確定采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)和采用第m讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中的第一數(shù)據(jù)位,第一數(shù)據(jù)位為采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中與采用第m讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中相同數(shù)據(jù)位對應的數(shù)據(jù)不同的數(shù)據(jù)位,m為大于等于1且小于等于n的正整數(shù);步驟103:降低采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中的第一數(shù)據(jù)位的可信度,可信度為第一數(shù)據(jù)位對應的置信度的絕對值;步驟104:根據(jù)調(diào)整后的第一數(shù)據(jù)位的可信度,對采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)進行糾錯譯碼。在本實施例中,聯(lián)合使用兩次讀取的同一閃存頁得到的數(shù)據(jù),降低數(shù)據(jù)位不同的數(shù)據(jù)對應的數(shù)據(jù)位的可信度,從而有效提高了糾錯譯碼的成功率,減小了讀時延,使得SSD存儲系統(tǒng)的性能大幅提升。在前述第一方面的一些實施例中,還可以包括:確定采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)和采用第m讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中的第二數(shù)據(jù)位,第二數(shù)據(jù)位為采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中與采用第m讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中相同數(shù)據(jù)位對應的數(shù)據(jù)相同的數(shù)據(jù)位;然后,提高采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中的第二數(shù)據(jù)位的可信度。在本實施例中,通過聯(lián)合使用兩次讀取的同一閃存頁得到的數(shù)據(jù),在降低降低數(shù)據(jù)位不同的數(shù)據(jù)對應的數(shù)據(jù)位可信度的同時,提高數(shù)據(jù)位相同的數(shù)據(jù)對應的數(shù)據(jù)位的可信度,從而可以進一步的提高糾錯譯碼的成功率。在前述第一方面的一些實施例中,確定采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)和采用第m讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中的第一數(shù)據(jù)位,具體包括:將采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)和采用第m讀電壓閾值讀取閃存頁得到的數(shù)據(jù)進行異或運算得到聯(lián)合數(shù)據(jù);若聯(lián)合數(shù)據(jù)中的數(shù)據(jù)位的值為1,則確定該數(shù)據(jù)位為第一數(shù)據(jù)位。在本實施例中,通過異或的方法可快速得到數(shù)據(jù)不同的數(shù)據(jù)位,有效減小了糾錯譯碼的時延。進一步的,在上述實施例的基礎上,根據(jù)調(diào)整后的第一數(shù)據(jù)位的可信度,對采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)進行糾錯譯碼之后,還包括:如果糾錯譯碼成功,則將第n+1讀電壓閾值修改為預設讀電壓閾值;如果糾錯譯碼不成功,則將n遞增1,并重新執(zhí)行上述第一方面中步驟101至步驟104。本實施例中,當譯碼不成功時,則重新循環(huán)執(zhí)行上述第一方面中的步驟101至步驟104,從而有效提高了糾錯譯碼的成功率。進一步的,重新執(zhí)行上述第一方面中步驟101至步驟104之前還需要判斷n遞增后的的值是否大于預設閾值,若不大于,則重新執(zhí)行上述第一方面中步驟101至步驟104;若大于,則確定閃存頁所在的數(shù)據(jù)塊為壞塊。本實施例中,當多次執(zhí)行上述各個實施例的步驟后,如果譯碼均不成功,則終止譯碼過程,且上報錯誤,從而避免下次繼續(xù)使用該數(shù)據(jù)塊。進一步的,根據(jù)調(diào)整后的第一數(shù)據(jù)位的可信度,對采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)進行糾錯譯碼,包括:采用低密度奇偶校驗碼LDPC對采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)進行糾錯譯碼。第二方面,本發(fā)明實施例提供一種閃存糾錯裝置,包括:讀取模塊、確定模塊、可信度調(diào)整模塊和譯碼模塊,具體的:讀取模塊,用于在對采用第n讀電壓閾值讀取的閃存頁數(shù)據(jù)進行糾錯譯碼失敗后,采用第n+1讀電壓閾值讀取閃存頁的數(shù)據(jù),第n+1讀取電壓閾值與第n讀電壓閾值不同,n為大于等于1的正整數(shù);確定模塊,用于確定采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)和采用第m讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中的第一數(shù)據(jù)位,第一數(shù)據(jù)位為采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中與采用第m讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中相同數(shù)據(jù)位對應的數(shù)據(jù)不同的數(shù)據(jù)位,m為大于等于1且小于等于n的正整數(shù);可信度調(diào)整模塊,用于降低采用第n+1讀電壓閾值讀取閃存頁得到的數(shù) 據(jù)中的第一數(shù)據(jù)位的可信度,可信度為第一數(shù)據(jù)位對應的置信度的絕對值譯碼模塊,用于根據(jù)調(diào)整后的第一數(shù)據(jù)位的可信度,對采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)進行糾錯譯碼。本實施例的裝置,用于執(zhí)行第一方面提供的閃存糾錯方法,其實現(xiàn)原理和有益效果類似,此處不再贅述。進一步的,確定模塊,還用于確定采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)和采用第m讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中的第二數(shù)據(jù)位,第二數(shù)據(jù)位為采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中與采用第m讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中相同數(shù)據(jù)位對應的數(shù)據(jù)相同的數(shù)據(jù)位;可信度調(diào)整模塊,還用于提高采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中的第二數(shù)據(jù)位的可信度。進一步的,確定模塊具體用于:將采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)和采用第m讀電壓閾值讀取閃存頁得到的數(shù)據(jù)進行異或運算得到聯(lián)合數(shù)據(jù);若聯(lián)合數(shù)據(jù)中的數(shù)據(jù)位的值為1,則確定該數(shù)據(jù)位為第一數(shù)據(jù)位。進一步的,還包括:修正模塊,修正模塊用于判斷譯碼模塊糾錯譯碼是否成功,若成功,則修正模塊還用于將第n+1讀電壓閾值修改為預設讀電壓閾值;若不成功,則修正模塊還用于向讀取模塊發(fā)送指示消息,指示消息用于指示讀取模塊再次讀取閃存頁的數(shù)據(jù),其中,n遞增1。。進一步的,修正模塊具體用于:向讀取模塊發(fā)送指示消息之前,修正模塊還用于判斷n遞增后的值是否大于預設閾值,若不大于,則修正模塊用于向讀取模塊發(fā)送指示消息;若大于,則修正模塊用于確定閃存頁所在的數(shù)據(jù)塊為壞塊。進一步的,譯碼模塊,具體用于:采用低密度奇偶校驗碼LDPC對采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)進行糾錯譯碼。本發(fā)明實施例提供一種閃存糾錯方法和裝置,該方法包括:首先,在對 采用第n讀電壓閾值讀取的閃存頁數(shù)據(jù)進行糾錯譯碼失敗后,采用第n+1讀電壓閾值讀取閃存頁的數(shù)據(jù),第n+1讀取電壓閾值與第n讀電壓閾值不同,n為大于等于1的正整數(shù);然后,確定采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)和采用第m讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中的第一數(shù)據(jù)位,第一數(shù)據(jù)位為采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中與采用第m讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中相同數(shù)據(jù)位對應的數(shù)據(jù)不同的數(shù)據(jù)位,m為大于等于1且小于等于n的正整數(shù);進而,降低采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中的第一數(shù)據(jù)位的可信度,可信度為第一數(shù)據(jù)位對應的置信度的絕對值;最后,根據(jù)調(diào)整后的第一數(shù)據(jù)位的可信度,對采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)進行糾錯譯碼。其中,聯(lián)合使用兩次讀取的同一閃存頁得到的數(shù)據(jù),降低數(shù)據(jù)位不同的數(shù)據(jù)對應的數(shù)據(jù)位的可信度,從而有效提高了糾錯譯碼的成功率,減小了讀時延,使得SSD存儲系統(tǒng)的性能大幅提升。附圖說明為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1所示為SSD控制器的一個基本功能模塊示意圖;圖2所示為介質(zhì)顆粒中理想的電壓分布狀態(tài);圖3所示為介質(zhì)顆粒中實際的電壓分布狀態(tài)一;圖4所示為介質(zhì)顆粒中實際的電壓分布狀態(tài)二;圖5所示為現(xiàn)有技術(shù)基于ReadRetry的糾錯方案流程圖;圖6所示為本發(fā)明實施例提供的閃存糾錯方法的流程圖;圖7所示為本發(fā)明實施例一提供的的閃存糾錯裝置的結(jié)構(gòu)示意圖一;圖8所示為本發(fā)明實施例一提供的的閃存糾錯裝置的結(jié)構(gòu)示意圖二。具體實施方式為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā) 明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。固態(tài)存儲很早就被應用于企業(yè)高價值數(shù)據(jù)的存儲,以及消費電子產(chǎn)品中的存儲。但隨著企業(yè)級存儲應用的日趨復雜,傳統(tǒng)存儲陣列逐漸在以下幾個方面面臨挑戰(zhàn):(1)可靠性。受限于硬盤驅(qū)動器(HardDiskDrive,簡稱為:HDD)的機械部件,單塊HDD的年失效率難以繼續(xù)有效降低,這阻礙了存儲陣列可靠性的進一步提升。(2)性能。傳統(tǒng)陣列依靠堆積大量的HDD來獲取較高的讀寫速度,但是并不能有效降低讀寫時延;同時隨著數(shù)據(jù)中心虛擬化的不斷擴展,傳統(tǒng)陣列所接收到的讀寫數(shù)據(jù)模型越來越隨機,越來越難以作針對性的優(yōu)化。(3)成本。企業(yè)一般通過堆積HDD來獲取所需的讀寫速度,實際上,這導致了很多額外的容量成本,以及為了支撐這些大量的HDD的空間、能耗成本?;谏鲜鰡栴},閃存應運而生,且為解決上述問題提供了可能。當前因為閃存在價格、容量、可靠性等多方面達到了相對領先的平衡,因此被廣泛應用于固態(tài)存儲領域?;陂W存的固態(tài)硬盤(SolidStateDrive,簡稱為:SSD)的核心部件為:閃存和主控制器。閃存是基本存儲單元,而主控制器則是SSD的心臟,負責運算和任務分配,兩者的結(jié)合才是一款SSD性能的真正體現(xiàn)。如果主控制器能力不足,會無法完全發(fā)揮閃存高速存取的特性,而如果閃存品質(zhì)較低,那么主控再強也無濟于事。圖1所示為SSD控制器的一個基本功能模塊示意圖,如圖1所示,SSD控制器由寫數(shù)據(jù)處理模塊、讀數(shù)據(jù)處理模塊以及讀/寫/擦除閃存控制模塊組成。其中寫數(shù)據(jù)處理模塊完成對數(shù)據(jù)流的壓縮、加密、加繞以及ECC編碼等處理操作;讀數(shù)據(jù)處理模塊是寫處理模塊的逆過程,它完成對從閃存中讀取的數(shù)據(jù)的ECC譯碼、解擾、解密以及解壓縮等處理操作;讀/寫/擦除閃存控制模塊完成從閃存顆粒讀取數(shù)據(jù)的控制、寫入數(shù)據(jù)的控制和擦除數(shù)據(jù)的控制 功能。SSD控制器普遍都將ECC編碼器和解碼器作為必選功能,其目的是提升數(shù)據(jù)的可靠性和閃存顆粒的壽命。但是,閃存中保存的數(shù)據(jù),經(jīng)過一段時間后,可能存在若干bit位的錯誤。如果直接將閃存物理頁中讀出的數(shù)據(jù)返回給上層業(yè)務,就可能造成業(yè)務失敗。為了保證返回給上層業(yè)務的數(shù)據(jù)是正確有效的,SSD控制器會對業(yè)務數(shù)據(jù)進行ECC保護,即對業(yè)務數(shù)據(jù)進行ECC編碼,然后將ECC編碼后的數(shù)據(jù)寫入閃存。每當讀取數(shù)據(jù)時,SSD控制器會對從閃存中讀取出來的數(shù)據(jù)進行錯誤檢查和糾正,從而提升業(yè)務數(shù)據(jù)的可靠性。傳統(tǒng)的SSD控制器受限于計算能力,所使用的ECC編碼和譯碼都是非常簡單的糾錯碼,比如BCH碼,其糾錯能力有限,只能在頁面數(shù)據(jù)中出現(xiàn)bit位錯誤數(shù)量不超過一定的上限時才有效。舉例來講,傳統(tǒng)的SSD控制器通常使用糾錯能為24bit/1KB的BCH碼,即每1KB數(shù)據(jù)(包含業(yè)務數(shù)據(jù)和校驗數(shù)據(jù))內(nèi)出現(xiàn)了bit位錯誤不超過24個時,控制器可以通過計算的方式得出正確有效的業(yè)務數(shù)據(jù)。當某個頁中的bit位錯誤數(shù)超過控制器的計算能力后,該頁的業(yè)務數(shù)據(jù)無法被正確讀出,此時便產(chǎn)生一個不可糾(uncorrectable)錯誤。當前,大容量高速閃存(NandFlash)存儲系統(tǒng)是業(yè)界的主打產(chǎn)品。但在當前產(chǎn)品應用中NandFlash存儲介質(zhì)主要有兩方面的缺點:(1)由于NandFlash物理特性的原因?qū)е麓鎯?shù)據(jù)出錯的現(xiàn)象;(2)用于NandFlash頻繁擦寫導致介質(zhì)顆粒磨損老化,進而壽命受限的現(xiàn)象;因此在面向企業(yè)級高可靠性存儲產(chǎn)品的應用中,提升NandFlash的可靠性和壽命是最核心的技術(shù)挑戰(zhàn)。圖2所示為介質(zhì)顆粒中理想的電壓分布狀態(tài),正常情況下介質(zhì)顆粒中的電壓分布應該為如圖2所示的形態(tài),其中T1,T2,T3分別是讀電壓閾值。但由于一些原因,介質(zhì)顆粒中的電壓分布狀態(tài)會發(fā)生錯誤,通常來講,NandFlash介質(zhì)發(fā)生錯誤的原因主導的有兩方面:(1)隨著介質(zhì)顆粒擦寫次數(shù)的不斷增加,編程過程中介質(zhì)顆粒之間的編程干擾等,會導致介質(zhì)的電壓分布發(fā)生偏移,如圖3所示,由于編程干擾,導致介質(zhì)顆粒中的電壓分布狀態(tài)相對于圖2所示的介質(zhì)顆粒中理想的電壓分布狀態(tài)向右偏移,此時如果用理想情況下的讀電壓閾值讀取介質(zhì)顆粒,會造成 讀取介質(zhì)顆粒狀態(tài)判決錯誤的大量增加。(2)隨著介質(zhì)顆粒放置時間的增加,介質(zhì)顆粒中存儲的電子發(fā)生了泄露,因此也會導致介質(zhì)的電壓分布發(fā)生偏移,如圖4所示,由于長時間方式,導致介質(zhì)顆粒中的電壓分布狀態(tài)相對于圖2所示的介質(zhì)顆粒中理想的電壓分布狀態(tài)向右偏移,同理也會造成讀取介質(zhì)顆粒狀態(tài)判決錯誤的大量增加。由于以上兩個物理機制導致的電壓分布的偏移現(xiàn)象,在用固定的讀電壓閾值讀取介質(zhì)顆粒的狀態(tài)時,就會發(fā)生判決錯誤。如果所讀取的介質(zhì)顆粒中發(fā)生錯誤的介質(zhì)顆粒的個數(shù)超過了ECC糾錯碼的糾錯能力,則糾錯碼將無法恢復原始存儲的數(shù)據(jù)信息,導致存儲信息的丟失。數(shù)據(jù)的丟失在面向企業(yè)級的存儲產(chǎn)品中是災難性的,因此業(yè)界都通過各種技術(shù)手段提升SSD存儲產(chǎn)品的數(shù)據(jù)可靠性,盡可能的將發(fā)生數(shù)據(jù)丟失的概率降低。針對發(fā)生錯誤的兩種原因,閃存介質(zhì)廠商提供的糾錯解決方案是Readretry,即用默認的讀電壓閾值讀取介質(zhì)顆粒的狀態(tài)后用糾錯碼無法恢復原始信息時,通過調(diào)整讀電壓閾值,再次進行讀取介質(zhì)顆粒的狀態(tài)并用糾錯碼恢復原始信息的機制。在現(xiàn)有技術(shù)中,SSD控制器可以通過ReadRetry命令,多次調(diào)整介質(zhì)顆粒的讀電壓閾值,從而逐次逼近真實的介質(zhì)顆粒電壓閾值。該方案的一個致命缺點是ReadRetry的過程增加了讀取介質(zhì)顆粒的次數(shù),從而造成讀時延的大幅下降,最終導致SSD存儲系統(tǒng)性能的急劇下降。具體的,圖5所示為現(xiàn)有技術(shù)基于ReadRetry的糾錯方案流程圖,如圖5所示:第一步:用默認的讀電壓閾值讀取閃存介質(zhì)的每一個頁(page),并進行ECC糾錯譯碼,如果譯碼成功,則反饋譯碼成功,ECC譯碼設備輸出正確的原始信息,如果譯碼失敗,則執(zhí)行第二步;第二步:在第一步中如果ECC糾錯失敗并報錯,則按照表1中的順序(該表是美光(Micron)給出的默認讀閾值調(diào)整順序,用戶也可以根據(jù)實際的應用場景自行定義)調(diào)整讀電壓閾值到讀電壓閾值選項1(01h)后,再次讀取出錯的頁(page),并進行ECC糾錯譯碼,如果譯碼成功,則將讀電壓閾值重新設置成默認的讀電壓閾值選項0),然后反饋譯碼成功,ECC譯碼設備輸出正確的原始信息,如果譯碼失敗,則執(zhí)行第三步;第三步:在第二步中如果ECC譯碼設備再次糾錯失敗,則按照表1的順序調(diào)整讀電壓閾值到讀電壓閾值選項2(02h)后,再次讀取出錯的頁(page),并進行ECC糾錯譯碼,如果譯碼成功,則將讀電壓閾值重新設置成默認的讀電壓閾值(選項0),然后反饋譯碼成功,ECC譯碼設備輸出正確的原始信息,如果譯碼失敗,則執(zhí)行第四步;第四步:如果第三步再次譯碼失敗,則按照表1列出的讀閾值選擇順序依次調(diào)整讀電壓閾值,再次讀取出錯的頁(page),并進行ECC糾錯譯碼,直到ECC譯碼成功后,反饋譯碼成功,ECC譯碼設備輸出正確的原始信息。如果SSD控制器嘗試完上表中列出的所有選項后,ECC譯碼仍然失敗,則反饋譯碼失敗,該頁(page)所在的塊(block)(閃存介質(zhì)的block包含很多個page)被SSD控制器中的上層管理系統(tǒng)標記為壞塊。表1采用現(xiàn)有技術(shù)方案中存在以下問題:(1)現(xiàn)有技術(shù)是通過遍歷讀閾值的方式來逐步降低讀取介質(zhì)頁(page)的出錯個數(shù),試圖通過這樣的方法使得介質(zhì)(page)中出錯的個數(shù)滿足ECC糾錯設備的糾錯能力,但是這樣做并沒從本質(zhì)上提升ECC糾錯設備的糾錯能力;舉例來講,假設ECC糾錯設備的糾錯能力是1KB/40bit(即1KB數(shù)據(jù)中可以糾40個比特的錯誤),ReadRetry的糾錯機制希望通過調(diào)整讀電壓閾值的方式使得1KB數(shù)據(jù)中出錯的個數(shù)少于40bit。(2)由于現(xiàn)有技術(shù)方案沒有在本質(zhì)上提升ECC糾錯設備的糾錯能力,因此需要多次調(diào)整讀電壓閾值進行嘗試性的讀取數(shù)據(jù),從而造成了讀時延的成倍增加(通常從微秒量級增加到毫秒量級),導致SSD存儲系統(tǒng)性能的大幅降低。針對這一問題,本發(fā)明給出了一種增強ReadRetry糾錯能力的糾錯機制, 本方案在現(xiàn)有技術(shù)的基礎上,聯(lián)合利用兩次讀取的介質(zhì)顆粒判決信息,從聯(lián)合兩次處理后得到的數(shù)據(jù),并從中獲得‘軟信息’,進而提升了ECC糾錯碼的糾錯能力,最終減少ReadRetry的讀取次數(shù),降低了讀時延。下面通過具體實施例介紹本發(fā)明的方案:圖6所示為本發(fā)明實施例提供的閃存糾錯方法的流程圖,如圖6所示,本實施例的方法可以包括:步驟101、在對采用第n讀電壓閾值讀取的閃存頁數(shù)據(jù)進行糾錯譯碼失敗后,采用第n+1讀電壓閾值讀取閃存頁的數(shù)據(jù),第n+1讀取電壓閾值與第n讀電壓閾值不同,n為大于等于1的正整數(shù)。上述的讀電壓閾值的值可以根據(jù)現(xiàn)有技術(shù)中已有的讀電壓閾值表進行調(diào)整,也可以為用戶自己設定,本發(fā)明不對其加以限制。當采用第n讀電壓閾值讀取的閃存頁數(shù)據(jù)進行糾錯譯碼失敗后,將采用與第n讀電壓閾值不同的第n+1讀電壓閾值繼續(xù)讀取該閃存頁的數(shù)據(jù)。步驟102、確定采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)和采用第m讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中的第一數(shù)據(jù)位,第一數(shù)據(jù)位為采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中與采用第m讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中相同數(shù)據(jù)位對應的數(shù)據(jù)不同的數(shù)據(jù)位,m為大于等于1且小于等于n的正整數(shù)。步驟103:降低采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中的第一數(shù)據(jù)位的可信度,可信度為第一數(shù)據(jù)位對應的置信度的絕對值。例如:置信度為0、±1、±2、±3、±4,則對應的可信度為0、1、2、3、4。在本發(fā)明實施例中,為了描述簡單,將采用第m讀電壓閾值讀取閃存頁得到的數(shù)據(jù)稱為第m數(shù)據(jù);將采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)稱為第n+1數(shù)據(jù)。值得注意的是,上述的第m數(shù)據(jù)和第n+1數(shù)據(jù)均是未經(jīng)過糾錯譯碼的數(shù)據(jù)。具體的:判斷第m數(shù)據(jù)和第n+1數(shù)據(jù)中哪些比特位對應的數(shù)據(jù)不同,并降低該些比特位對應的可信度;例如:原數(shù)據(jù)為10101010,第m數(shù)據(jù)為10111010且該數(shù)據(jù)經(jīng)糾錯譯碼 后沒有恢復出原數(shù)據(jù),第n+1數(shù)據(jù)為10101010,則確定第m數(shù)據(jù)和第n+1數(shù)據(jù)中的第4比特位的數(shù)據(jù)不同,其他比特位的數(shù)據(jù)均相同,則可將第4比特位對應的可信度降低。繼續(xù)上述例子,假如第n+1數(shù)據(jù)中第4比特位對應的可信度為3(置信度為-3),則可將第n+1數(shù)據(jù)中第4比特位對應的可信度降低為任一個可信度,只要該可信度小于3且大于等于系統(tǒng)規(guī)定的最小的可信度即可,例如可以為1或2等,但是,在實際應用中,可以將可信度逐漸減低,也即,將此時的第4比特位對應的置信度3降低為2。上述的置信度可以通過置信度映射獲得,具體的:置信度通常定義為邏輯值判斷為0的概率和邏輯值判斷為1的概率的對數(shù)似然比值。舉例來講,邏輯值判斷為0的概率為p,則邏輯值判斷為1的概率為1-p,據(jù)此置信度定義為置信度映射將邏輯值映射為置信度的定量值。置信度的定量值根據(jù)需求可用自定義的量化比特位數(shù)表示。比如,如果采用4比特量化,其中1比特表示符號位,其余3比特表示絕對值,則置信度的定量值可以表示0,±1,±2,±3,±4,±5,±6,±7的一組取值集合。置信度映射可以使用查表等各種方便的方式完成從邏輯值到置信度取值的映射。需要說明的,置信度的絕對值越大,表示其可信度越高,因此置信度是描述判決值可信性的定量指標,此處也說明了由于上述例子中第4比特位對應的數(shù)據(jù)可信度低,因此要將該比特位對應的置信度降低,從而提高糾錯譯碼的成功率。在實際應用中,如果使用一一比對的方法獲取第m數(shù)據(jù)和第n+1數(shù)據(jù)中數(shù)據(jù)不同的比特位會增大系統(tǒng)的延時,因此,可采用將第m數(shù)據(jù)和第n+1數(shù)據(jù)進行異或運算得到聯(lián)合數(shù)據(jù),從而根據(jù)聯(lián)合數(shù)據(jù)即可直接確定哪些比特位對應的數(shù)據(jù)相同,哪些比特位對應的數(shù)據(jù)不同,也即,聯(lián)合數(shù)據(jù)中的數(shù)據(jù)位的值如果是1,則表明第m數(shù)據(jù)和第n+1數(shù)據(jù)中該數(shù)據(jù)位對應的數(shù)據(jù)不同,聯(lián)合數(shù)據(jù)中的數(shù)據(jù)位的值如果是0,則表明第m數(shù)據(jù)和第n+1數(shù)據(jù)中該數(shù)據(jù)位對應的數(shù)據(jù)相同。繼續(xù)按照上述的例子,第m數(shù)據(jù)為10111010,第n+1數(shù)據(jù)為10101010,將第m數(shù)據(jù)和第n+1數(shù)據(jù)進行異或運算,即:10111010⊕10101010=00010000,由于異或運算中如果進行異或的兩個值不相同,則異或結(jié)果為1,如果進行 異或的兩個值相同,異或結(jié)果為0,因此,根據(jù)上述異或結(jié)果00010000,可以很容易得知第4比特位的數(shù)據(jù)不同,其他比特位的數(shù)據(jù)均相同,從而提高了系統(tǒng)的處理效率,減小了系統(tǒng)的處理時延。步驟104、根據(jù)調(diào)整后的第一數(shù)據(jù)位的可信度,對采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)進行糾錯譯碼。糾錯設備根據(jù)調(diào)整后的第一數(shù)據(jù)位的可信度對第n+1數(shù)據(jù)數(shù)據(jù)進行糾錯譯碼,如果糾錯譯碼成功,則將此時的第n+1讀電壓閾值重新設置成預設的讀電壓閾值(也即為默認的讀電壓閾值),然后反饋糾錯譯碼成功,糾錯譯碼設備輸出正確的原始信息。如果糾錯譯碼不成功,則按照預設規(guī)則修改讀電壓閾值,也即將步驟101至步驟104中的n遞增為n+1,并重新執(zhí)行上述步驟101到104所示的步驟。進一步的,在循環(huán)執(zhí)行上述步驟101-步驟104之前,還需判斷n遞增后的值是否大于預設閾值,若不大于,此時則重新執(zhí)行上述步驟101至步驟104,若大于,則確定當前的閃存頁所在的數(shù)據(jù)塊為壞塊。此處的預設閾值可以為用戶自定義設置,也可以為系統(tǒng)預置,本發(fā)明不對其加以限制。為了進一步的提高糾錯譯碼的成功率,在本發(fā)明中,還可以提高所述采用第n+1讀電壓閾值讀取所述閃存頁得到的數(shù)據(jù)和所述采用第m讀電壓閾值讀取所述閃存頁得到的數(shù)據(jù)中的第二數(shù)據(jù)位的可信度,其中,所述第二數(shù)據(jù)位為所述采用第n+1讀電壓閾值讀取所述閃存頁得到的數(shù)據(jù)中與所述采用第m讀電壓閾值讀取所述閃存頁得到的數(shù)據(jù)中相同數(shù)據(jù)位對應的數(shù)據(jù)相同的數(shù)據(jù)位。繼續(xù)按照上述的例子,將采用第m讀電壓閾值讀取閃存頁得到的數(shù)據(jù)稱為第m數(shù)據(jù);將采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)稱為第n+1數(shù)據(jù)。值得注意的是,上述的第m數(shù)據(jù)和第n+1數(shù)據(jù)均是未經(jīng)過糾錯譯碼的數(shù)據(jù)。具體的,確定第m數(shù)據(jù)和第n+1數(shù)據(jù)中哪些比特位對應的數(shù)據(jù)相同,并 提高該些比特位對應的可信度。在提高該些比特位對應的可信度之前,還可以包括,先判斷該些比特位對應的可信度是否為最高可信度,如果是最高可信度,則不提高該些比特位對應的可信度,如果不是最高可信度,則提高該些比特位對應的可信度。例如:原數(shù)據(jù)為10101010,第m數(shù)據(jù)為10111010且該數(shù)據(jù)經(jīng)糾錯譯碼后沒有恢復出原數(shù)據(jù),第n+1數(shù)據(jù)為10101010,則確定第m數(shù)據(jù)和第n+1數(shù)據(jù)中除第4比特位的數(shù)據(jù)不同外,其他比特位的數(shù)據(jù)均相同,則在降低第4比特位對應的可信度降低的同時,提高其他比特位對應的可信度。進一步的,需要判斷第1比特位、第2比特位、第3比特位、第5比特位、第6比特位、第7比特位、第8比特位對應的可信度是否為最高可信度,假如此時第6比特位和第8比特位對應的可信度為最高可信度,則無需提高該比特位的可信度,而提高第1比特位、第2比特位、第3比特位、第5比特位和第7比特位對應的可信度。同樣可以采樣將第m數(shù)據(jù)和第n+1數(shù)據(jù)進行異或運算的方法求得其中哪些比特位對應的數(shù)據(jù)相同,其實現(xiàn)方式與上述實施例中描述第m數(shù)據(jù)和第n+1數(shù)據(jù)中哪些比特位對應的數(shù)據(jù)不同的方法相同,此處不再贅述。表2是對美光NandFlash顆粒進行實測的統(tǒng)計結(jié)果,從表中可以看出在擦寫次數(shù)分別為30K~36K下,本發(fā)明的技術(shù)方案的譯碼成功頻率都大幅高于現(xiàn)有技術(shù)方案基于單次讀信息的譯碼成功頻率。本發(fā)明的技術(shù)方案譯碼成功頻率的提升,將減少SSD控制器進行ReadRetry的次數(shù),降低讀時延,從而提升SSD存儲系統(tǒng)的性能。表2理論推導和仿真結(jié)果表明:通過聯(lián)合利用兩次讀取的同一閃存頁的數(shù)據(jù),并對兩次的數(shù)據(jù)進行運算可以獲取額外的軟信息,糾錯設備利用軟信息后進 行譯碼糾錯,其糾錯能力可提升1倍以上。舉例來講,對于一個碼長為4KByte字節(jié),碼率為94.57%的LDPC,在單次讀取下的糾錯能力近似為4KB/65bit(即4KB數(shù)據(jù)中可以糾65個比特的錯誤),而通過聯(lián)合利用兩次讀取的軟信息后,其糾錯能力可以提升到近似為4KB/144bit(即4KB數(shù)據(jù)中可以糾144個比特的錯誤),因此聯(lián)合兩次的糾錯能力是單次糾錯能力的2.2倍。本實施例提供的閃存糾錯方法,包括:在對采用第n讀電壓閾值讀取的閃存頁數(shù)據(jù)進行糾錯譯碼失敗后,采用第n+1讀電壓閾值讀取閃存頁的數(shù)據(jù),第n+1讀取電壓閾值與第n讀電壓閾值不同,n為大于等于1的正整數(shù);確定采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)和采用第m讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中的第一數(shù)據(jù)位,第一數(shù)據(jù)位為采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中與采用第m讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中相同數(shù)據(jù)位對應的數(shù)據(jù)不同的數(shù)據(jù)位,m為大于等于1且小于等于n的正整數(shù);降低采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)中的第一數(shù)據(jù)位的可信度,可信度為第一數(shù)據(jù)位對應的置信度的絕對值;根據(jù)調(diào)整后的第一數(shù)據(jù)位的可信度,對采用第n+1讀電壓閾值讀取閃存頁得到的數(shù)據(jù)進行糾錯譯碼。其中,聯(lián)合使用兩次讀取的同一閃存頁得到的數(shù)據(jù),降低數(shù)據(jù)位不同的數(shù)據(jù)對應的數(shù)據(jù)位的可信度,從而有效提高了糾錯譯碼的成功率,減小了讀時延,使得SSD存儲系統(tǒng)的性能大幅提升。圖7所示為本發(fā)明實施例一提供的的閃存糾錯裝置的結(jié)構(gòu)示意圖,如圖7所示,本實施例的裝置可以包括:讀取模塊11、確定模塊12、可信度調(diào)整模塊13和譯碼模塊14,其中,讀取模塊11,用于在對采用第n讀電壓閾值讀取的閃存頁數(shù)據(jù)進行糾錯譯碼失敗后,采用第n+1讀電壓閾值讀取閃存頁的數(shù)據(jù),所述第n+1讀取電壓閾值與所述第n讀電壓閾值不同,n為大于等于1的正整數(shù);確定模塊12,用于確定所述采用第n+1讀電壓閾值讀取所述閃存頁得到的數(shù)據(jù)和采用第m讀電壓閾值讀取所述閃存頁得到的數(shù)據(jù)中的第一數(shù)據(jù)位,所述第一數(shù)據(jù)位為所述采用第n+1讀電壓閾值讀取所述閃存頁得到的數(shù)據(jù)中與所述采用第m讀電壓閾值讀取所述閃存頁得到的數(shù)據(jù)中相同數(shù)據(jù)位對應的 數(shù)據(jù)不同的數(shù)據(jù)位,m為大于等于1且小于等于n的正整數(shù);可信度調(diào)整模塊13,用于降低所述采用第n+1讀電壓閾值讀取所述閃存頁得到的數(shù)據(jù)中的所述第一數(shù)據(jù)位的可信度,所述可信度為所述第一數(shù)據(jù)位對應的置信度的絕對值譯碼模塊14,用于根據(jù)調(diào)整后的所述第一數(shù)據(jù)位的可信度,對所述采用第n+1讀電壓閾值讀取所述閃存頁得到的數(shù)據(jù)進行糾錯譯碼??蛇x地,在圖7所示實施例的基礎上,所述確定模塊12還用于:還用于確定所述采用第n+1讀電壓閾值讀取所述閃存頁得到的數(shù)據(jù)和所述采用第m讀電壓閾值讀取所述閃存頁得到的數(shù)據(jù)中的第二數(shù)據(jù)位,所述第二數(shù)據(jù)位為所述采用第n+1讀電壓閾值讀取所述閃存頁得到的數(shù)據(jù)中與所述采用第m讀電壓閾值讀取所述閃存頁得到的數(shù)據(jù)中相同數(shù)據(jù)位對應的數(shù)據(jù)相同的數(shù)據(jù)位;所述可信度調(diào)整模塊,還用于提高所述采用第n+1讀電壓閾值讀取所述閃存頁得到的數(shù)據(jù)中的所述第二數(shù)據(jù)位的可信度。進一步的,所述確定模塊12具體用于:將所述采用第n+1讀電壓閾值讀取所述閃存頁得到的數(shù)據(jù)和所述采用第m讀電壓閾值讀取所述閃存頁得到的數(shù)據(jù)進行異或運算得到聯(lián)合數(shù)據(jù);若所述聯(lián)合數(shù)據(jù)中的數(shù)據(jù)位的值為1,則確定該數(shù)據(jù)位為所述第一數(shù)據(jù)位??蛇x地,在圖7所示實施例的基礎上,如圖8所示,上述的裝置,還包括:修正模塊15,所述修正模塊15用于判斷所述譯碼模塊糾錯譯碼是否成功,若成功,則所述修正模塊15還用于將所述第n+1讀電壓閾值修改為預設讀電壓閾值;若不成功,則所述修正模塊15還用于向所述讀取模塊發(fā)送指示消息,所述指示消息用于指示所述讀取模塊再次讀取所述閃存頁的數(shù)據(jù),其中,所述n遞增1。可選地,所述修正模塊具體用于:向所述讀取模塊發(fā)送指示消息之前,所述修正模塊還用于判斷所述n遞增后的值是否大于預設閾值,若不大于,則所述修正模塊用于向所述讀取模塊發(fā)送所述指示消息;若大于,則所述修正模塊用于確定所述閃存頁所在的數(shù)據(jù)塊為壞塊??蛇x的,所述譯碼模塊14,具體用于:采用低密度奇偶校驗碼LDPC對所述采用第n+1讀電壓閾值讀取所述閃存頁得到的數(shù)據(jù)進行糾錯譯碼。本實施例的裝置,可以用于執(zhí)行圖6所示方法實施例的技術(shù)方案,其實現(xiàn)原理和技術(shù)效果類似,此處不再贅述。本領域普通技術(shù)人員可以理解:實現(xiàn)上述各方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成。前述的程序可以存儲于一計算機可讀取存儲介質(zhì)中。該程序在執(zhí)行時,執(zhí)行包括上述各方法實施例的步驟;而前述的存儲介質(zhì)包括:只讀存儲記憶體(Read-OnlyMemory,簡稱為:ROM)、隨機存儲記憶體(RandomAccessMemory,簡稱為:RAM)、磁碟、光盤、寄存器、內(nèi)存等各種可以存儲程序代碼的介質(zhì)。最后應說明的是:以上各實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述各實施例對本發(fā)明進行了詳細的說明,本領域的普通技術(shù)人員應當理解:其依然可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中部分或者全部技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的范圍。當前第1頁1 2 3 當前第1頁1 2 3