Enable/Disable Data Cache

Enable/Disable Data Cache

本文說明SSD控制器中Enable data cache和Disable data cache的優缺點,同時分析各種不同的作法與應用範圍。請注意這裡所指的Cache是write data(寫入資料)的Cache,主要是為了暫存資料,再一併寫入NAND flash;而不是為了read hit rate的Cache。

如下圖一所示,SSD控制器的大致架構可分為Front Side、Buffer Side和Back Side。一般來說,Front Side負責與Host (主機)hand shaking(交握),處理一些標準指令。Buffer Side則是負責將讀寫資料暫時儲存在SRAM/DRAM buffer;而Back Side則是處理快閃記憶體的指令,並藉由ECC engine修正資料位元內的錯誤。

目前標準SSD控制器的作法是將主機寫入的資料暫存在Data Buffer裡,當累積到一定的資料量時,firmware會啟動Hardware DMA engine,將這些資料寫入NAND Flash,這樣的作法一般稱為「Data cache mode」,優點如下所述:

1. 湊足一個program page:NAND Flash一次必須program一個page,目前常見的page size大多為16K bytes;而若是一個寫入指令只有4K bytes,則必須在Data Cache裡累積到4x4Kbytes,這時寫入NAND會較有效率。

2. 相同LBA(Logical Block Address,邏輯區塊位址)資料覆寫:當寫入的資料有相同的LBA時,則可直接覆寫,藉此降低SSD WAI (Write Amplification,寫入放大)的不良現象,通常在DRAM Cache上此優點會較為明顯。

但Data cache mode有一個很大的缺點,就是當不正常斷電時,由於尚有許多寫入的資料在Data Cache裡,而Data Cache通常是SRAM或DRAM, 一旦斷電就會造成嚴重的資料損毀;因此在不允許任何資料損毀的應用上,就必須改變作法。

其中一種作法是在SSD上加入大電容(Super CAP),若遇到不正常斷電時,大電容能提供足夠的電力,讓Data Cache裡的資料可以刷新到NAND Flash,但這個做法會使SSD的成本增加。當Cache越大,就需要越多的時間刷新資料,這時也會需要更大的電容。

另外一種作法就是「Non-cache mode」。如上圖所示,資料只是經過Data Cache,然後就立刻寫到NAND Flash,不會儲存在Data Cache;當NAND Flash的寫入程序已經就緒後,控制器才會將「指令就緒」的訊息回覆給主機。這個作法的好處是不需要額外的大電容,所以成本不會增加;同時也不需要改變電路板的設計。但此作法的缺點也很明顯:由於每一個指令都必須等到NAND 寫入資料完成後才能回覆主機,所以會造成效能低落。另一方面,當主機寫入指令小於NAND寫入的最小單位時,不足的部分則必須補dummy pattern,造成SSD的WAI升高,使此SSD能寫入的總資料量變少。

由上述說明可以得知,三種作法都各有優缺點,在一些類工控的應用領域中(例如收銀機),由於主機並沒有正常斷電的流程,因此每次斷電都是屬於不正常斷電,但也要避免Data Lose(資料損毀)的情況。不過此應用領域需要寫入的資料量較少,對於效能與總寫入量的要求也不是很高,因此較適合採用Non-cache mode的作法。