Nand Flash管理算法介紹之主要模塊介紹

本文把FTL管理劃分爲5個相對獨立的模塊,FTL的實現的過程中,可以根據需求進行組合。

Data Organization:

本模塊主要是管理Flash空塊的分配和組織。
在FTL管理中,Flash一般劃分爲兩個部分:元數據區域(meta-data)、數據區域(data)。元數據區域用於FTL的表格管理,和提供冗餘塊(over-provision)。數據區,存放Host發的邏輯數據。
在數據區域,FTL還會對Flash劃分爲一個個物理空間集合,比如說,按Nand Flash頁大小(4KB、8KB、16KB)或者按塊大小(256KB、512KB、1MB)進行劃分。算法頁會對整個邏輯區間劃分爲一個個邏輯片段進行管理,和Nand Flash物理空間集合一一對應。一個邏輯片段大小爲16KB,對應一個Nand 16KB的物理位置。如下圖,Nand Flash集合可能來自不同塊、頁、或者不同LUN、DIE、Channel。


Data Mapping:

本模塊主要是負責邏輯空塊到物理空塊的映射。FTL映射均是使用鍵-值的方式對映射進行管理,把邏輯片段按順序排號當做鍵,對應的Nand位置爲值。
當前主流的FTL,數據映射方案大致有三種:頁映射方式,塊映射方式,混合映射方式。
1. 頁管理算法:以Nand頁大小對整個邏輯區間進行劃分,劃分爲很多個頁大小的邏輯片段,對應着一個個Nand物理頁。優點:映射靈活,隨機性能較其它兩種映射方案好。缺點:映射關係對Ram需求大,Ram中一般不能全部緩存所有映射關係,所以需要把大部分邏輯映射關係存到Flash中。更新映射效率低,管理複雜。如果把頁映射管理的邏輯片段變得更小,比如說4K、8K,當前主流高性能設備很多都採用這種方式,和文件系統最小操作單位對應。
2. 塊管理算法:以Nand塊大小對整個邏輯區間進行劃分,劃分爲很多個塊大小的邏輯片段,對應着一個個Nand物理塊。優點:映射關係簡單,管理簡單。缺點:回收效率低,滿滿的都是缺點。
3. 混合管理算法:把Nand數據區域劃分爲兩種類型,Log塊和Data塊,數據更新先寫到Log塊上,然後通過Merge、Switch方式轉換爲Data塊。Log塊使用頁管理,Data塊使用塊管理。優點缺點是上述兩種的折中。
沒有哪種映射方案是最優的,隨機存取的話,頁管理算法比較好,順序存取,塊管理算法會好。不過從應用上來說,寫入的方式多種多樣,頁管理算法適應性是最好的。不過,高性能的設備,絕大部分使用頁管理算法(4K、8K等扇區管理算法)。

Data Clustering:

主要用於把Host寫下來的數據進行分類,存放於不同的物理位置中。
主要有以下幾種類型:
1. 區分原數據和新寫入的數據寫入的位置,新、原數據寫到不同的地方(新數據寫到Log塊,原數據保存在Data塊)。--PS:此爲最基本的方式。
2. 根據寫入數據長度,劃分爲順序數據和隨機數據。順序數據可以採用塊映射管理,而隨機數據可以使用頁映射進行管理,從而提高性能。
3. 根據存取的頻率,劃分爲熱數據和冷數據。熱數據更新頻繁,產生很多的無效頁,因此和冷數據區分開的話,可以減少垃圾回收損耗。

Data Recycling:

當空閒頁或者當前符合觸發條件,那麼FTL就會執行數據回收,也稱爲Garbage Collection。
數據回收觸發條件主要有2種:
1. 靜態回收:當空閒頁數據少於閾值,那麼觸發回收。回收閾值不好選定,設置太高,那麼會頻率進行數據回收;設置較低的話,數據回收不及時。
2. 動態回收:觸發數據回收的條件是根據當前的工作負荷等因素動態調整的。
數據回收塊的選擇方案:

Data Space Management:

此模塊主要是管理空閒塊隊列的使用,大概有以下方式:
1. FIFO原則(先進先出)
2. 取一個擦除次數最小的塊
3. 根據要存的數據類型(冷數據、熱數據)去選擇不同擦除次數的塊
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章