Power Cycling (電源重啟)

Power Cycling (電源重啟)

一般的消費型 SSD,若經過多次異常斷電後,有時會出現資料毀損或無法開機的問題;因此斷電後能確保不會出現異常現象,是 SSD 很重要的一項功能。本文主要說明斷電後常見的異常現象及解決方法,並分析比較各種方法的效果和優缺點。

 

SSD 斷電的方式主要分為「正常斷電」與「異常斷電」。正常斷電代表 Host 會發送指令到 SSD 控制器,告知電源即將中斷,SSD 控制器會將內部所有未儲存的資料回存到 NAND flash,並回送確認資訊給 Host,接著 Host 才會對 SSD 斷電。這種正常斷電方式是最安全的,SSD 通常不會出現問題。

 

而異常斷電又分為「閒置時斷電」和「寫入時斷電」:閒置時斷電是指 Host 在斷電時,沒有資料存取到 SSD,相對而言是比較安全的斷電方式。而最危險的斷電方式是寫入時斷電,因為此時 SSD 可能正將資料寫入 NAND flash,同時 SSD 內部的暫存表格與變數,也尚未回存到 NAND flash,所以此時斷電極有可能造成資料毀損。

如上圖所示,SSD 為了增加效能跟穩定性,通常會把 Host 寫入的資料,先暫存在 RAM buffer 裡面,直到 RAM 存了一定的資料量,才會寫入 NAND flash。若在此時斷電,一般 SSD 存在 RAM 的資料就會消失,而解決方法有下列兩種 :
1. 關掉 RAM buffer : 這是最直接的方法。Host 寫入資料時,SSD 立刻將資料寫入 NAND,然後才回覆 Host 資料已寫入完成。這種方法可以保證異常斷電不會使資料遺失,缺點是會造成 SSD 效能低落。
2. 增加寫入保護電路 : 此方法主要是在 SSD 電路上加入大電容,使 Host 斷電時 SSD 仍有足夠電力可以完成所有運作。當斷電發生時,電壓偵測到外部供電異常,隨即通知控制器,控制器則立刻將所有暫存的資料和表格寫入 NAND flash,並完成所有斷電前應完成的工作。此方法不會發生資料損毀,也不會影響效能,唯一缺點是會增加 SSD 的成本。

 

異常斷電除了會造成 RAM buffer 內的資料消失,也有可能造成原本 NAND 裡的資料毀損或開機時間過長,甚至出現鎖卡,或 SSD 完全損壞的現象。這是因為 MLC/TLC NAND 在一個 cell 裡存放超過一位元,所以在 program 時斷電,不只 page 本身的資料無法成功寫入,同時也會影響到前面已經 program 完成的資料,這稱為 pair page 的影響。

 

如下圖所示,page 0 和 page 4 是同一個 word line (字元線),也就是 pair page。當 page 4 尚未 program 完成時,若突然斷電,則 page 0 的資料也有可能毀損。為解決此問題,SSD 控制器可能將 Host 新寫入的資料先寫到 SLC cache,因為 SLC 一個 cell 裡只有存一位元,所以沒有 pair page,當然也就不會出現上述的問題。但此方法除了會造成寫入放大比增加,也會使 SSD 長時間的平均寫入效能下降。另一個方法是採用 one pass program (一階段寫入) 的 NAND:如下圖所示,這種 NAND 是將同一個 word line (字元線) 的所有 page 一次 program 完成,所以不會影響到前面已經 program 完成的 page,但因此方法一次要 program 好幾個 page,所以控制器需要較大的 RAM buffer。

 

在異常斷電後,SSD 控制器必須找到 header page,也就是斷電前最後 program 的 page。通常採用 scan 的方式,若讀到 empty page,則代表前一個 page 是最後 program 的 page。但此種方法有時會產生誤判,因為有些 NAND 在剛 program 幾微秒後就斷電,則此 page 復電再讀,會讀到 empty page,但實際上此 page 已經 program 過。所以若再繼續 program,則非常容易出現錯誤。另外,若 SSD 在短時間內多次斷電,則有可能出現同一個區塊裡有多個 page 出現大量的 bit error (位元錯誤),這會造成此區塊非常地不穩定,也會造成讀取此區塊的時間過長。因此有些 SSD 控制器的作法就是將此區塊的有效資料搬到另一個區塊,然後再抹除此區塊,就可以解決上述的問題。

 

即使經歷多次異常斷電,仍能維持穩定,是 SSD 一項相當重要的指標;而不同 SSD 的作法也各有優缺點。一般而言,必須根據應用領域的需求來決定使用何種 SSD,也必須在價格、效能和斷電穩定性之間做正確的取捨。