SSD FTL揭祕

名詞介紹

  • page

SSD 存儲芯片內寫操作的最小單元。

  • block

SSD 存儲芯片內擦除操作的最小單元。

  • FTL

Flash Transfer Layer的簡寫。

FTL的功能

實現host地址到nand地址到轉換。

FTL mapping的基本機制

  • page-level mapping

每一個邏輯的page 都是映射到一個物理page, 映射策略和同一個block內到其他page 無關。

  • block-level mapping

對應關係類似上面,只是粒讀是比page 更大的block 。

SSD FTL揭祕

  • hybrid mapping

部分block 用page-levle mapping機制,部分block 採取block-level
mapping 機制。如下圖所示:

SSD FTL揭祕

常見的FTL算法

好算法的評判標準:

  • small memory footprint

  • good writing performance

優化思路

  • mapping-entry to flash
    對於page level mapping機制:
    優點是性能好,缺點是SSD控制器內部佔用的內存大,但可以把部分mappint entry 放到flash中去優化。

  • log block FTL
    對於block level mapping 機制:

優點是總的mapping entry少,但是由於block內部不同page的寫需要COW 操作,導致性能低。這可以通過給block 內部添加的額外的page或者block來接受寫更新請求來優化,這部分page或block被分別叫做log-page/log-block,而默認的那部分page/block被稱爲data-page/data-block。後續兩者可以一趟合併,無需COW。

  • partitioned-flash
    思路和依賴體現在下面幾點:
  1. SSD 能被切分
    SSD存儲介質能夠被切分成多個區域;

  2. IO流有高、低頻之分
    部分數據被頻繁更新;部分數據很少跟新;

  3. 內部支持hybrid mapping scheme
    內部部分NAND的FTL是page-level mapping; 部分是block-level mapping;

  4. 獨立映射
    高頻(熱數據)使用 page-level FTL;
    低頻(冷數據)使用 block-level FTL;

log block FTL

Mitsubishi

這種機制在每個log page裏面包括額外的log page, 這些log page應用程序不可見,只在block裏的data page更新的時候纔會立即更新。特點是:後續對block的寫,會基於log page;如果log page用完了,會進行copy and merge。如下圖所示:

SSD FTL揭祕

M-systems

M-systems可以理解成block RAID1, 一個logical block 對應兩個physical block,: data block和log block 。M-systems有兩種管理映射的機制:

  • ANAND

相同偏移的page 才能相互映射。第一次覆蓋寫會落到log block,第二次覆蓋寫纔會觸發merge操作。舉例如下:

SSD FTL揭祕

這種方法的優點是 不需要維護data block和log block的映射關係。

  • FMAX

對某個page的覆蓋寫的更新會寫到log block的第一個空閒page,之前的page number(在較早的data block裏面的)會被拷貝到帶外空間(OOB)。data block和log block的merge操作只會發生在log block裏空閒空間不足的情況下。

BAST (Block Associative Sector Translation FTL)

BAST可以理解爲log block 數量受到限制的FMAX, FTL mapping table 而非OOB region被用來管理log-block和data-block的1:1映射關係。 當出現下面的情況下會觸發merge:

  • log block 被用完了;
  • 覆蓋寫的時候free log block  不足。

    這個方法的不足在於:當有超過log block 數量的更新同時進行的時候,會觸發多個merge 操作,即便此時有的log-block裏有效數據很少。

FAST (Fully Associative Sector Translation FTL)

FAST通過全相關解決了上面 的問題。一個log block 可以映射到多dat block 。在這種策略中, log blocks被分成兩個區域。每個區域都包含一個專門給順序更新的block,因爲順序寫如果落到不同block會導致merge 操作效率低下,所以把落在同一個邏輯block 的page 順序更新都映射到同一個block。此外,每個區域還包括對隨機寫友好的log block ,這些block 可以在隨機更新的時候被最大程度地並行使用,同時最小化了merge 開銷。下面這個圖很直觀地說明了這個過程:

SSD FTL揭祕

LAST (Locality Aware Sector Translation FTL)

FAST merge操作的次數少,但是每次merge操作的代價大。因爲FAST 中log-block 和page-block是1:N映射的,一個log-page裏可能映射到多個data block,這樣merge一個log block可能就需要更新多個data block。特別地 有的data block 可能更新比較少,而有的data block 可能比較頻繁地更新,如果都混在同一個log block裏可能造成實際數據更新比較少的block也頻繁merge,顯然這樣效率不高。爲此,自然想到了一種把不同頻次的IO 分流到不同的log-block 的方法。

  1. 爲順序寫分配更多的log-block;

  2. 把屬於隨機寫的log-block 分成兩個區域:一部分log page 用來接收熱數據;一部分用來接收冷數據。

K-Associative Sector mapping FTL

log-block 和data-block K路組相連的映射方式,來減少FFTL merge操作的開銷。

Hybrid FTL

主要的思路如下:

  • 爲冷熱數據分配不同的log block/log pages;
  • 熱數據採取 page-levle mapping
  • 冷數據採取block-level mapping

Page-level mapping FTL

傳統的page-level mapping 由於使用數量巨大的mapping table entry 佔用很多內存,通常不是一個最好的選擇。業界提出了幾種方法。

DFTL (Demand-based FTL)

主要思路如下:

  • 高頻訪問的mapping table entry 存在控制器RAM裏;
  • 其他的mappieng table entry 存在flash memory裏;

示例圖如下:
SSD FTL揭祕

###

SFTL (Spatial Locality Aware FTL)

主要思路是利用順序IO的特性來減少mapping table 的大小。對於順序IO,不需要加載對mapping table 的多個不同的引用,只需要加載一個引用以及表示還有多少順序訪問的數量就夠了。

CFTL (Convertible FTL)

一種充分利用了程序時間和空間局本性的 FTL。

  • 利用空間局部性

使用了cache來存取部分mapping table

  • 利用時間局部性
    對於密集的讀請求使用block-level mapping,而對很頻繁的更新請求使用page-level mapping機制。

FTL with partitioned flash memory

WAFTL (Workload Aware FTL)

WAFTL根據IO pattern 來存放數據。在這種FTL實現裏:

  1. flash memory 被物理分成兩個區域:
  • 基於page映射的區域

managed page-wise called Page Mapped Blocks (PMB), 用來存放:

  • 基於block映射的區域

managed block-wise called Block Mapped Blocks (BMB)

  1. 根據IO pattern分區存放數據:
  • 隨機訪問的數據以及block 部分更新的數據存放到PMB 區域;
  • 順序訪問的數據以及mapping table 存放在 BPM區域;
  • WAFTL 內部 把flash memroy 部分空間用作了buffer,在這些數據被copy到BPM區域之前,會被臨時、順序寫入到buffer 裏面去。

CACHE-FTL (Cache Aware Configurable Hybrid FTL)

類似上面的WAFTL, flash memroy也劃分了分區。考慮到SSD控制器內部也有cache,
其最終目的就是爲了加快對flash memory 對訪問,同時考慮儘量減小最終落到block內部的 cache上的有效數據和flash memory上的無效數據的merge開銷。因此,CACHE-FTL 提出了一種通過統計內部flush.操作下刷單page數量來決定寫到 page-mapping 區域還是block mapping 區域:如果這個數量低於某個閾值,就寫到page-level mapping 區域,否則寫到block-level mapping區域。

此外,CACHE-FTL的GC機制在回收空間的時候,允許數據從page-level mapping區域搬到block-level mapping 區域。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章