首页 首页 云计算 查看内容

大数据小视角5:探究SSD写放大的成因与解决思路

木马童年 2019-5-27 15:25 236 0

笔者目前开发运维的存储系统的服务器都跑在SSD之上,目前单机服务器最大的SSD容量有4T之多。(公司好有钱,以前在实验室都只有机械硬盘用的~~)但SSD本身的特性与机械硬盘差距较大,虽然说在性能上有诸多优势,但是 ...

笔者目前开发运维的存储系统的服务器都跑在SSD之上,目前单机服务器最大的SSD容量有4T之多。(公司好有钱,以前在实验室都只有机械硬盘用的~~)但SSD本身的特性与机械硬盘差距较大,虽然说在性能上有诸多优势,但是如果使用的方式方法不对,反而会事倍功半。所以笔者花时间调研了一下固态硬盘的结构与特性,并且总结了一些避免SSD写放大性能下降的法则,希望对大家有所帮助~~

###1.SSD的写放大

首先我们来看看什么是写放大,写放大(Write amplification)是2008年,由英特尔和SiliconSystems在论文之中首次提出:它表现为在SSD上实际写入的数据远远大于用户写入数据。

为什么会产生这样的现象呢,我们要回归到固态硬盘原本的特性。首先固态硬盘与传统的机械硬盘不同的点在于它不能够覆盖写。所以对于已经存在数据SSD来说,一次数据的写入分为2个动作:

  • 1、擦除SSD上已有的数据。
  • 2、写入新的数据。

写入放大的问题就出了这个部分,因为SSD每次写入的最小单位为Page,每个Page是4KB大小,而每次擦除的大小单位为Block,Block通常由64或128个Page组成。也就是说,**正是由于SSD写入与擦除的单位大小不匹配,导致了写入放大。如果仅仅是写入单一Page的数据,而单个Block之中没有了空余的Page,则需要擦除一个Block的数据,之后再写入一个Block的数据。所以说,本身只需要4KB的写入,“放大”**了64倍甚至是128倍!由于SSD的寿命取决于擦除次数,所以写入放大会大大影响到SSD的使用寿命大数据小视角5:探究SSD写放大的成因与解决思路

OK,了解了写入放大的现象之后,我们接下来怎么样会导致写入放大的现象呢?

  • 写入量

这点应该很好理解,由上面的阐述可以看到,如果每次对SSD的写入都是很小的量,就会产生典型的写入放大。

  • 剩余容量

通常我们使用的SSD都存在预留空间(OP)来用于给SSD的主控芯片来进行一些优化操作。其中预留空间最为核心的两项工作就是垃圾回收与损耗均衡,在这里笔者简要介绍一下垃圾回收和损耗均衡。

垃圾回收:

SSD中主流的垃圾回收算法与Java之中的标记清除的垃圾回收算法类似:

大数据小视角5:探究SSD写放大的成因与解决思路

如上图所示,SSD首先在Block X之中写入A-D的Page页,之后继续写入到H,并且更新了A’-D’,所以原先的A-D的page页成为了需要回收的垃圾。所以主控芯片会将可用数据移动到旁边的有空闲的Block Y,同时完整的擦除Block X。当剩余容量越小,垃圾回收越频发,则SSD的写入放大就越为严重。就是为什么许多手机在刚刚买来之后丝滑如顺,但是之后就越用越卡,这是因为容量越来越小了,SSD需要背锅!!(这也是笔者的64G的小米5剩余容量只有4个G了,日常使用卡如狗的部分原因~~)需要频繁进行垃圾回收的场景会导致写入放大的问题更为严重。

损耗均衡:

我们知道,SSD的使用寿命等同于Block的擦写次数,目前主流使用的MLC颗粒的编程/擦写次数一般在3000 ~ 5000次左右。如果反复地编程和擦写某个Block,该Block则会先于其他Blcok损坏,导致坏块大量出现。正是因为这样的原因,SSD的主控芯片会尽可能的让每个Block的擦写次数均匀。所以损耗均衡的操作需要移动并没有新数据写入的Block,这样同样也会导致写放大的上升。

###2.写放大问题的一些解决思路

了解了SSD的写放大的成因之后,我们可以『对症下药』的尝试给出一些方案来减小写放大问题来对我们线上服务的影响。

  • 批量写

    这几乎是解决磁盘io问题的通用解决方案,同样适合于传统的机械硬盘与SSD。尽量在代码逻辑之中减少随机写的次数,来避免由少量写操作引发的写放大问题,同时可以考虑通过块对齐的方式来进一步减少写入产生的写放大问题。(当然这里所谓块对齐的思路在是与程序运行环境紧耦合的,程序的可移植性会大打折扣)

  • 预留空间,容量告警

    这也是我们运维线上机器常用的思路,对于SSD的使用量要有一个阀值,超过我们的预设容量时,线上的程序需要给运维和开发人员告警。

  • 写压缩

    写压缩是依赖SSD的主控芯片的,部分SSD主控芯片支持写压缩。也就说接受到操作系统发送要写入20m数据,主控芯片可以通过一些流压缩或块压缩的算法压缩数据,在读取数据时,再重新进行解压。这种方式强依赖硬件,并且新的瓶颈可能会是主控芯片的压缩,解压的速度。

  • TRIM命令

    TRIM是操作系统层级的命令。**操作系统利用TRIM命令来标记SSD上某个Page的数据可以回收。**一旦某个Page被SSD标记为可以回收,在SSD空闲的时候SSD的主控芯片会将这些被标记的Page数据收集到同一个Block,然后共同擦除。这样每次需要写数据时,就在已经有足够空闲的Page可以写入新的数据。

上述几个思路都是在实践中可以采取的措施,其实TRIM命令需要通过Linux设置开启,这里笔者在这里介绍一下如何在Linux下开启TRIM命令:

  1. 确认Linux的内核是否大于 2.6.28,笔者这里是4.9.0的内核。

    大数据小视角5:探究SSD写放大的成因与解决思路

2.调用hdparm -I /dev/sda1 命令确认SSD设备是否支持TRIM。

大数据小视角5:探究SSD写放大的成因与解决思路

3.修改/etc/fstab文件,在挂载选项之中添加discard,重启之后就开启了TRIM

大数据小视角5:探究SSD写放大的成因与解决思路

###3.小结

到此为止,笔者聊了聊SSD写放大的成因,并且针对SSD写放大的成因,提出了一些解决的思路和方法,希望大家能有所收获,在生产环境之中能够更好的『调教好』SSD~~~

在不久的将来,多智时代一定会彻底走入我们的生活,有兴趣入行未来前沿产业的朋友,可以收藏多智时代,及时获取人工智能、大数据、云计算和物联网的前沿资讯和基础知识,让我们一起携手,引领人工智能的未来!

存储系统 英特尔 芯片 解决方案 操作系统 数据收集
0
为您推荐
人算不如天算,数据驱动的云计算远超天算啦!

人算不如天算,数据驱动的云计算远超天算啦

在今天的世界, 一切业务数据化,一切数据业务化,只有这样才能迎接这个时代。所以我希…...

业务不到两年增速85%,是哪家公司这么厉害?

业务不到两年增速85%,是哪家公司这么厉害?

核心提示:自从2015年9月的OracleOpenWorld大会上推出全线的SaaS和PaaS产品以来,甲骨…...

打开企业云计算之门的利剑,不容错过?

打开企业云计算之门的利剑,不容错过?

在现实中,很多企事业单位的IT基础设施就处于此层次级别,即:只是采用了虚拟化技术去…...

云计算炙手可热,究竟是谁在背后?

云计算炙手可热,究竟是谁在背后?

核心提示:前不久,万达网络科技集团与美国IBM公司达成合作,借助IBM的云计算技术,进…...

云计算对数据进行智能分析,云计算核心技术有哪些?

云计算对数据进行智能分析,云计算核心技术

随着信息技术不断进步,闪存、磁盘、数据中心、DNA等各种新的存储技术不断出现。即便…...

“云”上存储日渐成熟, 那么最关键的是什么?

“云”上存储日渐成熟, 那么最关键的是什

展望未来,世界并不只是由公有或私有化技术组成,还有许多两者的混合体。因此势必会有…...

云计算开源呈现爆发式增长,如何使用云计算开源技术成为产业链关注的热点?

云计算开源呈现爆发式增长,如何使用云计算

近几年来,在云计算领域,开源技术呈现爆发式的增长,借用云计算领域的主流看法,这个…...

云计算提供了基础平台,云计算产业进入2.0

云计算提供了基础平台,云计算产业进入2.0

云计算引发了软件开发部署模式的创新,成为承载各类应用的关键基础设施,并为大数据、…...

私有云的建设是一个需要长期迭代的过程,我们都还在路上!

私有云的建设是一个需要长期迭代的过程,我

伴随着IT新技术的发展,像虚拟化、云计算和大数据对大家来说已经不再陌生了。在企业里…...

大家都要向云计算转型,为什么?

大家都要向云计算转型,为什么?

我们曾经开玩笑说硬件也要向云计算转型,软件也要向云计算转型,系统集成商也要向云计…...