快閃轉換層(flash translation layer)
/ F-T-L /
作業系統與軟體想要一個簡單友善的儲存裝置:「這是第 5000 號區塊,請覆寫它。」但原始快閃不肯配合——你無法就地覆寫一頁,而且重用任何一頁前,必須先抹除它所在的一整個大區塊。快閃轉換層,也就是 FTL,是固態硬碟內部那段聰明的韌體,用來橋接這道鴻溝。它是個翻譯員兼記帳員,讓外界保有它簡單的「讀寫任一區塊」觀點,自己則在底下悄悄跳那支彆扭的快閃之舞。
它的核心戲法是「間接」:FTL 維持一張地圖,把邏輯區塊位址(軟體使用的號碼)對應到實體快閃頁(資料真正所在)。當軟體「覆寫」邏輯區塊 5000,FTL 並不碰舊的實體頁;它把新資料寫到別處某個已抹除的頁,更新地圖讓 5000 現在指向那裡,並把舊頁標記為無效。稍後,一個叫做垃圾回收的背景程序,找出滿是無效頁的區塊,把任何仍有效的頁複製出來,再抹除整個區塊使它可重用。磨損平衡也住在這裡,引導寫入好讓抹除平均散開。
為什麼這很重要:FTL 正是固態硬碟能夠在快閃怪異限制下,假裝成硬碟即插即用替代品的原因。它也是固態硬碟行為微妙之處。垃圾回收執行時會與裝置爭用,所以寫入效能會有起伏;FTL 每次邏輯寫入所做的額外實體寫入稱為寫入放大,它既拖慢速度,也更快消耗單元有限的壽命。FTL 是韌體在無形中做一件難事——而且大多時候,做得漂亮。
軟體把邏輯區塊 5000 寫了三次。實體上,FTL 寫到頁 A,再寫到頁 B(把 5000 映射到 B、把 A 標記無效),再寫到頁 C。邏輯區塊 5000 對軟體而言原地不動,但用掉了三個不同的實體頁,其中兩個如今等著在垃圾回收時被抹除。
一個邏輯區塊、許多實體頁:靠「間接」才讓快閃假裝能就地覆寫。
寫入放大意味著一次邏輯寫入可能引發數次實體寫入(搬遷加上最終抹除)。這就是為什麼天真的重度寫入工作負載,會比原始位元組數所暗示的更快耗損固態硬碟。