閃存塊(Block)具有一定的壽命,不是長生不老的。前面提到,當一個閃存塊接近或者超出其最大擦寫次數時,可能導致存儲單元的永久性損傷,不能再使用。隨著閃存工藝不斷向前,這個擦寫次數也變得越來越小。
圖1-1 閃存損壞狀態
在閃存當中的存儲單元中,先天就有一些是壞掉的,或者說不穩定的。并且隨著閃存的不斷使用,壞的存儲單元越來越多。所以,用戶寫入到閃存的數據,必須有ECC糾錯碼保護,這樣即使其中的一些比特發生反轉,讀取的時候也能通過ECC糾正過來。一旦出錯的比特超過糾錯能力范圍,數據就丟失,對這樣的閃存塊,我們應該廢棄不再使用。
閃存先天有壞塊,也就是說有出廠壞塊。并且,用戶在使用的時候,也會新添壞塊,所以用戶在使用閃存的時候,必須有壞塊管理機制。
第二個問題是讀干擾(Read Disturb)。什么意思?從閃存讀取原理來看,當你讀取一個閃存頁(Page)的時候,閃存塊當中未被選取的閃存頁控制極都會加一個正電壓,以保證未被選中的MOS管是導通的。這樣問題就來了,頻繁的在一個MOS管控制極加正電壓,就可能導致電子被吸進浮柵極,形成輕微的寫,從而最終導致比特翻轉。但是,這個不是永久性損傷,重新擦除閃存塊還能正常使用。注意的是,讀干擾影響的是同一個閃存塊中的其它閃存頁,而非讀取的閃存頁本身。
圖1-2 讀干擾原理
第三個問題是寫干擾(Program Disturb)。除了讀干擾會導致比特翻轉,寫干擾也會導致比特翻轉。還是要回到閃存內部的寫原理上來。
圖1-3 寫干擾原理
我們寫一個閃存頁的時候,數據是0和1混合的。由于對擦除過的閃存塊,其所有的存儲單元初始值就是1,所以寫的時候,只有寫0的時候才真正需要寫。如圖3-48所示,方框里的單元是寫0,需要寫的,圓圈里的單元的代表寫1,并不需要寫操作。我們這里把方框里的單元稱之為Programmed Cells,圓圈里的單元叫Stressed Cells。寫某個閃存頁的時候,我們是在其 WordLine的控制極加一個正電壓(圖3-48是20V)。對于Programmed Cells所在的String,它是接地的;不需要寫的單元所在的String,它是接一正電壓(圖3-48為10V)。這樣最終產生的后果是,Stressed Cell也會被輕微寫。與讀干擾不同的是,寫干擾影響的不僅是同一個閃存塊當中的其它閃存頁,自身閃存頁也受影響。相同的是,都是不期望的輕微寫導致比特翻轉,都非永久性損傷,經擦除后,閃存塊還能再次使用。
第四個問題是存儲單元之間的耦合影響(Cell-to-Cell interference)。前面提到,浮柵極閃存存儲電荷的是導體,因此存儲單元之間存在耦合電容,導致存儲單元內的電荷發生意外變化,最終導致數據讀取錯誤;
還有個問題是電荷泄漏。存儲在閃存存儲單元的電荷,如果長期不使用,會發生電荷泄漏。同樣是非永久性損傷,擦除后閃存塊還能使用。
上面說的這些,是所有閃存面臨的問題,包括SLC,MLC和TLC,這些問題的處理方法,在后面的FTL章節會進行介紹。不同商家的閃存,不同制成的閃存,以及2D/3D閃存,還有其特有的問題,用戶在使用時需要用固件克服或者緩解這些問題。
壽命
我們大家生活在人間,祖祖輩輩和周圍觀察到的生靈告訴我們一個道理:所有的人和生物都不能像神仙一樣長生不老。其實不只是生物,所有的存儲器件都是有壽命的。
圖1-4 SLC電壓分布(來源:Inside NAND Flash Memory)
我們再來看圖3-49這張0和1的分布圖,橫軸是電壓,縱軸是存儲單元的數量。0的區域表示被寫過的那些單元電壓分布區間,1的區域是被擦過的那些單元電壓分布區間。所以說,如果要正確地讀到數據,0和1這兩個區間要盡量分割清楚,保證它們的主峰有足夠遠的距離。
除了0和1靠近之外,閾值電壓也不能太偏。回憶一下讀數據的原理。
圖1-5 讀操作電壓示例
要讀的單元柵極加 0V電壓,這時擦過的晶體管閾值電壓是-Vt,導通,溝道有電流,Bitline端的傳感器能夠檢測到,讀到“1”。而經過寫的晶體管閾值電壓是+Vt,不導通,溝道電流很小,讀為“0”。隨著擦寫次數的增加,會發生三種故障:
l 擦過的晶體管閾值電壓變大,從-Vt向0V靠近,這樣讀的時候溝道電流變小,傳感器檢測不到,讀出錯。
l 寫過的晶體管閾值電壓變小,從+Vt向0V靠近,有可能會被誤檢測為擦過的狀態。
l 寫過的晶體管閾值電壓變大(如圖3-50,>5V,即使控制極加5V電壓,它也是截止的),有可能在其他的單元讀的時候,把整個Bitline都給關了,一個死蒼蠅害了一鍋粥。
浮柵晶體管對浮柵極下面的絕緣層(Tunnel氧化物)很敏感,該氧化物厚度變薄(制程不斷減小導致的)或者老化(Degradation,擦寫次數多了)對浮柵極里面的電荷影響大。我們之前介紹了Charge Trap晶體管,其實隨著擦寫次數增多,浮柵晶體管的氧化層漸漸老化,產生不少Charge Trap,這些陷阱會吃掉電子。導致寫之后,進入浮柵的電子數量會減少,最終的結局就是0和1兩個區間不斷靠近。
如圖,上面是寫后的閾值電壓,下面是擦除后的閾值電壓,很明顯,擦除后的閾值電壓在擦很多次之后顯著變高。所以,一般擦除之后會做校驗,方法是把所有的Wordline設為0V,再去檢測每個Bitline的電流。如果某個Bitline電流是0,就意味著有個單元的擦除閾值電壓接近0V,導致晶體管關斷。所以這個閃存塊應該標為壞塊。
圖1-6 閾值電壓變化圖(來源:Inside NAND Flash Memory)
了解了閃存壽命的原理之后,我們再來看看固態硬盤設計實踐中怎么解決這個問題。一般有以下方法:
Wear Leveling:通過磨損平衡算法,讓所有的閃存塊均衡擦寫,避免少數閃存塊先掛掉,導致固態硬盤容量下降。
降低寫放大:寫放大越低,固態硬盤的磨損速度越慢。
用更好的糾錯算法:糾錯能力更強,容許的出錯率更高,可以延長使用壽命。
-
閃存
+關注
關注
16文章
1799瀏覽量
115113 -
存儲
+關注
關注
13文章
4353瀏覽量
86169
原文標題:閃存存在的問題
文章出處:【微信號:SSDFans,微信公眾號:SSDFans】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論