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%後,會因為寫放大而大大降低寫入性能。所以刪除掉一些文件吧。


分享到:


相關文章: