闪存——垃圾回收
一、概念
在了解闪存的垃圾回收之前,我们先了解以下磁类介质的读写问题。磁类介质(磁带或磁盘)在写入新数据时,无论该区块是否有旧数据(旧数据为不再需要的数据),直接进行覆盖即可。但是闪存和磁类介质不同,闪存是电子类介质,在写入新数据时,区块必须是空白的。所以如果要写入的区块存在旧数据,那么必须先对旧数据进行擦除。所以我们可以预见,当写入的数据达到闪存容量后,一定会发生擦除行为。擦除行为,也就被称为“垃圾回收”
二、特征
擦除主要有以下两个特征:
- 擦除的速度比读写慢。
- 擦除的处理单位比读写大。
问题1容易理解,问题2是指,目前闪存读操作处理单位不大于4kb,写单位不小于4kb,但是擦除的处理单位不小于1mb。举个例子就像一块250平米的草坪只有一平米长了些杂草,但是必须要对整个草坪进行修剪,这必然要导致资源的浪费。
三、问题
1.写悬崖:随着数据不断增加,必然会出现区块间数据搬运、数据擦除等垃圾回收的相关操作,这些操作占用了一部分本该属于应用程序的性能。因为这些导致的性能下降,即写悬崖。
2.写放大:垃圾回收虽然能够通过搬运数据等方式为工作提供更好的性能,但是闪存的块区写入次数是有限的。垃圾回收就会导致额外写入操作,从而降低了闪存的使用寿命,此为写放大。
四、解决
写悬崖和写放大是两个无法避免的问题。厂商一般通过1.强化介质材料2.优化算法3.优化架构等手段来减小两者的影响。另外,也可以通过“超供给”方式(提供更多存储颗粒)、带外垃圾回收处理机制(有专门的处理引擎来处理)、磨损均衡以及监测机制等等手段实现优化。
但是要明确的是,即使写悬崖导致了闪存的性能下降,但是其性能还是远远高于传统的传统磁盘阵列的。