● Wear leveling磨損平衡
Flash Chip存在“寫磨損”的問題,當(dāng)某個單元長時間被反復(fù)擦寫時(比如Oracle Redo),不僅會造成寫入的性能問題,而且會大大縮短Flash memory的使用壽命。
Wear leveling依賴于SSD中的一部分保留空間,基本原理是在Flash Chip中設(shè)置了兩個block pool,一個是free block pool (空閑池) ,一個是數(shù)據(jù)池(data block pool )。
當(dāng)需要改寫某個page時(如果寫入原有位置,必須先擦除整個block,然后才能寫入數(shù)據(jù)) ,并不寫入原有位置(不需要擦除的動作) ,而是從空閑池中取出新的block,將現(xiàn)有的數(shù)據(jù)和需要改寫的數(shù)據(jù)合并為新的block,一起寫入新的空白block,原有的block被標識為invalid狀態(tài)(等待被擦除回收) ,新的block則進入數(shù)據(jù)池。
后臺任務(wù)會定時從數(shù)據(jù)池中取出無效數(shù)據(jù)的block,擦除后回收到空閑池中。這樣做的好處在于,一是不會反復(fù)擦寫同一個block,二是寫入的速度會比較快(省略了擦除的動作)。
● BBM(Bad Block Management)壞塊管理
不管WL算法如何高明,在使用中都會碰到一個頭痛的問題,那就是壞塊,所以一個SSD必須要有壞塊管理機制。何謂壞塊?一個閃存塊里包含有不穩(wěn)定的地址,不能保證讀/寫/擦?xí)r數(shù)據(jù)的準確性。
一般來說閃存出廠都包含壞塊,不過廠商有個最小有效塊值(NvB-minimum number of valid blocks),以Intel的34nm MLC L63B來說,1個die上4,096個塊里至少要有3,936個塊是好的。從這上面可以知道,雖然出廠的閃存可能有壞塊,但是廠商保證在正常的生命周期里,好塊數(shù)量不會低于3936個塊。而且每個die的第一個塊地址(00h)在出廠時是必須保證完好的。閃存出廠前都會被執(zhí)行擦除操作,廠商會在出貨前會把壞塊標記出來,這樣壞塊管理軟件就能靠監(jiān)測標記來制作壞塊表。由于在使用中會產(chǎn)生壞塊,所以SSD的主控在每次寫入/擦除/復(fù)制等操作后都要檢查塊的狀態(tài)以建立新的壞塊表。 當(dāng)壞塊表創(chuàng)建后,主控會把壞塊表保存在某個好的塊里,每次重啟后,主控會從那個塊里把表調(diào)用進緩存(RAM)里。壞塊表中定義的地址是不能被訪問的,所以當(dāng)系統(tǒng)想去訪問這個塊的地址時,F(xiàn)TL會重新把它映射到好的塊地址上去。
塊的替換: 在閃存的生命周期中,壞塊會逐漸增多。閃存設(shè)備上有個狀態(tài)寄存器,它的作用就是檢測操作是否正確完成。當(dāng)進行寫入或擦除操作,狀態(tài)寄存器檢測到錯誤時,即可判定當(dāng)前的塊為壞塊。鑒于閃存的寫入是以頁為單位操作的,操作時可能影響到整個塊里其它頁的數(shù)據(jù),所以當(dāng)狀態(tài)寄存器發(fā)現(xiàn)寫入出現(xiàn)錯誤時,壞塊管理程序就能夠用好的塊替換這個壞塊,重新在新的好塊里寫入這個數(shù)據(jù),并把檢測到的壞塊里其余的有效頁數(shù)據(jù)全部復(fù)制到新的塊里去,標記老的塊為壞塊,更新壞塊表里的地址,把原本壞塊的地址重新映射到新的好塊里。
SSD之全面保修
最后關(guān)于SSD磁盤的保修,一般硬盤廠商會提供3年或者5年的有限保修,但有些情況硬盤廠商是不予保修的,如物理損壞,盤體被拆除等,特別是強調(diào)SSD硬盤寫入次數(shù)如果達到設(shè)計上限,也就是說保修不涵蓋在設(shè)備達到其最大寫壽命后所發(fā)生的問題。但如果您使用DELL Compellent系列的存儲就不會為此擔(dān)心,DELL現(xiàn)在將Compellent系統(tǒng)中的SSD完全納入整個系統(tǒng)的保修期內(nèi),也就是說不管CML里面的SSD硬盤是否達到寫入次數(shù)限制,DELL都會提供保修,保修期跟隨整機,DELL的此保修范圍還適用于已購買DELL Compellent存儲陣列閃存的現(xiàn)有客戶,包含SC4020、SC9000等的SC系列存儲。
經(jīng)過以上的介紹您是不是對SSD的使用越來越有信心,快去購買SSD加速您的應(yīng)用吧!