Flash Memory Flash Translation Layer (FTL)
Sep 7, 2018 · 3 min read
Write-once
- Out-of-place 由allocator mapping table紀錄更新位置
Bulk erasing
- Garbage collection 蒐集還要的資料
Limited erase count
- 避免記憶體同一個cell一直寫入抹除導致絕緣體太薄並導致損壞(P/E cycle)
- 當block損壞部會擴散,但page會
Address Mapping 分Page/Block/Mapping
Page level:
- 方便快速
- 直接指定位置
- 所需mapping table大
Block level:
- 需要找page
- 麻煩
- mapping table小
- MLC不適合
- 更新會找另一個block
Hybrid:
- Data blocks
Block-level
一人可能有很多位置 - Log blocks
Page-level
讀取效率差,需要歷遍
Garbage Collection:
避免wear overhead,加上由於需要bulk erasing
會將要被清除的bulk上還需要的資料搬到新的bulk,並重新釋放原先的bulk
做法:
Random:
- 適合沒有locality
- wear leveling
- 用戶資料庫
- 更新頻率差不多的
FIFO:
- 監控系統
- Static
- 成本大
- 資料穩定不適合 => wore out
Greedy
Cost-age-time (CAT)
- 由公式計算出最小的block做GC
- Low erase count -> wear leveling 的效果
Fast and endurant garbage collection collection (FeGC)
Wear leveling:
分Dynamic Wear Leveling (DWL)、Static Wear Leveling (SWL)
SWL
- 有搬動資料過程
- 由於Read>>Write,多為考慮寫入冷資料並搬動冷資料。但若讀取較常發生,可能可做優化
- Github 常讀少寫
SWL-Rejuvenator:
- Hybird作法
- (寫)熱資料做page-level
- (寫)冷資料做block-level
- 定義一個時間常數ττ
- 將整個cell往下平移,避免cell wore out
SWL-Observational wear leveling(OWL)
- hybrid
- 新寫入為熱資料
- 由table紀錄熱資料,其他放冷資料
- 排列最高的hot data -> erase 最多
- 僅用min heap空間
- 可以不須如此大費周章
SWL-Progressive
- 資料存取到cell快到P/E cycle再考慮
- 初期較不管
- 設定progressive threshold
- 該threshold會隨時間(生命)變動
- 越老越先啟用WL
- 強制平均使用次數
SWL-New Efficient Reliability aware (ERA)
- 隨時間bit area改變
- 考慮每個block bit error rate不同
- 以bit error rate做考量
- block以強度排列,很強很少佔少數

