SSD 存儲芯片內寫操做的最小單元。算法
SSD 存儲芯片內擦除操做的最小單元。app
Flash Transfer Layer的簡寫。ide
實現host地址到nand地址到轉換。性能
每個邏輯的page 都是映射到一個物理page, 映射策略和同一個block內到其餘page 無關。優化
對應關係相似上面,只是粒讀是比page 更大的block 。3d
部分block 用page-levle mapping機制,部分block 採起block-level
mapping 機制。以下圖所示:orm
small memory footprintblog
mapping-entry to flash
對於page level mapping機制:
優勢是性能好,缺點是SSD控制器內部佔用的內存大,但能夠把部分mappint entry 放到flash中去優化。內存
優勢是總的mapping entry少,可是因爲block內部不一樣page的寫須要COW 操做,致使性能低。這能夠經過給block 內部添加的額外的page或者block來接受寫更新請求來優化,這部分page或block被分別叫作log-page/log-block,而默認的那部分page/block被稱爲data-page/data-block。後續二者能夠一趟合併,無需COW。ci
SSD 能被切分
SSD存儲介質可以被切分紅多個區域;
IO流有高、低頻之分
部分數據被頻繁更新;部分數據不多跟新;
內部支持hybrid mapping scheme
內部部分NAND的FTL是page-level mapping; 部分是block-level mapping;
這種機制在每一個log page裏面包括額外的log page, 這些log page應用程序不可見,只在block裏的data page更新的時候纔會當即更新。特色是:後續對block的寫,會基於log page;若是log page用完了,會進行copy and merge。以下圖所示:
M-systems能夠理解成block RAID1, 一個logical block 對應兩個physical block,: data block和log block 。M-systems有兩種管理映射的機制:
相同偏移的page 才能相互映射。第一次覆蓋寫會落到log block,第二次覆蓋寫纔會觸發merge操做。舉例以下:
這種方法的優勢是 不須要維護data block和log block的映射關係。
對某個page的覆蓋寫的更新會寫到log block的第一個空閒page,以前的page number(在較早的data block裏面的)會被拷貝到帶外空間(OOB)。data block和log block的merge操做只會發生在log block裏空閒空間不足的狀況下。
BAST能夠理解爲log block 數量受到限制的FMAX, FTL mapping table 而非OOB region被用來管理log-block和data-block的1:1映射關係。 當出現下面的狀況下會觸發merge:
覆蓋寫的時候free log block 不足。
這個方法的不足在於:當有超過log block 數量的更新同時進行的時候,會觸發多個merge 操做,即使此時有的log-block裏有效數據不多。
FAST經過全相關解決了上面 的問題。一個log block 能夠映射到多dat block 。在這種策略中, log blocks被分紅兩個區域。每一個區域都包含一個專門給順序更新的block,由於順序寫若是落到不一樣block會致使merge 操做效率低下,因此把落在同一個邏輯block 的page 順序更新都映射到同一個block。此外,每一個區域還包括對隨機寫友好的log block ,這些block 能夠在隨機更新的時候被最大程度地並行使用,同時最小化了merge 開銷。下面這個圖很直觀地說明了這個過程:
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 的方法。
爲順序寫分配更多的log-block;
log-block 和data-block K路組相連的映射方式,來減小FFTL merge操做的開銷。
主要的思路以下:
傳統的page-level mapping 因爲使用數量巨大的mapping table entry 佔用不少內存,一般不是一個最好的選擇。業界提出了幾種方法。
主要思路以下:
示例圖以下:
###
主要思路是利用順序IO的特性來減小mapping table 的大小。對於順序IO,不須要加載對mapping table 的多個不一樣的引用,只須要加載一個引用以及表示還有多少順序訪問的數量就夠了。
一種充分利用了程序時間和空間局本性的 FTL。
使用了cache來存取部分mapping table
WAFTL根據IO pattern 來存放數據。在這種FTL實現裏:
managed page-wise called Page Mapped Blocks (PMB), 用來存放:
managed block-wise called Block Mapped Blocks (BMB)
相似上面的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 區域。