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