ECC(Error Checking and Correction)校驗和糾錯

ECC(Error Checking and Correction)校驗和糾錯:

ECC的全稱是 Error Checking and Correction or Error correction Coding,是一種用於差錯檢測和修正的算法。上一節的BBM中我們提到過,NAND閃存在生產和使用中都會產生壞塊,BBM就是壞塊的管理機制,而要有效管理壞塊的首要前提就是有可靠的壞塊檢測手段。如果操作時序和電路穩定性不存在問題,NAND閃存出錯的時候一般不會造成整個Block或Page不能讀取甚至全部出錯,而是整個Page中只有一個或幾個bit出錯,這時候 ECC就能發揮作用了。不同顆粒有不同的基本ECC要求,不同主控制器支持的ECC能力也不同,理論上來說ECC能力也是夠用就行。
當前SSD內最普遍使用的ECC碼是BCH碼。當數據寫入的時候,控制器內部的ECC模塊計算數據並生成ECC簽名,一般來說這個步驟非常快,因此並不會影響整個SSD太多的性能表現。ECC的簽名一般來說都保存在NAND頁後部的SA區域,當數據從NAND讀取的時候ECC模塊回去讀取 ECC簽名,並對照相同與否來發現出現的錯誤。
相比發現錯誤,修復接收到的數據錯誤更復雜。第一步是檢測收到的數據是否出錯,這個和上面生成ECC簽名的操作一樣非常快。如果檢測到接收到的數據包含錯誤比特,就需要去生成獨特的ECC算法(比如BCH),這部分會造成性能損失,但是只有在檢測到錯誤時候才做。用生成的ECC算法來修復之前檢測到的錯誤。
必須強調的是,ECC解碼過程是可能出現失敗的,所以ECC系統架構必須合理的設計才能保證ECC不出錯,而ECC能夠修復的錯誤比特數取決於ECC算法設計。
如果ECC糾不過來, 一般會報ECC Fail, 用戶表現爲Read Fail,有時候ECC甚至診測不到出錯, 就會導致數據錯誤。
NAND的穩定性需要有多方面保障,ECC只能用來保證部分比特出錯時的修復,如果整個頁甚至塊出現大面積錯誤,那麼只有RAID這類的冗餘保護才能修復了。
在企業級產品中對ECC甚至還有更苛刻的要求,那就是數據完整性檢查,SSD內部所有的總線, 先進先出數據緩存器部分都要查,可以檢測數據在進入NAND之前的錯誤。
上圖是個4KB頁的NAND閃存。(SA區128字節) 1.每當一個page寫入NAND閃存,數據會通過ECC引擎,創造獨特的ECC簽名。2.數據和對應的ECC簽名存都存放在NAND閃存裏,數據放在數據區,ECC簽名放在SA區。3.當需要讀取數據時,數據和ECC簽名一起被送往主控制器,此時新的ECC簽名被生成。4.此時主控把2個簽名對照,如果簽名相同,說明數據沒有錯誤,數據就會被送往主機。如果簽名不同,數據就會先放在主控裏,而不是直接送往主機。
某些主控會把改正後的數據再次寫回閃存,另一些則不會,因爲誰也不知道下次讀取會不會再出錯。
ECC的能力也影響到NAND 閃存的壽命和數據保存期。當NAND閃存的標稱P/E數到了之後,錯誤數會越來越多,ECC弱的直接就報壞塊並標記退休,如果ECC能力足夠強,能挖掘出Flash更多潛力,只是效果比較有限。
發佈了35 篇原創文章 · 獲贊 30 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章