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的方式。