閃存數據保存的分析
來介紹其對閃存數據保存的分析。
閃存基本單元浮柵晶體管的截面圖。最上面是控制層,中間是浮柵層,浮柵上面是多晶硅氧化層,下面是隧道氧化層??刂齐妷汉芨叩臅r候,會產生量子隧穿效應,電子從襯底 Substrate出發,穿過隧道氧化層,進入浮柵保存起來,就完成了寫操作。反之,在控制層加很強的負電壓,電子就從浮柵量子隧穿,回到襯底,這個操作叫作擦除。不過,控制層不加電壓的時候,氧層依然會產生一個電場,叫作本征電場,它是由浮柵里面的電子產生的。在這個電場的作用下,電子會從浮柵慢慢泄露,泄漏的多了,數據就會發生錯誤。從寫入操作到電子慢慢泄漏,直到數據出錯,這個期限叫作數據保桿期,在SLC時代,這個時間很久,有好幾年,但是到了TLC時代,不到一年,有的只有幾個月。
那為什么閃存用得越久,數據保存時間越短呢?這要怪一個效應、這就要怪一個效應:Trap-assisted tunneling(TAT)。如圖2所示,我們知道隧道氧化層是絕緣的,但是隨著閃存的使用,歷經很多次的擦寫,氧化層和浮柵層的愛情終于要走到終點了,因為經過這么年風風
雨雨,氧化層老了,有不少通過它的電荷被滯留下來,絕緣體有了導電性。這樣,電荷從
浮柵跑得就更快了。所以,閃存擦寫次數越多,數據保存時間就越短。到最后快到額定擦
寫次數的時候,比如3000次,剛寫的數據就很容易出錯。
不過,氧化層并不總是在截留電荷,有時候它攔截的電荷也會離開,叫作 Charge de-trapping。只不過離開的既有正電荷,也有負電荷,所以對閾值電壓的影響是雙向的。
那么,怎樣解決 Data retention的問題呢?總不能讓用戶的數據放個幾個月或者幾年就丟了吧?一般固態硬盤會采用 Read Scrub技術,或者叫數據巡檢、掃描重寫技術等。
如果你對存儲技術有所了解,那么當你看到Scmb這個詞的時候,首先肯定想到的是Sun公司開發的大名鼎鼎的ZFS( Zettabyte File System)文件系統。ZFS的設計者發現,有很多用戶的數據長期沒有讀過,更別說被重寫了。即使是數據讀取頻繁的數據庫應用,也存在長期不被訪問的數據,它們寂寞地躲在角落里,長期無人問津。但是,不管什么類型的磁盤,總是會有概率發生比特翻轉,導致數據出錯,等你需要這份數據的時候,錯誤有可能比較嚴重,根本恢復不出原樣。在ZFS文件系統中,每個數據塊都有自己的校驗碼Checksum,只要被讀了,就可以通過 Checksum發現數據是否出錯,提前對出錯的數據塊進行糾錯。所以,ZFS提供了一個功能叫 Scrub,對文件系統進行掃描,提前發現那些出錯的數據,并糾錯重寫。
固態硬盤的 Read Scrub技術跟ZFS類似,在固態硬盤不忙的時候,按照一定的算法掃描全盤,如果發現某個閃存頁翻轉比特數量超過一定閾值,就重寫數據到新的地方。這樣做的好處是避免數據放太久從而導致比特翻轉數量超過ECC算法的糾錯能力,這樣能減少ECC不可糾錯誤。