• 沒有找到結果。

三、 HitStat

3.5 Write-Back Policy

比起 Buffer 容量,NFTL 有更大空間的 Log Block 可以運用,這些空間可以看成 延伸的 Buffer 儲存空間,但因為 NAND Flash Memory 的特性只能 outplace-update 資料;而 RAM Buffer 則是可以做 inplace-update 但容量較小。好的 Buffer 管理方法 除了要能吸收 hot data 以及增加寫出資料的連續性之外,還需要能夠與 NFTL 配合,

運用 RAM Buffer 跟 Log Block 互補的特性發揮各自善長的部份。

參考圖 9 為我們從 Buffer 選出 victim Group 之後的流程圖,如果 victim Group 內的資料是滿的話,可以直接寫到 NFTL 做 Switch Merge;如果資料不是滿的,則 我們必需決定是否對 victim Group 做 Padding 的動作。做 Padding 類似 Partial Merge,先把 Group 內資料補滿後再寫到 NFTL 做 Switch Merge 的動作,直接將資 料儲存在 Data Block;不做 Padding 的話該 Group 的資料就會被寫到 Log Block 中,

(a) No Padding (b) Padding

13

圖 9:Interact with NFTL by Padding

而什麼樣的 victim Group 適合做 Padding 呢?由於從 Buffer 寫出的大部份是 cold data,顯然不能參考資料的冷熱程度。因此可以用來決定是否做 Padding 的主 要因素是 victim Group 內所含的資料量多寡,對含資料較多的 victim Group 做 Padding需要額外搬移資料的代價較少;參考圖 10 我們以 Log Block 的角度來看,

範例中的 write stream 前後有兩次關於 Block A 的資料(Ai、Aj)寫入,圖 10(a)在 沒有 Padding 的情況下在 Aj的資料到來之前 Ai就會因為 Log Block 空間不足而被 Merge,Block A 先後需要參與到兩次 Full Merge,因此資料 Ai被寫到 Log Block 是 overhead,因為它佔用 Log Block 空間而且沒有跟 Block A 的其它資料一起 Merge 回 Data Block;圖 10(b)為對某些資料做 Padding 的動作,其中資料 B、Ci i因為有 Padding 所以直接做 Switch Merge 而沒有佔住 Log Block 空間,可以看到在資料 Ai Merge之 前 Aj已經寫到 Log Block 中,Block A 只需要參與到一次 Full Merge 的動作。所以對 含資料較多的 victim Group 做 Padding 除了代價較少外,也可以避免大量資料被寫 到 Log Block 佔住其空間,較適合做 Padding;而含較少資料的 Group 則剛好相反,

把含較少資料的 Group 寫到 Log Block 不會佔住許多空間,Padding 反而因為要讀寫 許多額外的 Pages 導致 overhead 很高,不適合 Padding。

從上面的分析來看,適當的 Padding 可以避免大量資料佔住 Log Block 的空間,

延長需要做 Full Merge 的時間間隔,增加屬於同一個 Block 的資料一起 Merge 的機 會,所以大幅降低了 Merge 的成本。但是過多的 Padding 會產生很多額外讀寫 Page 的 overhead,反之過少的 Padding 也會導致 NFTL 的 Full Merge 成本無法降低,因 此如何找到最佳的 Padding Threshold 才能達到最好的效能顯然是一個問題。由於 write pattern會改變、各個 NFTL 使用的架構及 Log Block 數目也不一樣,只用固定 的 Padding 設定並不是最佳的方式。

SSD

NFTL

Write Buffer (HitStat)

Data Blocks

Log Blocks

Full Merge

Cost-Benefit Analysis

Switch Merge

Full

Partial Merge Padding ?

Logging

Yes No

not Full Victim Group

14

圖 10:Example of (a)Padding (b)No Padding

為了找到最佳的 Padding 設定,我們定義一個 Padding Model,需要關於 NAND Flash Memory的參數 Ce(erase cost)、Cw(write cost)、NBlkPg(Pages per Block)。 沒有把 read cost 放入 Model 中,是因為不管是 SLC[14, 15]或者 MLC[16]的 NAND Flash Memory,讀取代價相對於寫入和抹除的代價來說可以忽略不計,而且有些 NFTL mapping方式在讀取一個 Page 時可能要額外讀取數個 Page 的 Spare Area,帶 進許多無關緊要的參數只會增加 Model 的複雜度。Model 中我們需要有平均的統 計數據 RDB、RLB、ULB,藉由 RLB和 ULB我們可以算出 Log Block 在回收前平均會被寫 入的總資料量,該值除以 BW為 Expected number of write requests(即 Buffer 一共 需要 flush 幾次才可以寫滿這些資料量)。有了這些資訊後我們可以分別計算出等 式(1):Padding and Switch Merge Cost 和等式(2):Logging and Full Merge Cost,讓等 式(1)=(2)我們推導出 BW的等式(3)。在 BAST 的架構下由於每次回收的 Block chain 內的資料都屬於同一個 LBA,所以 RDB=1,代入等式(3)得到 BAST 適用的 BW等式(4);

而在 FAST 架構下則會回收最早被寫滿的那個 Log Block,即 RLB=1、ULB=1,得到 FAST 適用的 BW等式(5)。

Bw為 Expected balanced burst of write pages,該值代表的意義為當 victim Group 含的 Page 資料量剛好等於 Bw時,Model 預期做 Padding and Switch Merge 跟 Logging and Full Merge的代價為相等的。因此當 victim Group 含的 Page 資料量大於 Bw時,

我們的 Model 預期做 Padding 對 NFTL 的代價會最低;相對的如果小於 Bw,Model 預期把資料寫到 Log Block 的代價最小所以不做 Padding。在定義 Padding Model 後,

我們的 Buffer 管理演算法 HitStat 可以藉由算出的 Bw值動態決定 Padding 條件來跟 不同的 NFTL 配合,儘量減少 NFTL 的 overhead 以提昇 SSD 效能。

- average number of Data Blocks to merge - average number of Log Blocks to merge

- average space utilization of Log Blocks - expected balanced burst of write pages

- number of pages

→ Block A involves in 2 Full Merges

Write Streams

→ Block A involves in 1 Full Merge

(a) No Padding

Log Blocks

(b) with Padding

15

Pages written to logblock = Expect number of write requests =

(1) Padding & Switch Merge Cost =

使用 Padding 可以把 Full Merge 轉變為 Switch Merge,但是因為做 Switch Merge 可能會提早回收 Log Block 造成 Log Block Utilization 下降。為了減少這個誤差造成 的影響,我們 ULB、RLB的統計方式除了正常做 Full Merge 的操作外,對於因為 Switch Merge導致 Log Block 被回收的情況,我們統計方式為該 victim Group 在 Padding 前的資料是先寫到 Log Block 後再做 Full Merge 來計算。

相關文件