隨著電子設(shè)備的廣泛應(yīng)用,NAND閃存和eMMC作為主流存儲(chǔ)介質(zhì),其使用壽命受到廣泛關(guān)注。本文將探討其損壞的軟件原因,并提供延長(zhǎng)使用壽命的實(shí)用方法。
?前言
長(zhǎng)時(shí)間運(yùn)行后出現(xiàn)NAND或者eMMC損壞,可能的原因有物理?yè)p壞如雷擊損壞,也有可能因?yàn)轭l繁擦寫操作引起壽命到期損壞。下面就應(yīng)用軟件方面的可能性進(jìn)行探討,尋求延長(zhǎng)NAND/eMMC使用壽命的方法。
?閃存的壽命和計(jì)算公式
在NAND閃存中,P/E Cycle也稱為擦除次數(shù),是判斷NAND閃存壽命的關(guān)鍵參數(shù)。隨著P/E Cycle的增加,浮柵與溝道之間的氧化層被磨損的越來(lái)越嚴(yán)重,導(dǎo)致浮柵中電子的控制越來(lái)越艱難,最終結(jié)果就是:NAND的壽命走到了盡頭。每顆NAND閃存,在出廠的那一刻,壽命就固定了。
NAND閃存根據(jù)存儲(chǔ)顆粒密度和結(jié)構(gòu)差異,可分為SLC、MLC、TLC和QLC。存儲(chǔ)密度越來(lái)越高,容量越來(lái)越大,但單位可擦寫次數(shù)卻越來(lái)越少。SLC的密度最低,擦寫次數(shù)最多,使用壽命最長(zhǎng),但現(xiàn)在很少能買到了,特別是大容量閃存,基本都是MLC、TLC甚至QLC了。一般都說(shuō)MLC的擦寫壽命是3000~10000次,但實(shí)際上去咨詢半導(dǎo)體原廠,得到的答案通常都是3000次,哪怕三星、海力士以及Skyhigh這樣的國(guó)際品牌,都是這個(gè)答案。eMMC實(shí)際上是NAND閃存加了控制器,底層存儲(chǔ)還是NAND閃存,所以可在此一并討論。如何延長(zhǎng)閃存的使用壽命,確保存儲(chǔ)的數(shù)據(jù)可靠,是工業(yè)產(chǎn)品一直在試圖解決的問(wèn)題。一個(gè)NAND閃存能使用多久,我們先給出一個(gè)預(yù)測(cè)公式:

對(duì)于特定的Linux系統(tǒng),文件系統(tǒng)開(kāi)銷可看成一個(gè)常數(shù),暫時(shí)不考慮。根據(jù)公式不難看出,預(yù)期使用壽命與分區(qū)容量大小、可擦寫次數(shù)正相關(guān),與寫入放大、每天寫入的次數(shù)以及每次寫入的數(shù)據(jù)量成負(fù)相關(guān)。在產(chǎn)品設(shè)計(jì)方案選型階段,容量、可擦寫次數(shù)是一個(gè)正相關(guān)變量,但對(duì)于特定的一個(gè)產(chǎn)品,閃存一旦選定,可擦寫次數(shù)也就定了,如果有條件擴(kuò)大分區(qū)容量,也是能改善使用壽命的,但改善非常有限。要想比較有效的提高閃存壽命,必須從分母的寫入放大、每天寫入的次數(shù)以及每次寫入的數(shù)據(jù)量上面來(lái)優(yōu)化。 ?寫入放大
我們知道,閃存在寫入數(shù)據(jù)前必須先進(jìn)行擦除,而擦除操作的粒度與寫入操作相比低得多,執(zhí)行這些操作就會(huì)多次移動(dòng)(或改寫)用戶數(shù)據(jù)和元數(shù)據(jù)。因此,要改寫數(shù)據(jù),就需要讀取閃存某些已使用的部分,更新它們,并寫入到新的位置,如果新位置在之前已被使用過(guò),還需連同先擦除;由于閃存的這種工作方式,必須擦除改寫的閃存部分比新數(shù)據(jù)實(shí)際需要的大得多,這就是寫入放大,此倍增效應(yīng)會(huì)增加請(qǐng)求寫入的次數(shù)。
寫入放大,簡(jiǎn)單的計(jì)算公式如下:

影響寫入放大的因素:
垃圾回收,啟用垃圾回收,WA會(huì)減小。
預(yù)留空間,增大預(yù)留空間,能減小WA。
順序?qū)懭?/strong>,理論上順序?qū)懭?,WA為1,當(dāng)然其他因素會(huì)影響到WA。
隨機(jī)寫入,寫入到非連續(xù)的LBA對(duì)寫入放大的影響最大。零散寫入會(huì)帶來(lái)極大的WA影響。例如寫入一個(gè)字節(jié),實(shí)際上閃存最小寫入單位是頁(yè),擦除單位是塊,這樣會(huì)影響到在這個(gè)塊內(nèi)的所有數(shù)據(jù)的搬移和寫入,數(shù)據(jù)量會(huì)非常大。
數(shù)據(jù)壓縮,數(shù)據(jù)壓縮后再寫入,能減少數(shù)據(jù)量的寫入。
刪除重復(fù)數(shù)據(jù),這樣能減少磁盤占用,能減小WA。
從公式來(lái)看,減小WA能增加閃存壽命,具體方法有啟用垃圾回收、增大預(yù)留空間、盡量順序?qū)懭搿⑦M(jìn)行數(shù)據(jù)壓縮以及刪除重復(fù)數(shù)據(jù)等。 ?如何計(jì)算數(shù)據(jù)量?
寫入NAND數(shù)據(jù)量的計(jì)算,并不是按照應(yīng)用程序數(shù)據(jù)來(lái)計(jì)算的,這與NAND閃存的結(jié)構(gòu)和擦寫方式緊密相關(guān)。
一般NAND閃存內(nèi)部結(jié)構(gòu)分為多個(gè)塊(Block),每個(gè)塊包含多個(gè)頁(yè)面(page),每個(gè)頁(yè)面又是由有效個(gè)數(shù)據(jù)區(qū)和spare area區(qū)(即OOB區(qū))組成。NAND閃存以塊為單位進(jìn)行擦除,以頁(yè)為單位進(jìn)行讀寫。

圖1 NAND閃存結(jié)構(gòu)示意圖
圖1所示的NAND閃存,每個(gè)頁(yè)面為4096字節(jié),一個(gè)塊為64頁(yè),整個(gè)器件為2048塊,總?cè)萘繛?096*64*2048=512MB。
如果產(chǎn)品使用的NAND是這樣的結(jié)構(gòu),哪怕寫入1字節(jié)數(shù)據(jù),在計(jì)算數(shù)據(jù)量的時(shí)候,也得按4096向上取整,即4096字節(jié),而不是1字節(jié)。當(dāng)然,寫入4095字節(jié)也是按4096向上取整,4096字節(jié)。同理,寫入4097字節(jié)數(shù)據(jù),則向上取整為8192字節(jié)。
如果不清楚NAND閃存的這些具體信息,可以查看數(shù)據(jù)手冊(cè)或者內(nèi)核啟動(dòng)信息:
?改善措施
綜合上述信息,要延長(zhǎng)NAND/eMMC的讀寫壽命,就要盡量減少對(duì)閃存的擦寫次數(shù),特別是零散數(shù)據(jù)寫入。歸納一下,可以采取以下措施:
1. 合理分區(qū),動(dòng)靜分離
動(dòng)靜數(shù)據(jù)分離,將數(shù)據(jù)按修改頻率分組。一般可將系統(tǒng)分區(qū)與數(shù)據(jù)分區(qū)分開(kāi),確保系統(tǒng)分區(qū)不受數(shù)據(jù)寫的影響。
有效地使用RAM文件系統(tǒng)。系統(tǒng)log信息,以及應(yīng)用程序的log信息,不要直接寫入閃存,盡量寫在RAM文件系統(tǒng)中,僅對(duì)異常log定期寫入閃存,減少閃存寫入次數(shù)。
2. 減少數(shù)據(jù)寫入次數(shù)
- 先將數(shù)據(jù)寫在內(nèi)存里,可以在系統(tǒng)中生成一個(gè)Ramdisk并掛載到某個(gè)目錄,將需要寫入到閃存的數(shù)據(jù)先暫存在這個(gè)目錄,到一定時(shí)間再寫到閃存里面去。也可以使用系統(tǒng)的ramfs目錄存放暫存數(shù)據(jù)。
- 將頻繁修改的數(shù)據(jù)存儲(chǔ)在一塊連續(xù)的區(qū)域中,并定期將數(shù)據(jù)遷移到新的區(qū)域,以避免在同一區(qū)域反復(fù)擦寫。
- 進(jìn)行數(shù)據(jù)壓縮,減小寫入的數(shù)據(jù)量,特別是對(duì)于海量數(shù)據(jù)的應(yīng)用,數(shù)據(jù)壓縮尤為重要。
3. 避免零碎散數(shù)據(jù)寫入
確保在寫入數(shù)據(jù)時(shí),數(shù)據(jù)塊的大小是擦除塊大小的整數(shù)倍,以避免無(wú)效的擦除操作。
4. 維持合理的分區(qū)占用率
不要寫滿分區(qū),維持較低的磁盤占用率,能有效地提高閃存使用壽命。磁盤占用率管理分兩種情況,采用系統(tǒng)的磁盤配額管理或者應(yīng)用程序自行管理。
對(duì)于eMMC閃存,在使用Ext3/4文件系統(tǒng)的時(shí)候,啟用磁盤配額管理,確保磁盤使用率在一個(gè)合理的范圍之內(nèi)。注意,啟用磁盤配額管理,需要普通用戶,建議產(chǎn)品應(yīng)用程序都運(yùn)行在普通用戶模式,而不是root用戶來(lái)運(yùn)行。
對(duì)于NAND閃存,一般都會(huì)使用Yaffs/Yaffs2文件系統(tǒng),支持不了磁盤配額。這種情況要想維持合理的磁盤占用率的話,可以寫一個(gè)磁盤占用率監(jiān)控程序,當(dāng)磁盤占用率超過(guò)某個(gè)閾值,就進(jìn)行磁盤清理工作,刪除不重要或者陳舊的文件,以保持閃存處于比較健康的狀態(tài)。
無(wú)論是NAND還是eMMC,都要定期進(jìn)行數(shù)據(jù)處理,對(duì)于過(guò)期的數(shù)據(jù)要及時(shí)刪除,減小無(wú)用數(shù)據(jù)在閃存使用中的搬運(yùn)和寫入次數(shù)。
5. 閃存健康管理
對(duì)于eMMC,可以在系統(tǒng)中通過(guò)mmc_erase_info文件查看eMMC的擦寫次數(shù),以判斷eMMC的健康狀況。一旦eMMC的擦寫次數(shù)已經(jīng)接近廠商理論值,就要特別留意此閃存上的數(shù)據(jù),并做好預(yù)案處理。

對(duì)于NAND閃存,不能像eMMC這樣方便的查看NAND閃存的擦寫次數(shù),則可以自行統(tǒng)計(jì)NAND擦寫次數(shù),并結(jié)合壽命預(yù)測(cè)公式對(duì)NAND閃存的健康狀況進(jìn)行大致判斷。
6. 壞塊檢查和替換
定期進(jìn)行壞塊檢測(cè)和替換,以防止使用壞塊導(dǎo)致的數(shù)據(jù)丟失和寫失敗。一旦發(fā)現(xiàn)NAND壞塊數(shù)量超過(guò)一定數(shù)值,就要對(duì)NAND整體健康做重新評(píng)估,并啟動(dòng)數(shù)據(jù)安全性預(yù)案處理。
-
閃存
+關(guān)注
關(guān)注
16文章
1823瀏覽量
115440 -
NAND
+關(guān)注
關(guān)注
16文章
1708瀏覽量
137220 -
emmc
+關(guān)注
關(guān)注
7文章
223瀏覽量
53382
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
Flash存儲(chǔ)芯片:NOR Flash、NAND Flash、UFS和eMMC的比較與解析

從NOR到NAND閃存,從Intel到英偉達(dá),閃存的發(fā)展史由誰(shuí)來(lái)續(xù)寫?
于SD卡測(cè)試結(jié)構(gòu)的EMMC測(cè)試座,nand flashEMMC測(cè)試治具說(shuō)明書(shū)
【BeagleBone Black試用體驗(yàn)】進(jìn)階設(shè)置(性能優(yōu)化以及延長(zhǎng)板載eMMC存儲(chǔ)壽命)
NAND閃存的自適應(yīng)閃存映射層設(shè)計(jì)

eMMC改寫內(nèi)嵌閃存卡格局

評(píng)論