BBM(Bad Block Management)壞塊管理

BBM(Bad Block Management)壞塊管理:

不管WL算法如何高明,在使用中都會碰到一個頭痛的問題,那就是壞塊,所以一個SSD必須要有壞塊管理機制。何謂壞塊?一個閃存塊裏包含有不穩定的地址,不能保證讀/寫/擦時數據的準確性。
壞塊分出廠壞塊和使用過程中出現的壞塊,SSD有壞塊表來管理壞塊。出廠壞塊在上面會有標記,所以很容易就能被識別,而使用中出現的壞塊就要靠主控的能力了。一般來說,越到閃存生命的後期(P/E數開始接近理論最大值),壞塊就會開始大量出現。
一般來說閃存出廠都包含壞塊,不過廠商有個最小有效塊值(NvB-minimum number of valid blocks),以Toshiba的24nm MLC TH58TEG7D2HBAxC(浦科特M3系列採用的顆粒)來說,1個die(裸晶,詳細解釋見備註)上8,832個塊裏至少要有8,072個塊是好的。從這上面可以知道,雖然出廠的閃存可能有壞塊,但是廠商保證在正常的生命週期裏,好塊數量不會低於8072個塊。而且每個die的第一個塊地址(00h)在出廠時是必須保證完好的。(ECC後,這個塊必須有效,ECC相關知識後面會有介紹)。閃存出廠前都會被執行擦除操作,廠商會在出貨前會把壞塊標記出來(廠商會在壞塊的第一個頁的SA區打上標記,SA區知識將在後面ECC部分介紹)這樣壞塊管理軟件就能靠監測SA區標記來製作壞塊表。由於在使用中會產生壞塊,所以SSD的主控在每次寫入/擦除/複製等操作後都要檢查塊的狀態。對顆粒的ECC要求也要達到廠商的標準以上(主控強不強,看ECC能力也是一個參考)。壞塊管理算法是必須的,壞塊並不會影響好塊的性能。
壞塊的標記和管理: 剛出廠的顆粒內部已經被完全擦除過(全盤區塊數據爲FFh),壞塊在出廠時也被標記上了。以MLC來說,顆粒內任何塊裏最後頁的SA區首個字節數據非FFh的話,那就是壞塊。
主控必須在每次擦除前讀取一下壞塊信息,因爲壞塊信息是可以被擦除的並且不能在擦除後恢復,所以建議不要去擦除原始的壞塊信息。在讀取閃存內所有的SA區域後,壞塊表就被建立。純靠自己的壞塊識別方法而不使用原廠提供的SA區域壞塊信息創建的壞塊表是不嚴謹的做法,因爲在原廠測試中,壞塊可能是在某些特定環境下才會出現,所以有可能在自行的檢測中被遺漏掉。
當壞塊表創建後,主控會把壞塊表保存在某個好的塊裏,每次重啓後,主控會從那個塊裏把表調用進緩存(RAM)裏。壞塊表中定義的地址是不能被訪問的,所以當系統想去訪問這個塊的地址時,FTL會重新把它映射到好的塊地址上去。
塊的替換: 在閃存的生命週期中,壞塊會逐漸增多。閃存設備上有個狀態寄存器,它的作用就是檢測操作是否正確完成。當進行寫入或擦除操作,狀態寄存器檢測到錯誤時,即可判定當前的塊爲壞塊。
鑑於閃存的寫入是以頁爲單位操作的,操作時可能影響到整個塊裏其它頁的數據,所以當狀態寄存器發現寫入出現錯誤時,壞塊管理程序就能夠用好的塊替換這個壞塊,重新在新的好塊裏寫入這個數據,並把檢測到的壞塊裏其餘的有效頁數據全部複製到新的塊裏去,標記老的塊爲壞塊,更新壞塊表裏的地址,把原本壞塊的地址重新映射到新的好塊裏。(壞塊管理流程見下圖)
備註:Die在集成電路上的表現是一小堆可以實現特定功能的半導體材料。通常集成電路是從電子硅晶圓(EGS)或其它半導體材料(例如砷化鎵)通過光刻工藝批量生產。晶圓被切割成許多小片,每一片包括一個完整的電路。這些小片就叫做Die。
發佈了35 篇原創文章 · 獲贊 30 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章