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

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

1.SSD的写放大

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

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

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

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

典型的一个"写放大"的场景

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

  • 写入量

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

  • 剩余容量

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

垃圾回收

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

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的内核。


    查看系统内核

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


    SSD设备支持TRIM

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

3.小结

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,907评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,546评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,705评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,624评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,940评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,371评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,672评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,396评论 0 195
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,069评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,350评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,876评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,243评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,847评论 3 231
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,004评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,755评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,378评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,266评论 2 259

推荐阅读更多精彩内容

  • 简介 SSD(Solid State Drives),俗称固态硬盘,相对原来主轴旋转,并无机械部分,主要由SS...
    mysia阅读 4,720评论 0 10
  • 我们知道机械硬盘最大的缺点在于,寻道时间比较长,也就是不适合随机小块IO。所以这几年固态存储大行其道,因为它对任何...
    dy2903阅读 821评论 0 3
  • 前言 为了提升我们的软件性能,我们有多种方法,如合理的数据结构、优秀的算法,还有非常重要的一点就是:依据软件所依附...
    两棵橘树阅读 4,453评论 1 15
  • ️因爱而来 为爱而生 爱是世界上最伟大的能量~ 吸引力能量 感召更多梦想合伙人,世界会因我...
    有娜么点儿意思阅读 537评论 0 0
  • 今年共读书37本。 1、 [美] 丹尼尔·卡尼曼 《思考,快与慢》;[英] 理查德·道金斯 《自私的基因》、《地球...
    fanzhh阅读 221评论 0 0