随着成本降低和技术进步,闪存越来越多的被企业级数据中心作为存储介质使用。相比传统的磁盘介质,闪存的优势显而易见:速度快,耗电低,省空间。特别在速度方面,闪存具有压倒性的优势。
比方说,客户原来采用某款高端磁盘阵列的时候,处理某个业务,需要花费10个小时。后来替换为闪存阵列,同样处理该业务,只需要2个小时就可以完成。闪存带来的性能优势非常的明显。
但客户在使用用闪存阵列时发现:刚开始处理业务只用2个小时,可是运行了一段时间之后,忽然有一天,客户发现处理业务用了2小时30分钟。于是,问题来了,客户一方面觉得2小时30分钟比过去的10小时还是快多了,一方面也会想,为啥比起2小时,现在处理作业的时间慢了25%?
由此,我们来了解一下,闪存中的“写断崖(Write-Cliff)”现象。
什么是垃圾回收?
闪存是电子类介质,其处理数据的写入方式和传统的磁类介质(磁盘或者磁带)的覆盖写不同:新数据写入的区块,必须是空白区块,如果该区块存有旧数据,那么必须先对旧数据进行“擦除”(Erase)。尤其是当写入的数据总量达到闪存提供的所有容量之后,再次写入更新时,就必然会产生“擦除”。
相比于常规的读取和写入操作,擦除有2个特点。
***,擦除的速度比读写要慢。擦除时间可能是写入时间的10倍以上,基本达到ms级别;
第二,擦除的处理单位要比读写大:读写的处理单元是page(一般4KB大小,或者更大),擦除的单元是block(多个page组成,一般不少于512KB)。
如此,极端情况下,要写入4KB的数据到某个已存有4KB旧数据的区块,有可能首先先擦除其周边512KB的区块空间。
这种将Block中的有效Page合并到一个新的Block中,并将旧的Block进行擦除,留出更多的空闲Block的机制就叫做垃圾回收(Garbage Collection)。垃圾回收就相当于固态硬盘的碎片整理,目前基本已是SSD的标配机制,在全闪存阵列设计优化中也有涉及。
闪存“垃圾回收”带来的“写断崖”和“写放大”
回到文章一开始客户遇到的性能下降25%的问题,在了解完闪存垃圾回收的过程之后,就很容易理解了。一台40TB可用容量的闪存阵列应用到客户现场,起始都是“干净”的空白小块,写入速度很快。但随着数据的不断更新,必然会出现对应的数据搬运,数据擦除等后台垃圾回收的相关操作,从而提供“干净”的小块给后续的写入操作。若这些操作若和前端应用程序并行,将可能导致了性能的下降,我们称之为“写断崖(Write-Cliff)”。
“写断崖”仅仅是垃圾回收带来的问题之一。垃圾回收还带来的另外一个问题,叫做“写放大”:闪存的每个Cell(颗粒)都是有写入次数的寿命限制的。垃圾回收导致了额外的Cell写入,加速了Cell寿命消耗。我们称之为“写放大(Write-Amplification)”。
如何处理“写断崖”和“写放大”
写断崖和写放大都是闪存介质与生俱来的特性,无论是SSD固态硬盘,还是目前的全闪存阵列厂商,都无法避免这两个问题。
闪存阵列厂商一般会通过介质材料,算法以及架构的优化等手段,来将这两种影响控制在一定的范围内。比如某厂商,通过以下手段来优化写断崖的问题:
首先,采用“超供给”( Over-Provisioning)方式,通过提供更多的颗粒数量(比如用户可见容量40TB,而实际物理容量超过67TB),用于减缓整体闪存寿命的磨损,并实现更为灵活的预防性垃圾回收。
同时,采用了灵活的垃圾回收处理机制,配置闲时垃圾回收引擎,从而不占用处理前端应用数据IO的硬件资源。
***,通过全局FTL和优化的上层写入机制,将随机IO整理顺序化,减少底层实际读写次数。
此外,还有均衡磨损算法,监测机制等手段,来优化缓解这两个问题。
总之,对该问题处理的效果,也是衡量闪存阵列能力的因素之一。
消除误区,“写断崖”并不可怕
***,需要说明的是,写断崖并不可怕。
即使写断崖带了的性能的降低,但速度降下来之后,若闪存阵列处理得当,其性能还是要远远高于传统磁盘阵列。好比您以100块钱的价格买了一种纪念币,***的时候纪念币价格飙升到了300块钱,但后来降到了280块钱,并在280块钱平稳下来。那么整体来看,收益还是很好的。
所以在对闪存阵列选型时,一定要搞清楚闪存阵列厂商是否对该问题进行过优化,并***让厂商给出一些有说服力的数据或者测试报告。