• 沒有找到結果。

Garbage Collection Planner

3 CHANNEL MANAGEMENT

3.2 Garbage Collection Planner

3.2.1 A Basic Approach: Synchronized Channels

在說明 GC planner 之前,先來瀏覽一下 FTL 如何在同步運作的通道中運行。

不同通道中相同物理位址的 page/block 會合併成為 super page/block,可以簡單 的將單通道的 FTL 演算法套用到多通道上面,如圖表 9 為兩個通道同步運作的 FTL 示意圖,大的虛線矩形為 super block,一個 super data block 由兩個通道各一個 data block 組成,super log block 同理。寫入資料以 out-of-place 更新寫到 super log page 中,GC 時會將有效的 super log page 與 super data page 複製合併到新的 super data block 中。

13

Log Area

GC victim New data

FIFO

Data Area

Full Full

Channel 0 Data Block Channel 1 Data Block

Super Data Block

Invalid data

Valid data

圖表 9: FTL under synchronized channels

同 步 運 作 的 通 道 將 不 同 通 道 中 的 page/block 綁 死 視 為 同 一 個 super page/super block。優點是平行度非常的高,所有的通道都同時執行動做。缺點是 寫入的最小單位隨著通道數量提升,使小的 request 無法隨著通道數量的提升而 提升寫入的效能。

3.2.2 An Extension: Super Data Block over Independent Channels

觀察同步通道的運作方式,在 GC 時平行度相當的高,是因為每一個通道都 同時對同一個 super data block 中屬於不同通道的 data block 執行合併動作,單位 時間內合併的數量多,回收的空間也多。Super data block 其實是由不同通道間邏 輯位址相鄰的 data block 所組成的,其內部的 super data page 也是由不同通道間 邏輯位址相鄰的 data page 所組成的。因此合併 super data block 並不是只有同步 運作通道才可以執行,在獨立通道中也可以合併 super data block。

獨立通道可以解決小資料隨機寫入的問題,使得空間的有效利用率提升。但 是當其中一個通道觸發 GC 時,其他的通道並不會同時觸發 GC 而會閒置。為了 提升獨立通道 GC 的平行度,我們將合併 super data block 的觀念帶進獨立通道 中。也就是說,將同步運作通道中的 super data block 概念留下,只是把 logging 機制換成獨立通道。而造成觸發 GC 不平行的問題就以合併 super data block 來處 理。

讓其他原本空閒的通道來合併與目標 data block 邏輯位址相鄰的 data block,藉以提升 GC 的平行度。

14

如圖表 10 所示,通道 1 的 log 區域已經寫滿因而觸發 GC,block 中有效資料 分別屬於三個 data block,而這三個 data block 又分別屬於三個 super data block,

這三個 super data block 都需要執行合併動作,如此通道 0 及通道 1 皆須要合併 3 個 data block,兩個通道在這段時間都會利用通道將資料從 log 區域搬移到 data 區域,因此提升了 GC 時通道的使用率,降低了通道 1 未來 GC 的負擔。唯一不 平行的地方在於通道在 GC 的最後要對回收的 log block 執行 Erase,此時通道 0 並無法 Erase 而閒置,但是這個 Erase 的時間佔整個 GC 的時間比例極低,影響 甚小。

Invalid data

Valid data

圖表 10: Independent channels with super data block

如圖表 11 為兩個獨立通道在靜態 striping 的資料擺放下某一時間點的記憶體 狀態示意圖,圖上的數字皆為邏輯位址,log block 0A 及 1A 分別為通道 0 及通道 1 最早被使用的 log block。通道 1 觸發 GC 的時候,必須要回收 log block 1A,因 此要將 page 423、page 405 及 page 431 合併回 data 區域,也就是要對 data block 101、data block 105 及 data block 107 執行合併動作。data block 101 所屬的 super data block 還包含 data block 100,data block 105 所屬的 super data block 還包含 data block 104,data block 107 所屬的 super data block 還包含 data block 106。因 此通道 0 也要執行合併 data block 100、data block 104 及 data block 6 的動作。如 此便可以提升通道的利用率,增加 GC 時候單位時間的回收空間。

15

Page 400 Page 402 Page 404 Page 406 Data block 100

Page 408 Page 410 Page 412 Page 414 Data block 102

Page 416 Page 418 Page 420 Page 422 Data block 104

Page 522 Page 410 Page 404 Page 414 Log block 0A Channel 0

Page 401 Page 403 Page 405 Page 407 Data block 101

Page 409 Page 411 Page 413 Page 415 Data block 103

Page 417 Page 419 Page 421 Page 423 Data block 105

Page 423 Page 427 Page 405 Page 431 Log block 1A Channel 1 Data block 106

Page 425 Page 427 Page 429 Page 431 Data block 107

Page 432 Page 434 Page 436 Page 438 Data block 108

Page 433 Page 435 Page 437 Page 439 Data block 109

GC victim

圖表 11: Example: Merge super data block

通道 1 觸發 GC,是由 FTL 演算法挑選出最適合回收的對象(在本論文中是以 FIFO log buffer 挑選出含有最久沒被更新 page 的 block 為對象),因此如圖表 11 合併通道 1 的 data block 101、data block 105 及 data block 107 相當合理。但是通 道 0 中所合併的對象僅僅只是因為與通道 1 所合併的 data block 相鄰而共同成為 super data block,雖然相鄰的邏輯位址具有冷熱資料的空間區域性,但是當通道 數量增加的時候,super data block 也會增大,空間區域性的特性會被稀釋掉,可 能使其他通道所合併的 data block 太早合併。如圖表 11,合併通道 0 中的 data block 104,其中只含有 page 418,而這個 page 418 可能是剛剛才被更新寫入 log 區域的資料,之後還有很大的可能會被更新,如此便被合併回 data 區域,若短

3.2.3 Cycle Stealing with Multiple Channels

在獨立通道中合併 super data block 會有太早合併的情況,要改善這個缺點 就不能強迫合併 super data block,必須要打破 super data block 的限制。在這一 小節會將合併 super data block 的方法改進成為 Cycle Stealing 的方法來管理多通 道在 GC 時的平行運作方式。

16

從上述 3.2.2 合併 super data block 的方法中,我們了解到除了觸發 GC 的通 道必須要完整的執行 GC 活動才能達到回收空間的目的,但是其他通道並不需要 執行完整的 GC 活動,只需要利用閒置的時間跟著做合併動作就可以帶走 log 區 域的資料並降低未來 GC 的負擔。利用閒置的時間跟著做合併動作其實並不需要 合併邏輯位址相鄰的 data block,而是只要合併 data block 就可以有同步 GC 的效 果。

既然合併邏輯位址相鄰的 data block 所組成的 super data block 會使得其他通 道發生太早合併的現象,在這邊我們就不要強迫其他閒置通道合併這些 data block,只讓其他通道主動偷取這段 GC 空閒的時間跟著做合併動作,每一個通道 獨立選擇 data block 來合併。如圖表 12,當通道 1 的 log 區域寫滿而觸發 GC 的 時候,通道 1 以 FIFO 的方式挑選要回收 log block,其中需要合併三個 data block。

此時通道 0 會有合併三個 data block 的時間是空閒的,在此我們讓通道 0 偷取這 段空閒的時間,主動挑選三個 data block 來執行合併動作。

而要如何挑選要跟著合併的 data block,也是很重要的。為了避免太早的合 併,必須要挑選未來最需要被合併的 data block。而這要從未來最有可能被回收 的 log block 中去尋找需要被合併到 data 區域的 page,然後合併這個 page 所屬的 data block,如此便可以合併在最近的未來最有可能被合併的 data block,以避免 太早的合併。在圖表 12 中,通道 0 未來需要回收的對象為 log 區域中最老的 log block,其中所包含的都是最老的 log page(最久沒被更新的 page),因此通道 0 就根據這些最老的 log page 依序挑選出三個不同的 data block 來執行合併動作,

如此就不會有太早合併的問題。

GC victim

FIFO

Log Area Channel 0

Log

Channel 1 Log Future Victim

FIFO

Full New data

New data Invalid data

Valid data

圖表 12: Independent channels with cycle stealing

GC 活動除了一連串的合併動作之外,還要外加一個 Erase log block 的操作才 能達到回收空間的目的,所以對於其他通道來說,也會有一個 Erase 操作的時間

17 431 合併回 data 區域,也就是要對 data block 101、data block 105 及 data block 107 執行合併動作。通道 1 所觸發的 GC 需要合併三個 data block,此時通道 0 就有 合併三個 data block 的時間。從 log block 0A 挑選出兩個合併對象,分別為 page 410 所屬的 data block 100,page 404 所屬的 data block 102,其中 page 410 與 page 414 屬於同一個 data block。接著再從 log block 0B 挑選出 page 434 所屬的 data block Data block 100

Page 408 Page 410 Page 412 Page 414 Data block 102

Page 416 Page 418 Page 420 Page 422 Data block 104

Page 522 Page 410 Page 404 Page 414 Log block 0A Channel 0

Page 401 Page 403 Page 405 Page 407 Data block 101

Page 409 Page 411 Page 413 Page 415 Data block 103

Page 417 Page 419 Page 421 Page 423 Data block 105

Page 423 Page 427 Page 405 Page 431 Log block 1A Channel 1 Data block 106

Page 425 Page 427 Page 429 Page 431 Data block 107

Page 146 Page 434 Page 208 Page 182 Log block 0B Page 432

Page 434 Page 436 Page 438 Data block 108

Page 433 Page 435 Page 437 Page 439 Data block 109

GC victim

圖表 13: Example: Cycle stealing

Cycle stealing 的方法使得 GC 的時候可以更平行的運作,整理來說 FTL mapping 的邏輯跟運作的方法都像是同步運作的通道一樣平行,只是把 log 區域 改成獨立運作,因此具有高度的平行度。但是當不同通道的負載差很多的時候,

別的通道會沒有資料可以平行合併,也是會產生閒置的問題。

相關文件