由于NAND Flash性能良好、低功耗、抗震動(dòng)等特性,基于NAND Flash的存儲(chǔ)器件已經(jīng)廣泛應(yīng)到生活中的方方面面,如筆記本電腦、手機(jī)、數(shù)碼相機(jī)等。
在實(shí)際應(yīng)用場(chǎng)景中,掉電是很常見(jiàn)的情況,如電腦電源不小心被踢掉了、用戶(hù)為了節(jié)省時(shí)間拔插電源進(jìn)行關(guān)機(jī),此時(shí)存儲(chǔ)器件可能處于各種的流程,比如寫(xiě)、讀流程、垃圾回收流程等。如果固件沒(méi)有正確處理,可能會(huì)導(dǎo)致數(shù)據(jù)被掉電永久破壞、數(shù)據(jù)產(chǎn)生一致性問(wèn)題等等,這種錯(cuò)誤會(huì)導(dǎo)致數(shù)據(jù)丟失,甚至系統(tǒng)崩潰。特別在企業(yè)級(jí)應(yīng)用上,對(duì)數(shù)據(jù)完整性有著更高的要求。
從存儲(chǔ)器件端看,掉電可能導(dǎo)致的異常大概有以下幾種:
1 新增壞塊
1.1 掉電干擾
NAND Flash在編程、擦除等過(guò)程中,如果遭遇掉電,會(huì)導(dǎo)致當(dāng)前操作出錯(cuò)。特別在部分高制程的NAND Flash,在操作的過(guò)程中出現(xiàn)掉電,甚至?xí)?dǎo)致NAND Flash塊間干擾和塊內(nèi)干擾,影響非操作塊或者非操作頁(yè)的數(shù)據(jù)出錯(cuò)。如果固件沒(méi)有識(shí)別到這種異常,那么會(huì)造成靜默數(shù)據(jù)損壞。
1.2 Shared Page干擾
在多階存儲(chǔ)技術(shù)的NAND Flash(比如MLC、TLC、QLC)上,共享同一條WL的page稱(chēng)為shared pages。以2D MLC為例,有兩個(gè)page共享一條WL,分別稱(chēng)為lower page和upper page,編程MLC WL的時(shí)候,需要進(jìn)行編程兩次,首先編程lower page,然后編程其它WL的page,最后再編程對(duì)應(yīng)的upper page。
如果在編程upper page的時(shí)候出現(xiàn)掉電,那么大概率導(dǎo)致對(duì)應(yīng)的lower page出錯(cuò)。 如圖所示,host連續(xù)發(fā)送多條指令進(jìn)行寫(xiě)入,在寫(xiě)入page5的時(shí)候遭遇掉電,那么page1上的數(shù)據(jù)也會(huì)被損壞,但是中間page2 ~ page4的數(shù)據(jù)是沒(méi)問(wèn)題的。
圖1 MLC編程掉電shared pages損壞
2 數(shù)據(jù)一致性問(wèn)題
2.1 數(shù)據(jù)一致性
Host往存儲(chǔ)器件寫(xiě)入userdata0 ~ userdata9數(shù)據(jù)后掉電了,在上電的時(shí)候,固件需要從快照點(diǎn)開(kāi)始進(jìn)行映射重建,如圖2。
圖2 上電重建映射示意圖
如果存儲(chǔ)器件上電后進(jìn)行數(shù)據(jù)重建后,出現(xiàn)下圖3的新舊數(shù)據(jù)混合的情況,綠色是掉電前host寫(xiě)入的新數(shù)據(jù),紅色是舊數(shù)據(jù)。這種數(shù)據(jù)一致性問(wèn)題容易導(dǎo)致host應(yīng)用端的異常。所以在上電重建映射的時(shí)候,如果發(fā)現(xiàn)中間有部分?jǐn)?shù)據(jù)已經(jīng)損壞,那么建議把往后寫(xiě)入的數(shù)據(jù)也恢復(fù)到舊數(shù)據(jù),缺點(diǎn)是會(huì)丟失較多數(shù)據(jù),如圖4。
圖3 上電重建映射的數(shù)據(jù)一致性問(wèn)題
圖4 上電重建映射的丟失出錯(cuò)后所有數(shù)據(jù)
存儲(chǔ)器件數(shù)據(jù)一致性問(wèn)題容易給host應(yīng)用端帶來(lái)不可以預(yù)知的異常,在固件設(shè)計(jì)的過(guò)程中需要避免這種情況出現(xiàn)。
3 數(shù)據(jù)重建過(guò)長(zhǎng)
過(guò)去市場(chǎng)更多關(guān)注是固態(tài)存儲(chǔ)設(shè)備的性能,而對(duì)于設(shè)備上盤(pán)枚舉時(shí)間不太關(guān)心。當(dāng)前不少應(yīng)用場(chǎng)景為了提供更好的客戶(hù)體驗(yàn),對(duì)開(kāi)機(jī)時(shí)間有著非常嚴(yán)格的要求,優(yōu)化粒度按秒進(jìn)行計(jì)算,所以固態(tài)存儲(chǔ)器件的上電重建表格和異常處理的時(shí)間對(duì)改善客戶(hù)體驗(yàn)有著重要的幫助。
當(dāng)前大容量固態(tài)存儲(chǔ)器件里面往往包括多片NAND Flash。固件需要維護(hù)從邏輯到物理的映射關(guān)系,在掉電的時(shí)候,部分映射關(guān)系可能會(huì)臨時(shí)保存在內(nèi)部RAM上,固件需要從上個(gè)快照點(diǎn)開(kāi)始掃描NAND Flash對(duì)映射關(guān)系進(jìn)行重建。
上電映射重建流程,和固件中的表格管理結(jié)構(gòu)、快照策略等存在關(guān)系,部分固件機(jī)制可能會(huì)對(duì)多個(gè)NAND block和多個(gè)page逐個(gè)進(jìn)行掃描,從而構(gòu)建掉電前寫(xiě)入的數(shù)據(jù)結(jié)構(gòu),此流程需要耗費(fèi)大量時(shí)間,用時(shí)甚至達(dá)到秒級(jí)別。
4 處理機(jī)制
針對(duì)設(shè)備掉電導(dǎo)致的種種問(wèn)題,得一微結(jié)合對(duì)NAND Flash相關(guān)的特性的分析和客戶(hù)體驗(yàn)的了解,在固件中增加多個(gè)處理模塊:數(shù)據(jù)延遲更新、SMART RAID、動(dòng)態(tài)快照點(diǎn)、低電壓處理等。并且使用仿真平臺(tái)和開(kāi)發(fā)SSD host平臺(tái),可以提供有針對(duì)性且高效率的SSD測(cè)試環(huán)境。
得一微SSD有以下優(yōu)勢(shì):
(1)有完善的固件、硬件設(shè)計(jì)流程;
(2)通過(guò)電壓波動(dòng)仿真實(shí)驗(yàn)和實(shí)際環(huán)境測(cè)試來(lái)保證SSD的數(shù)據(jù)可靠性;
(3)有專(zhuān)業(yè)的工程師、設(shè)備對(duì)掉電情況做分析驗(yàn)證;
(4)通過(guò)得一微專(zhuān)業(yè)測(cè)試過(guò)的SSD,可以在應(yīng)對(duì)突然掉電情況時(shí)保證數(shù)據(jù)的一致性和完整性。