天天看點

詳解SSD之垃圾回收GC

當在作業系統(例如 Windows)中删除檔案時,作業系統隻是在其内部檔案表中做标記表示該檔案已删除。由于NAND 閃存裝置不能覆寫現有資料,是以在固态硬碟SSD上,目前無效的資料仍然保留在硬碟上。

這樣的話就會産生大量的失效資料,也稱為資料垃圾。為了提升SSD的利用效率,這時候就該“垃圾回收”(Garbage Collection, 下文全部簡稱GC)出手了。

那什麼是GC呢?别着急,聽在下細細道來~~~

GC過程簡單來講就是:

固态硬碟控制器會先複制所有有效資料(仍在使用中的資料)并将其寫入不同資料區的空白頁、擦除目前資料區中的所有資料單元,然後開始将新資料寫入剛剛擦除過的資料區。

冬天到了,我舉個栗子(如下圖):

詳解SSD之垃圾回收GC

1. 假設SSD中有兩個空的(erased)的Block X和Block Y, 每個Block有12個Pages;

2. 首先在Block X中寫入4個Pages(A, B, C, D);

3. 接着再向Block X中寫入新的4個pages(E, F, G, H), 同時寫入PageA-D的更新資料(A', B', C', D'), 這是PageA-D變為失效資料(invalid);

4. 為了向PageA-D的位置寫入資料,需要将E, F, G, H, A', B', C', D' 8個pages先搬到Block Y中, 之後再把Block X erase掉,這個過程就為GC。

在更新的作業系統中,例如Windows 7/Windows Server 2008 R2/Linux 2.6.33/FreeBSD 8.2/Open Solaris/Mac OS X Lion,它們都加入對Trim指令的支援(關于Trim, 詳見本公衆号曆史文章“ SSD為什麼需要Trim?”)。即作業系統通知固态硬碟特定檔案已删除,這樣固态硬碟能夠更好地管理 GC 過程以便恢複之前的空間,并防止儲存和移動所有無效資料。

通過上面的介紹,想必聰明的你應該就知道GC是怎麼回事咯。

不過,由于GC的過程增加了資料的讀寫過程,勢必會對SSD的performance的産生一定的影響,是以GC發生的條件與觸發點很關鍵。

GC觸發條件大緻有3點:

1. Spare Block太少,

2. Wear leveling,

3. 處理ECC錯誤Block,

GC觸發情形主要有兩種:

1. Idle clean. 在狀态處于Idle時,SSD會啟動Background Clean, 也稱為Idle clean, 這樣可以不影響SSD正常工作時的performance;

2. Write flow clean. write過程中,在将write推入write FIFO之前,判斷是否要做clean.

更多精彩内容,敬請關注微信公衆号: 存儲随筆,Memory-logger.

詳解SSD之垃圾回收GC

繼續閱讀