NAND Flash Fundamentals
NAND Flash 的物理本質
你的手機裡有 256 GB 的儲存空間,裝在一顆比你小指指甲還小的晶片上。十年前,同樣的容量需要一整顆 2.5 吋筆電硬碟,還會因為摔到地上而壞掉。這顆小晶片裡面就是 NAND flash,它讓儲存裝置變得又小又抗震,但也帶來了在 HDD 時代從來不需要擔心的物理限制。
SLC、MLC、TLC、QLC:每個 cell 塞幾個 bit
NAND flash 的基本儲存單元是 floating-gate transistor(或是較新的 charge-trap cell)。一個 cell 透過控制注入的電荷量,來代表不同的資料值。關鍵差異在於每個 cell 要區分幾個電壓等級:
- SLC(Single-Level Cell):1 bit/cell,只需區分 2 個電壓等級
- MLC(Multi-Level Cell):2 bits/cell,需區分 4 個電壓等級
- TLC(Triple-Level Cell):3 bits/cell,需區分 8 個電壓等級
- QLC(Quad-Level Cell):4 bits/cell,需區分 16 個電壓等級
這裡有一個常見的誤解:很多人以為 QLC 就是「比較差的 SLC」。其實不是。它們面對的是根本不同的工程挑戰。QLC 要在同一個電壓範圍裡塞進 16 個等級,每個等級之間的 voltage margin 非常窄。這代表:
- 讀取速度變慢:需要更多次的 voltage sensing 才能判斷 cell 的值。SLC 讀取約 25 us,TLC 約 50-75 us,QLC 可達 100+ us。
- 寫入速度變慢:programming 需要更精確地控制電荷注入量,TLC 的 program time 約 1-2 ms,QLC 更慢。
- 耐久性(endurance)下降:每次 program/erase 都會對氧化層造成損傷。Margin 越窄,能容忍的損傷就越少。SLC 可承受約 100,000 P/E cycles,MLC 約 10,000,TLC 約 3,000,QLC 約 1,000。
- 容量增加:同樣數量的 cell,QLC 的容量是 SLC 的 4 倍。
這就是為什麼企業級 SSD 大多用 TLC(甚至部分用 SLC 做 cache),而消費級大容量 SSD 才用 QLC。這不是品質問題,而是 use case 的選擇。
儲存階層:page、block、plane、die
NAND flash 的組織結構是階層式的,而且每一層的操作粒度不同,這一點對理解 SSD 行為至關重要。
- Page(典型大小 4-16 KB):最小的讀取與寫入單位。你不能只寫 512 bytes,必須寫滿一整個 page。
- Block(典型大小 256-512 個 page,即 4-8 MB):最小的抹除單位 (erase)。這個粒度差異是 SSD 設計複雜度的根源。
- Plane:一個 die 內通常有 2-4 個 plane。同一個 die 的不同 plane 可以並行操作(multi-plane operation),這是 SSD 提升吞吐量的重要機制。
- Die:一個獨立的 NAND flash 晶片。一顆 SSD 裡可能有 4-16 個 die,controller 可以對不同 die 發出獨立的指令(die-level parallelism)。
記住這個比例:讀寫粒度是 page(16 KB),但抹除粒度是 block(4 MB 以上)。這個 250 倍以上的粒度差異,是我們接下來學的所有 SSD 管理機制的根本原因。
Erase-before-write:不能覆寫,只能抹除
這是 NAND flash 最重要的物理限制。一個 page 一旦被寫入(programmed),就不能直接覆寫。如果你想更新這個 page 的內容,你必須先把它所在的整個 block 抹除,然後才能重新寫入。
為什麼會這樣?因為 programming 是把電子注入 floating gate 的過程,這個過程只能「加」電子、不能「減」。要把電子釋放出來,必須對整個 block 施加高電壓來做 erase,而 erase 的電路設計決定了它只能以 block 為單位操作。
這帶來一個直覺的問題:如果每次更新一個 16 KB 的 page 都要搬移整個 4 MB block 的資料,效率豈不是極差?沒錯,所以 SSD 根本不這麼做。SSD 採用 out-of-place write 策略:更新 page 1 時,直接把新資料寫到另一個空白的 page,再更新 mapping table 讓邏輯位址指向新位置。舊的 page 變成 invalid,等之後 garbage collection 來清理。
P/E cycle 限制與 SSD 壽命
每次 erase 操作都會對 cell 的隧穿氧化層(tunnel oxide)造成微小但不可逆的損傷。隨著 P/E cycle 累積,氧化層的絕緣能力下降,cell 的 threshold voltage distribution 會逐漸擴散、重疊,最終無法正確區分不同的電壓等級。
具體的數字:
| Cell type | 典型 P/E cycle 上限 | 每 cell 容量 |
|---|---|---|
| SLC | ~100,000 | 1 bit |
| MLC | ~10,000 | 2 bits |
| TLC | ~3,000 | 3 bits |
| QLC | ~1,000 | 4 bits |
P/E cycle 限制不只影響壽命,也影響 data retention。一顆新的 TLC SSD 可以在斷電後保持資料數年,但接近 P/E cycle 上限的 cell,retention 時間可能縮短到幾個月甚至幾週。這就是為什麼企業級 SSD 通常會設定比消費級更保守的 endurance 規格。
這也是為什麼你的手機用了兩三年之後會感覺變慢。隨著 P/E cycle 累積,NAND flash cell 的 voltage margin 變窄,controller 需要更多次的 read retry 才能正確讀取資料,再加上長期使用後 garbage collection 的壓力增加,讀寫延遲都會上升。你感受到的「手機變慢」,有一部分就是 NAND flash 物理老化的結果。
以一顆 1 TB TLC SSD、P/E cycle 上限 3,000 為例:如果每次寫滿整顆 SSD 算一次 P/E cycle,理論上總共可以寫入 1 TB x 3,000 = 3,000 TB = 3 PB 的資料。但實際上因為 write amplification(後面會詳細討論),真正可寫入的資料量會比這個數字少很多。廠商標示的 TBW(Total Bytes Written)規格通常已經把 write amplification 考慮進去了。
自問自答
-
假設你有兩顆容量相同的 SSD,一顆使用 SLC,一顆使用 QLC。在不考慮 controller 設計差異的情況下,它們各自適合什麼樣的 workload?請從 endurance、讀寫速度、成本三個角度分析。
-
一個 block 包含 256 個 page,每個 page 為 16 KB。如果你只需要更新其中一個 page 的資料,在最壞情況下需要搬移多少資料?這個 read-modify-write 的開銷與 block 大小的關係是什麼?
-
一顆 2 TB QLC SSD 的 P/E cycle 上限為 1,000 次。假設 write amplification factor 為 3,這顆 SSD 的預期寫入壽命(以 TB 為單位)大約是多少?請列出計算過程。
-
為什麼 NAND flash 的 erase 操作只能以 block 為單位,而不能以 page 為單位?這個物理限制如何驅動了 out-of-place write 策略的採用?
-
隨著 P/E cycle 累積,cell 的 threshold voltage distribution 會如何變化?這對 SLC 和 QLC 各自的影響程度有什麼不同?請解釋原因。