檔案系統與儲存

快閃轉譯層(flash translation layer,FTL)

/ FTL = eff-tee-ell /

一台 SSD 在你的電腦看來,與一顆舊的旋轉磁碟一模一樣:一個編了號的磁區陣列,你可以自由讀取與覆寫。但它裡面的快閃記憶體其實根本不是那樣運作。原始快閃無法就地覆寫一個小磁區——它只能以大塊抹除、再寫入已抹除的空間——而每個單元在有限次數的抹除週期後就會磨損壞掉。橋接那個不匹配,使磁碟機能假裝成一顆簡單可覆寫的磁碟、同時在底下管理真正的快閃,正是 SSD 內部一塊叫做快閃轉譯層的韌體的職責。

三個快閃事實驅動 FTL 的設計。(1) 快閃被組織成頁(寫入單元,也許 4 或 16 KiB),分組成大得多的區塊(抹除單元,也許數 MiB),而你只有在一個頁所屬的區塊先被抹除過後才能寫它。(2) 你無法就地覆寫一個頁;要改資料,你必須把它寫到一個全新的、已抹除的頁、並把舊的標為陳舊。(3) 每個區塊在故障前只忍受有限次數的抹除週期。FTL 靠保有一張對應表來處理這三件事,把你作業系統所用的邏輯磁區號對應到資料真正住的實體快閃頁。當你覆寫邏輯磁區 100,FTL 把新資料寫到某個空的實體頁、單純地重新指向那張對應——舊頁變成日後待回收的垃圾。一個背景的垃圾回收器把仍有效的頁從多半陳舊的區塊裡彙整出來,好讓那些區塊能被抹除與重用。而磨損平衡刻意把寫入分散到所有區塊上,使沒有單一個區塊磨損壞掉而其他仍嶄新,延長磁碟機的壽命。

為何重要:FTL 正是為何一台 SSD 能在快閃那彆扭的「抹除先於寫入」本性之下、仍呈現一個乾淨的可覆寫磁區介面,也是為何 SSD 的效能與壽命如此沉重地取決於韌體品質。誠實而重要的後果是寫入放大:因為改一點點資料可能逼 FTL 搬移與重寫比你實際所寫更多的快閃(在垃圾回收期間),磁碟機在實體上可能寫下你作業系統所送位元組的好幾倍,使快閃磨損得更快。這也正是 TRIM 登場之處——沒有它,FTL 無法得知檔案系統已釋放了哪些邏輯磁區,於是浪費地保存其實已死的資料。

作業系統覆寫邏輯磁區 100: FTL 把新資料寫到空閒實體頁 P_new,對應 LBA 100 -> P_new 舊實體頁 P_old 標為陳舊(尚未抹除) 稍後:垃圾回收器抹除存放 P_old 的區塊以回收它 磨損平衡分散抹除,使沒有單一個區塊最先死

FTL 在每次覆寫時把一個邏輯磁區重新對應到一個全新的快閃頁;舊頁等待垃圾回收。

寫入放大是真實的:垃圾回收與重新對應可能使 SSD 在實體上寫下你作業系統所送資料的好幾倍,使快閃磨損得比邏輯寫入量所暗示的更快。FTL 藏住快閃「抹除先於寫入」的本性,卻無法使它免費;TRIM 之所以存在,正是為了讓 FTL 得知哪些邏輯磁區已死、不必保存。

又稱
FTLflash translation layerwear leveling快閃轉譯層磨損平衡