垃圾回收,就是把某個閃存塊上的有效數據(下圖中字母方塊)讀出來,重寫,然后把該閃存塊擦除,就得到新的可用閃存塊了。
由于垃圾回收(GC)的存在,就有一個問題,用戶要寫入一定的數據,SSD為了騰出空間寫這些數據,需要額外的做一些數據的搬移,也就是額外的寫,最后往往導致SSD往閃存中寫入的數據量比實際用戶寫入SSD的數據量多。因此,SSD中有個重要參數,就是寫放大:
垃圾回收可以簡單地分為三步:
前臺垃圾回收(Foreground GC):當用戶寫入數據時,如果可用的閃存塊小于一定閾值,這時就需要做垃圾回收,以騰出空間給用戶寫。這是被動方式,它是由于SSD沒有多少可用的閃存塊時,才去做的GC。
后臺垃圾回收(Background GC),它是在SSD空閑(Idle)的時候,SSD主動去做的GC,這樣在用戶寫入的時候就有充裕的可用閃存塊,從而改善用戶寫入性能。