你好,游客 登录
背景:
阅读新闻

悬崖边的探讨——聊一聊闪存的垃圾回收

[日期:2018-03-13] 来源:老鸟论IT  作者: [字体: ]

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

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

  以上,并不是本文讨论的重点。

  本文的重点是,客户刚刚采用闪存阵列的时候,处理作业只用1个小时,可是运行了一段时间之后,忽然有一天,客户发现处理作业用了1小时25分钟。于是,问题来了,客户一方面觉得1小时20分钟比6小时还是快多了,一方面也会想,为啥比起1小时,我现在处理作业的时间慢了4分之1?

  由此,我们来了解一下,闪存中的“写悬崖(Write-Cliff)”现象。

  什么是垃圾回收?

  闪存是电子类介质,它处理数据的写入和传统的磁类介质(磁盘或者磁带)不同。在使用磁盘时,如果我们有新数据写入某区块,而该区块还存有旧数据,那只需要简单的进行覆盖即可。而闪存不同,新数据写入的区块,必须是空白区块,如果该区块存有旧数据,那么必须先对旧数据进行“擦除”(Erase)。是的,当数据存储的越来越多,理论上较多当写入的数据总量达到闪存提供的所有容量之后,再次写入更新时,就必然会产生“擦除”。

  相比于常规的读取和写入操作,擦除有2个特点。

  第一,擦除的速度比读写要慢。

  第二,擦除的处理单位要比读写大。

  目前业界的闪存,基本上,读操作的处理单位不大于4KB,写操作的处理单位不小于4KB,而擦除的处理单位则是不小于1MB。这意味着,如果要写入4KB的数据,到某个已存有4KB旧数据的区块,那我首先需要擦除其周边1MB的区块空间。

  这相当于您买了一套二手房三居室,规定要求说不能直接住,必须先还原成毛坯房再重新装修,而且要求您必须先把整个小区250个住户的房子全部恢复成毛坯房,然后才能重新装修自己家。可是其余249个邻居住的好好的,他们家里的东西怎么办,答案只有一个,就是请他们全部把家搬走,搬到其他小区空着的房子里去。(好吧,强制拆迁啦!!)当然,搬完之后有个好处,就是未来再有249个新住户进来,他们可以就在毛坯房的基础之上直接进行装修了(1MB一次性全部擦除)。

  以上过程,我们称之为闪存擦除效应带来的“垃圾回收”。为了更清晰的描述这个过程,借(Chao) 用(Xi) 某闪存厂商的图片,来更为清晰的解释一下。

  简便起见,如下图所示,假设某闪存设备一共提供了16个可写的小块,一次擦除必须以4个小块为单位。

  首先,我们写入了一个“MyFile.doc”文件,占用了6个小块,由于现在的16个块都是“干净”的空白状态,所以直接写入即可。如下图。

  然后,我们更新了“MyFile.doc”文件。注意,在这里,作为用户,我们认为自己是在原来的位置上对文件数据进行了更新。但是闪存为了更快的完成处理,会物理上将新数据写入另外的“干净”区块,并将原有旧数据所在区块标记为“失效”状态。如下图(灰色代表“失效,未擦除”数据块,蓝色代表“已占用”数据块,白色代表“干净,可写入”数据块)。

  (同时为了解决应用程序地址和实际物理存储地址的对应问题,闪存加入了“Flash Translation Layer”,用来实现上述两个地址的映射。)

  接下来,我们又需要写入一个新文件“AnotherFile.doc”,同样占用6个小块,但是现在上图中只剩下4个空白的“干净”小块了。因此,我们需要擦除左上角“失效”的4个小块,擦完之后如下图所示。

  接下来,新的数据就可以被写入到左上和右下总共的6个“干净”小块了。

  现在,我们写入较后一个文件,需占用3个小块。可以从上图看到,空白“干净”小块只剩2个了。另外还有2个“失效”小块,但是由于与有效数据同处一个擦除区域,无法直接擦除。因此,我们就需要进行数据的移动,如下图所示,从而腾出一个整体的空间,使得擦除可以进行。这一步,就是之前讲的邻居搬家。

  擦除完之后,我们就可以写入占用了3个小块的新文件了!

  闪存“垃圾回收”带来的“写悬崖”和“写放大”

  回到文章一开始客户遇到的性能下降25%的问题,在我们了解完闪存垃圾回收的过程之后,就很容易理解了。一台40TB容量的闪存运到客户现场,起始都是“干净”的空白小块,写入速度很快。但随着数据的不断更新,或早或晚必然会出现区块间数据搬运,数据擦除等后台垃圾回收的相关操作,从而提供“干净”的小块给后续的写入操作。这些操作和前端应用程序并行,导致了性能的下降,我们称之为“写悬崖(Write-Cliff)”。

  “写悬崖”仅仅是垃圾回收带来的问题之一。垃圾回收还带来的另外一个问题,叫做“写放大”。我们都知道闪存的每个Cell(颗粒)都是有写入次数的寿命限制的。垃圾回收导致了额外的Cell写入,加速了Cell寿命消耗。我们称之为“写放大(Write-Amplification)”。

  如何处理“写悬崖”

  写悬崖和写放大都是闪存介质与生俱来的特性,无论是SSD固态硬盘,还是目前的全闪存阵列厂商,都无法避免这两个问题。

  闪存厂商一般会通过介质材料,算法以及架构的优化等手段,来将这两种影响控制在一定的范围内。同时,对该问题处理的效果,也是衡量闪存阵列能力的因素之一。比如目前业界市场占用率很高的某闪存阵列厂商,宣称通过以下手段来优化写悬崖的问题:

  首先,采用“超供给”方式,通过提供更多的颗粒数量(比如用户可见容量40TB,而实际物理容量超过67TB),用于减缓整体闪存寿命的磨损,并实现更为灵活的预防性垃圾回收。

  同时,采用了“带外”的垃圾回收处理机制,也就是为垃圾回收配置了专门的处理引擎,从而不占用处理前端应用数据IO的硬件资源。

  此外还有均衡磨损算法,监测机制等手段,来优化缓解这两个问题。

  消除误区,“写悬崖”并不可怕

  较后,需要说明的是,写悬崖并不可怕。

  即使写悬崖带了的性能的降低,但速度降下来之后,处理得当的闪存阵列,其性能还是要远远高于传统磁盘阵列。好比您以5块钱一股的价格买了一只股票,较好的时候股票价格飙升到了30块钱一股,但后来降到了25块钱一股,并在25块钱平稳下来。那么整体来看,收益还是很好的。

  以下是某厂商公布其全闪存阵列“写悬崖”测试的测试结果,我们可以看到,“写悬崖”发生后,该阵列依然运行在一个很高的吞吐量水平上。

  当然,在上面的图中我们也看到了另外一个厂商的闪存产品,出现了严重的写悬崖问题。所以在对闪存阵列选型时,一定要搞清楚闪存阵列厂商是否对该问题进行过优化,并较好让厂商给出一些有说服力的数据或者测试报告。

收藏 推荐 打印 | 录入:Cstor | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
热门评论