大容量儲存與磁碟排程

快閃轉換層(the flash translation layer)

/ FTL /

想像一家店,從外面看,它讓你想多常「重寫」筆記本裡的任何一頁都可以。但櫃檯後面的紙很特別:你只能寫在全新的紙上,而且你一次只能抹除一整本五十張的便條本。於是有位店員悄悄保管一張地圖,記錄目前是哪一張真正的紙存著你的「第 7 頁」,把更新寫到全新的紙上,並在你沒注意時回收用過的便條本。快閃轉換層就是 SSD 裡那位隱形的店員:它讓彆扭的快閃記憶體表現得像一顆簡單、可任意覆寫的硬碟。

具體來說,作業系統和 SSD 交談時,把它當成一顆普通硬碟——一個可以隨意覆寫的扁平邏輯區塊陣列。但快閃記憶體在實體上禁止就地覆寫,而且只能以大區塊為單位抹除。FTL 用一張映射表橋接兩者,這張表把每個邏輯區塊位址對應到目前存著它資料的實體快閃頁。當作業系統重寫某個邏輯區塊時,FTL 把新資料寫到一頁空閒、預先抹除好的頁上,把映射更新成指向那裡,並把舊頁標記為失效。它還會執行垃圾回收(把一個大多失效的區塊中仍存活的頁複製出來,好讓整塊得以抹除並重複使用)以及磨損平均(把寫入分散到所有單元,使任何一個都不會提早磨損)。

為什麼重要:FTL 正是 SSD 能假裝成可即插即用、替換硬碟的全部原因;作業系統的檔案系統不必重寫就能使用它。但這份方便藏著作業系統無法完全看見的代價。不斷的複製與重新映射造成寫入放大——硬碟實體寫入的位元組比作業系統送出的還多,這既拖慢寫入,也更快耗用快閃記憶體有限的抹除循環。因為 FTL 工作時看不見作業系統還在乎哪些區塊,所以才有 TRIM 指令,用來告訴它哪些邏輯區塊現在是空閒的,好讓垃圾回收不必白費力氣保存沒人想要的資料。

作業系統連續覆寫邏輯區塊 500 十次。FTL 從不對同一個實體位置動手十次;它在晶片各處寫了十頁全新的頁,每次更新它的映射,並留下九頁失效的頁給垃圾回收——這正是為什麼硬碟實體寫入的量可能遠多於作業系統所以為的。

一張隱藏的映射表,讓快閃記憶體看起來像一顆可覆寫的硬碟。

FTL 住在硬碟的韌體裡,而不在作業系統中,所以作業系統看不到它的映射,也無法直接控制垃圾回收。作業系統能做的至多是送出像 TRIM 這樣的提示;它無法直接管理快閃記憶體。

又称
FTL快閃轉譯層