NAND 快閃記憶體原理,為什麼不應該把手機儲存、固態硬碟用得滿滿

手機越用越慢,排除各類軟體後臺等因素,手機儲存也會影響手機執行速度,特別是在可用空間較少的時候。

什麼是 NAND 快閃記憶體?

記憶體顆粒又稱快閃記憶體,是一種非易失性儲存器,掉電不會丟失內容。快閃記憶體顆粒有很多變種,其中 NAND 快閃記憶體常用於固態硬碟、手機儲存器。

快閃記憶體顆粒:

NAND 快閃記憶體原理,為什麼不應該把手機儲存、固態硬碟用得滿滿

根據 NAND 顆粒每個單元內儲存的位元數不同又可以分為 SLC(Single-Level Cell)、MLC(Multi-Level Cell)、TLC(Triple-Level Cell)和 QLC(Quad-level cell)

儲存密度越高讀寫效能可能會越差、壽命會越短,但成本越低。目前市面 90% 以上的固態硬碟、手機都是 TLC 顆粒。

TLC 顆粒壽命一般在1000次完全寫入(1000 P/E)左右。所謂完全寫入,例如 128G 儲存,寫入 128G 資料為一次 P/E。

NAND 顆粒的組成:

NAND 快閃記憶體原理,為什麼不應該把手機儲存、固態硬碟用得滿滿

在 NAND 快閃記憶體顆粒中:

1。Block 是最小的擦除單位

Block 包含多個 Page。

2。Page 是最小的寫入單位

3。刪除資料時,資料並沒有擦除,而是把檔案的儲存空間(Page)標記為作廢。

4。必須先擦除才能寫入資料

當寫入資料的時候:

如果儲存空間充足,晶片會找一個新的(乾淨的/擦除過的) Block 以 Page 為單位寫入資料。

如果沒有太多空閒容量時(已經沒有閒置的(乾淨的)整個Block,只有作廢的 Page),晶片會將某個 Block 讀取到快取,然後將原本的資料和新新增的資料一起寫入剛才的 Block 。

這種情況造成了原本只需要寫入一個 Page 變成了一個 Block,這就是快閃記憶體的寫放大(Write Amplification)。這種情況下原本只要寫入 4K 的資料,卻造成了整個 Block 的寫入,寫放大128倍。重新寫入整個 Block 的操作造成速度變慢。

可用空間不足時寫入資料的步驟:

NAND 快閃記憶體原理,為什麼不應該把手機儲存、固態硬碟用得滿滿

前面提到 NAND 快閃記憶體擦寫次數是有限的,寫放大不僅使寫入效能下降而且加速了 NAND 快閃記憶體的磨損。

垃圾回收(Garbage Collection)

當我們刪除檔案的時候,系統利用 Trim 命令通知快閃記憶體主控,快閃記憶體主控將他們標記為廢塊,不再搬動資料。並在適當的時間回收廢塊。

壽命均衡(Wear Levelling)

為了避免某些物理快在寫入後就沒有再次更改(例如系統檔案),而一些塊不斷的擦寫導致有些塊壽命還很長,而有些塊磨損嚴重,快閃記憶體主控會在適當的時機給檔案更換位置。

結論:

從上面可以看到快閃記憶體主控會在適當的時機

不斷的騰挪資料儲存在 NAND 快閃記憶體物理塊的位置

,起到均衡磨損、減少寫放大的作用。

隨著資料越來越多,快閃記憶體儲存空間越來越少,留給主控騰挪的空間也越來越少, IBM Zurich Research Laboratory 做的研究表明寫放大和空閒空間關係極大。如下圖:

NAND 快閃記憶體原理,為什麼不應該把手機儲存、固態硬碟用得滿滿

空閒塊少後,寫放大達到3-4倍,當快閃記憶體儲存空間使用大於75%後,會因為寫放大而大大降低寫入效能。所以刪除掉一些檔案吧。