• 沒有找到結果。

Garbage Collection Throttle

3 CHANNEL MANAGEMENT

3.4 Garbage Collection Throttle

Overprovisioning (log space)的大小會影響 GC 的負擔。如果 Overprovisioning 的空間小,則在快閃記憶體中的無效資料就少,GC 的對象就容易含有更多有效 的資料,也就是要搬移更多的資料,因而使負擔增加。

19

在邏輯位址可用空間與 Overprovisioning 空間固定的情況下,當通道的數量 增加時,Overprovisioning 空間平分到每一個通道中的量就會減少,使得每一個 通道中的 log buffer 的深度變淺了,造成 GC 時的 associativity(associativity 是指 GC 時關聯到的 data block 數量,也就是需要合併的 data block 數量)變大,使得 GC 的負擔變大。圖表 15 是在小資料的隨機寫入下記錄每次 GC 時所執行的合併 data block 數量,使用的設定為 4k page size, 512k block size, 10% overprovision。圖 表 15 (a)(b)分別為 1 個通道與 8 個通道的結果。可以看到通道在 8 個通道時一開 始的峰值比較大,也需要比較多次的週期才能讓這些峰值漸趨平緩。這些 GC 合 併次數的峰值,可能會超過系統等待時間,導致一些不可預期的後果。

(a) 1 channel (b) 8 channel

圖表 15: Large variation of GC cost

在圖表 15 中可以看到一開始 GC 的 associativity 非常高,這是因為資料是先 寫入 log 區域,在 log 區域寫滿時才觸發第一次 GC,此時幾乎所有的 page 都是 有效的資料(沒有更早的 GC 可以把資料合併到 data 區域),又因為是小資料隨 機寫入的關係,log block 中的每一個 request 也幾乎都屬於不同的 data block。而 隨著一次又一次的 GC,因為前面的 GC 會帶走後面的資料,所以慢慢的 GC 所需 要的合併次數會越來越少。

在圖表 15 中也可以發現的峰值會成週期性的出現,這是因為在第一次 GC 一直到所有的 data block 都合併過的這段時間,原本在 log buffer 中的資料會大 量被合併到 data 區域中,但是新寫入的資料有可能是屬於已經合併過的 data block 而不會被帶走,這些含有新資料的 log block 就會讓 GC 需要合併很多 data block,成為另一個 GC 合併次數的峰值。而這個峰值會比之前的小,因為這個 log block 中的部分資料已經被先前的 GC 合併到 data 區域中。以此類推,圖中的峰 值會漸趨平緩。

由於合併 data block 的時間是固定的,所以可以限制合併的次數來達到管制

20

最長的 GC 時間。GC Throttle 是用來控管每次 GC 所執行合併動作的次數,在 GC 的時候,去限制回收 log block 所需要將資料合併到 data block 的次數,而剩下沒 有合併的資料就搬移到新的 log block 裡面,如此便可以使裝置的回應時間受到 控管,避免 Time out 的問題。如圖表 16,GC 需要合併的資料是屬於三個 data block,所以原本是需要合併三個 data block。在加上 GC Throttle 限制為兩次合併 之後,第三個需要被合併的有效 page 就不做合併動作,直接搬移到後面新的 log block 中。而這邊需要付出的成本就是搬移的動作,會加速 log buffer 空間的消耗,

使 GC 的頻率增加。

Log Area

GC victim New data

FIFO

Data Area

Invalid data

Valid data

圖表 16: Garbage collection throttle

如圖表 17 為 GC 前後的記憶體狀態圖。在合併前,很清楚的看到若要回收 log block 1A,需要合併 page 423、page 405 及 page 431,也就是需要合併 data block 105、data block 101 及 data block 107。若是系統限制只能做 2 次合併的操作,那 在合併完 data block 105 及 data block 107 之後,剩下的 page 431 就被搬到最新的 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 Before Merge Data block 107

Page 433 Page 435 Page 437 Page 439 Data block 109

GC victim

Log block 1X

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 After Merge

Page 425 Page 427 Page 429 Page 431 Data block 107

Page 433 Page 435 Page 437 Page 439 Data block 109

Page 431 Log block 1X

圖表 17: Example: Garbage collection throttle

21

GC Throttle 可以用來限制 GC 時所需要合併的 data block 數量而達到限制 worst case response 的效果。但是它的缺點是必須要剩下的資料搬移到新的空 間,使得回收的可用空間會減少,並會增加觸發 GC 的機會。

相關文件