闪存阵列的垃圾回收及“写断崖”

存储 存储软件
随着成本降低和技术进步,闪存越来越多的被企业级数据中心作为存储介质使用。相比传统的磁盘介质,闪存的优势显而易见:速度快,耗电低,省空间。特别在速度方面,闪存具有压倒性的优势。

随着成本降低和技术进步,闪存越来越多的被企业级数据中心作为存储介质使用。相比传统的磁盘介质,闪存的优势显而易见:速度快,耗电低,省空间。特别在速度方面,闪存具有压倒性的优势。

比方说,客户原来采用某款高端磁盘阵列的时候,处理某个业务,需要花费10个小时。后来替换为闪存阵列,同样处理该业务,只需要2个小时就可以完成。闪存带来的性能优势非常的明显。

但客户在使用用闪存阵列时发现:刚开始处理业务只用2个小时,可是运行了一段时间之后,忽然有一天,客户发现处理业务用了2小时30分钟。于是,问题来了,客户一方面觉得2小时30分钟比过去的10小时还是快多了,一方面也会想,为啥比起2小时,现在处理作业的时间慢了25%?

[[228702]]

由此,我们来了解一下,闪存中的“写断崖(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块钱平稳下来。那么整体来看,收益还是很好的。

所以在对闪存阵列选型时,一定要搞清楚闪存阵列厂商是否对该问题进行过优化,并***让厂商给出一些有说服力的数据或者测试报告。

 

责任编辑:武晓燕 来源: 浪潮解决方案
相关推荐

2018-03-13 09:09:07

闪存垃圾回收

2018-08-01 11:16:18

闪存阵列数据中心

2017-09-21 08:31:45

闪存阵列方式

2022-03-21 11:33:11

JVM垃圾回收器垃圾回收算法

2017-08-21 15:34:18

闪存阵列厂商存储

2021-01-04 10:08:07

垃圾回收Java虚拟机

2022-01-20 10:34:49

JVM垃圾回收算法

2017-08-04 10:53:30

回收算法JVM垃圾回收器

2021-03-03 08:13:57

模式垃圾回收

2020-07-09 08:26:42

Kubernetes容器开发

2018-05-15 09:03:36

2017-06-30 13:26:56

华为

2021-11-05 15:23:20

JVM回收算法

2022-06-22 09:54:45

JVM垃圾回收Java

2009-07-06 17:34:22

Java垃圾回收

2009-12-30 10:14:29

JVM垃圾回收

2018-05-11 09:25:46

全闪存阵列实践

2017-12-11 17:19:10

闪存CIO硬件

2023-12-19 21:52:51

Go垃圾回收开发

2009-06-25 17:48:24

Java垃圾回收
点赞
收藏

51CTO技术栈公众号