愛伊米

壞塊管理在快閃記憶體中的重要性

壞塊來源

壞塊來源主要包括:

出廠壞塊(Factory Bad Block):

快閃記憶體從工廠出來,就或多或少的有一些壞塊。

增長壞塊(Grown Bad Block):

隨著快閃記憶體的使用,一些初期好塊也會變成壞塊。變壞的原因,主要是擦寫磨損。

壞塊管理在快閃記憶體中的重要性

壞塊鑑別

快閃記憶體廠商在快閃記憶體出廠時,會對出廠壞塊做特殊標記。一般來說,剛出廠的快閃記憶體都被擦除,裡面的資料是全0xFF。但是對壞塊來說,快閃記憶體廠商會打上不同的標記。

鎧俠(KIOXIA)會在出廠壞塊的第一個快閃記憶體頁和最後一個快閃記憶體頁的資料區第一個位元組和Spare區第一個位元組寫上一個非0xFF的值。

使用者在使用快閃記憶體的時候,首先應該按照快閃記憶體文件,掃描所有的快閃記憶體塊,把壞塊剔除出來、建立一張壞塊表。

壞塊管理在快閃記憶體中的重要性

還有些快閃記憶體廠商,它會把壞塊資訊儲存在快閃記憶體內部某個地方(掉電不丟失),使用者在建立壞塊表的時候,沒有必要掃描所有的快閃記憶體塊來識別壞塊,只需讀取快閃記憶體的那個特定區域。比如Micron,它的快閃記憶體內部有個叫OTP(One Time Programming)的區域,出廠壞塊資訊可以存在裡面。

對增長壞塊而言,它的出現會透過讀寫擦等操作反映出來。比如讀到UECC(Uncorrectable Error Correction Code,資料沒有辦法透過ECC糾錯恢復)、擦除失敗、寫失敗,這都是一個壞塊出現的症狀。使用者應該把這些壞塊加入壞塊表,不再使用。

壞塊管理策略一般有兩種策略管理壞塊,一是略過(Skip)策略,二是替換(Replace)策略。

1。略過策略使用者根據建立的壞塊表,在寫快閃記憶體的時候,一旦遇到壞塊就跨過它,寫下一個Block。

SSD的儲存空間是快閃記憶體陣列,無論是Industrial M。2 SSD還是Industrial mini mSATA SSD一般都有幾個並行通道,每個通道上連線了若干個快閃記憶體,看下圖Agrade M。2 SSD,該SSD有四個通道,每個通道上掛了一個快閃記憶體Die。

壞塊管理在快閃記憶體中的重要性

SSD向四個Die 依次寫入。假設 Die 1上有個 Block B是壞塊,若韌體採取壞塊略過策略,則寫完 Block A時,接下來便會跨過Block B寫到Die2的Block C上面去。

2、替換機制

與略過策略不同,當某個Die上發現壞塊時,它會被該Die上的某個好塊替換。使用者在寫資料的時候,不是跨過這個Die,而是寫到替換塊上面去。採用此策略,除正常使用者使用的快閃記憶體塊,還需額外保 留一部分好的快閃記憶體塊,用於替換使用者空間的壞塊。整個Die上快閃記憶體塊就劃分為兩個區域:使用者空間和預留空間。

還是以上面的情況為例:使用者寫入資料時,當碰到壞塊B,它不會略過 Die1不寫,而是寫到Block B的替換者 Block B’上面去。

採用替換策略,SSD內部需維護一張重對映表(Remap Table):壞塊到替換塊的對映,比如B→B’。當SSD需要訪問Block B時,它需要查詢重對映表,實際訪問的物理Block應該是B’。

我們看看兩者策略的優劣 。

略過策略的劣勢在於效能不穩定。以4個Die為例,略過策略可能導致Die的並行度在1和4個Die之間,而替換策略並行度總是4個Die,毋庸置疑,前者效能表現不如後者。但替換策略有木桶效應,如果某個Die質量比較差,則整個SSD可用的快閃記憶體塊則受限於那個壞的Die。