PCEVA,PC绝对领域,探寻真正的电脑知识
开启左侧

让我们深入了解和理性看待SSD上采用的SLC加速模式

[复制链接]
neeyuese 发表于 2015-6-13 10:13 | 显示全部楼层 |阅读模式
点击数:21183|回复数:76
随着闪存工艺的更新,颗粒内部Die的单位容量越来越大,小容量的SSD型号所需要搭配的Die数减少造成了写入速度越来越差。另外从MLC转换到TLC的过程中,出错率也随之提高了几个数量级。这肯定会影响到用户体验和耐久度,怎么办呢?

SLC加速模式就这样诞生了,它被用来解决瞬间爆发力和降低出错率的问题。因为普通家用和商用环境下的数据读写压力并不大,而且大多数情况下对性能没有持续性要求,因此只需要在用户需要速度的时候给予速度,不需要的时候再偷偷后台里恢复速度就行了。

SLC加速模式简而言之就是让MLC或者TLC的闪存模拟成SLC的工作模式进行操作。

当这项技术运用在MLC闪存SSD产品上时,主要目的是为了提高爆发力,它可以让低容量型号的SSD尽可能达到外部接口带宽,例如东芝64GB的THNSNF64GBSS Quark系列19nm MLC SSD写入速度最高可达到440MB/s,这就是依靠了闪存颗粒自带的ABL技术和SSD主控固件里的SLC加速模式两项并用来达成的。


上图是闪迪TLC A19nm 128Gb Die颗粒运行在SLC或者TLC模式下的性能区别。

当这项技术运用在TLC闪存SSD产品上时,主要目的是为了显著提高写入速度的同时降低错误率,因为TLC的闪存对读写电压产生的信号干扰特别敏感,而且TLC的闪存还有不少隐藏限制我以前并没有提到过。举个最简单的例子就是TLC颗粒上3bit数据编程没完成的情况下是不能单独访问其中某个数据的(这是硬性限制,因为这种情况下访问会产生干扰,可能会造成数据直接完蛋),所以这部分数据必须在缓存里留一份用来满足读取请求的需要,这样就平白无故的增加了缓存的开销和突发掉电时的安全隐患。为了尽可能避免这种情况发生,必须从缓存里把随机写入的小数据合并起来,持续滴温柔滴写入下去才是正确的做法。(轻拿轻放才能降低磨损度)另外由于TLC的速度慢,把完整的映射表放在TLC闪存上操作也不是明智的做法,必须放在SLC加速模式的闪存内来提高映射表更新和访问速度,这样才能够加快开关机速度(开机需要加载映射表到内存,关机需要保存更新后的映射表到闪存),加快休眠唤醒速度,在SSD生命周期里尽可能多的更新映射表次数,总而言之言而总之就是尽可能避免把需要频繁更新的数据在TLC闪存里操作就是啦。但是这样也会带来新的问题,那就是长时间的持续写入性能被降低了,因为数据会被先写入SLC,再写入TLC,同样数据可能被写入两次造成了写放大提高,还有就是后台SLC加速模式转TLC的时候也有概率出现数据错误。

SLC加速模式是个统称,它的做法是由SSD主控固件控制闪存颗粒的操作模式,而且各厂牌的产品之间是有区别的。

区别一,SLC加速模式的用户区范围



如图,美光的M600的动态SLC加速模式在空盘情况下占用用户可用容量的1/2,256GB SSD格式化后用户可用容量为238GB附近,1/2的话就是119GB的SLC加速模式范围。这张图里中间那块就是这块SSD的OP空间(跑在MLC模式下),大约是256GB减去238GB等于18GB左右。当OP空间用完后SSD必须进行Folding,也就是后台要进行SLC到MLC模式的转换来释放可用空间,此时的主控资源都被后台的转换消耗掉了,边释放空间边接受新的写入数据,反应出来的速度就跌到100MB/s以下。

拿目前市面上采用SLC加速模式的几个主流产品技术举例。使用MLC闪存的产品中,闪迪nCache和nCache Pro技术SLC加速缓存范围在1GB以内,美光、东芝、OCZ的则基本是用户可用容量的1/2。



如图三星的840Evo 120GB和250GB的SLC加速模式区域一样为3GB,250GB因为写入速度高,因此比120GB的型号更快消耗掉SLC加速区域而造成跌速。

使用TLC闪存的产品中,闪迪的nCache 2.0和三星的TurboWrite技术,都是随着SSD容量的提高而增加了SLC加速模式的范围。(闪迪至尊高速II120GB型号里SLC加速模式范围为5GB,到了960GB型号里则是40GB。三星840Evo850Evo120GB250GB容量SSDTurbowrite3GB,到了1TB容量则提高到了12GB。)
区别二,SLC加速模式是否采用了磨损平衡

上面提到的MLC闪存产品,他们的SLC加速模式范围是动态的并且有全局磨损平衡机制的。固件内部一般会有2P/E计数,一套是SLC模式下的计数,一套是MLC模式下的计数,颗粒错误多的区域拿来做SLC加速模式,颗粒错误少的区域拿来做数据区(MLC),复杂度相对来说显得更高。

上面提到的TLC闪存产品,他们的SLC加速模式范围是静态的并且没有全局磨损平衡机制(TLC用户区域有)。因为TLC的算法本身已经够复杂了,再加上全局磨损平衡的话反而更容易出bug,而且主控硬件资源也不一定允许这样折腾。所以它们的SLC加速模式容量范围就需要根据SSD容量而翻倍。这样可以确保当TLC闪存磨损完之前SLC加速模式区的闪存不会提前磨损完。


这张是美光20nm 128Gb Die颗粒参数图,图中128 Gb MLCM500M550高容量用的闪存颗粒,128Gb MLC+主要是JMF主控在使用。

我们可以看到当MLC+开启SLC缓存加速模式(硬件支持,但需固件激活)后,P/E可以从3000提高到20000,也就是说提高了7倍左右。既然SLC模式比MLCP/E高出7倍的话,那么比SLC模式比TLC高出多少倍呢?

这里举例拿三星840Evo 120GB来计算,内部模拟了3GBSLC(消耗9GBTLC),全盘容量128GBTLC,比例是3 : 128-9),差不多就是40倍的P/E区别。因为840Evo250GB内部也是模拟了3GBSLC3:(256-9)差不多是80倍的区别。假设我现在测试的是三星840Evo 120GBSSD19nm TLCP/E1000的话,那么这部分SLC需要达到40000 P/E才能满足同时挂的需求。

这里讲一个故事,根据某国外评测网站数据,840Evo 120GB在连续通电跑写入的测试下,P/E达到3000以上并且没有出现重映射,然后各大新闻站纷纷转载高P/E840Evo的测试,说再也不担心TLC的耐久度问题了,然而继续测试途中突然无征兆的暴毙了。什么原因造成了SSD暴毙?根据上面的算式,TLC要达到3000 P/E,此时SLC加速模式范围内磨损度至少已经为12P/E,因为SLC加速模式出错率低,01的电位容易判断,而且是一直在被刷新的缓存区,所以只要通着电和高温(持续写入发热量最大)就能最大化闪存P/E表现,你测的其实是SLC加速模式区域的极限耐久度。SLC加速模式区域磨损完了后,由于没有内部磨损平衡,只能暴毙给你看了。那么为什么没有重映射?因为SLC缓存后持续释放到TLC,而TLC又不需要被覆盖,只需要擦除再持续滴写入新数据,就是我前面说的轻拿轻放,降低了出错率自然就不会那么容易出现重映射了。现在知道为什么850Evo120GB250GB的官标保修限制耐久度是一样的都为75TBW了吧,因为他们的SLC缓存加速区的容量是一样的都为3GB,也就是25000 P/E (75000 / 3 = 25000 ),这块区域又是没有磨损平衡的,挂了的话那后面的TLC数据区耐久度再高也就没意义了。

区别三,SLC加速模式的数据模型筛选

前面说了SLC加速模式会增加写放大,是因为写入到SLC加速模式区域的数据可能会再次写入到MLC或者TLC用户数据区造成2次写入。我上面也提到了SLC加速模式区域的P/EMLC或者TLC用户数据区域的几倍至几十倍。理论上来说,持续写入的数据写放大接近1,随机写入的数据写放大则会比较高。如果写入的数据大多为随机写入的数据,这些数据在SLC加速模式区域合并再写入MLC或者TLC用户数据区,虽然意义上的写放大提高到2倍,但实际上却降低了用户数据区的写放大。

闪迪的nCache技术在这个基础上,还能对随机写入和持续写入的数据进行过滤,对于持续写入的数据直接写入到MLC用户数据区上避免了在SLC加速模式区域的磨损。别家的做法例如美光,东芝和OCZSLC加速模式区域范围很大,那么在这个SLC加速模式区域数据还没释放到真正的MLC用户数据区前,任何在这个SLC加速模式区域内被覆盖和Trim指令操作掉的无效数据都可以不用再释放到MLC用户数据区里,这样就利用SLC加速模式区域P/E高的优势间接的降低了对颗粒的磨损度,而且这些SSD都有全局SLC加速模式的磨损平衡,耐久度和利用率理论可得到真正意义上的最大优化。

区别四,SLC加速模式导致后台Folding的时机

所谓鱼和熊掌不可兼得,你是要基准测试例如ASSSDCDM这类爆发力跑分好看还是要稳定态下的跑分好看呢?如果是前者的话,则需要在有足够SLC缓存容量的情况下不做任何后台folding来让主控的资源全部发挥在这类短时间的爆发力测试上。类似代表就是目前所有采用TLC闪存的消费级SSD产品,新的PS3110-S10主控公版固件的产品。如果是后者,那么就要牺牲掉爆发力,主控的资源永远有一部分消耗在后台的folding上,这样的代表就是OCZ的消费级MLC产品,跑分不高但是稳定态表现较好,性能降幅较低。

既然TLC闪存配合SLC加速模式几乎成了必然需要,那么除了本文开始说的SLC加速模式提高写入速度,降低错误率外,它无法解决的问题是什么呢?


TLC闪存实在太烂而造成的数据保存期问题

三星TLC的旧数据掉速问题,温度高低速度变化问题我也已经在之前的帖子里强调过多次了。那么如何保证旧数据掉速在可控范围内呢?不要一掉就掉的连U盘都比不上了。那就需要牺牲容量和性能做数据的XOR,在写入数据的时候同时把校验数据一起写入,这样当数据因为掉电位造成在多次尝试后依然没法读取的情况下就可以依靠之前的冗余数据直接生成正确数据。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
yuanayuan517 发表于 2015-6-13 10:40 | 显示全部楼层
感谢浴大大的科普。
thinkpad 发表于 2015-6-13 10:46 | 显示全部楼层
L85A 是M500 用的,M550低容量128 256 不是用的64Gb L84C吗???

评分

参与人数 1绝对值 +2 收起 理由
neeyuese + 2 感谢纠正。

查看全部评分

neeyuese  楼主| 发表于 2015-6-13 10:51 | 显示全部楼层
thinkpad 发表于 2015-6-13 12:46
L85A 是M500 用的,M550低容量128 256 不是用的64Gb L84C吗???

已经改了,确认L85C是JMF在用。
fisherwei 发表于 2015-6-13 10:59 | 显示全部楼层
TLC提高了存储密度
然后,为了XXXX,要加上异或位,密度又下降了

图个什么~~
dert88 发表于 2015-6-13 11:12 | 显示全部楼层
越明白就越不想用带SLC加速技术的MLC SSD,更别说TLC了。


喜欢用大容量的SSD来保持持续写,不喜欢小容量的SSD用SLC模式爆发写入,和作弊似的,没什么意思,小容量就老老实实低速写入好了,反正小容量也加速淘汰了。。。
thinkpad 发表于 2015-6-13 11:23 | 显示全部楼层
dert88 发表于 2015-6-13 11:12
越明白就越不想用带SLC加速技术的MLC SSD,更别说TLC了。

制程越小的颗粒,出错率增大,同时PE降低。
此时用SLC cache ,把出错率高的MLC 转成SLC 模式,PE也得到保证,还能提高写入速度。
就看全局磨损做的如何,把WA控制好。
木瓜 发表于 2015-6-13 11:31 | 显示全部楼层
TLC低成本的优势被更高的研发成本平衡了,或者说某些TLC不愿意放下身段,除去那些用来历不明的颗粒的山寨厂,SSD界的搅局者回事谁呢
az6338890 发表于 2015-6-13 11:53 | 显示全部楼层
fisherwei 发表于 2015-6-13 10:59
TLC提高了存储密度
然后,为了XXXX,要加上异或位,密度又下降了

降低的密度应该比不上提高的密度
nighttob 发表于 2015-6-13 12:18 | 显示全部楼层
fisherwei 发表于 2015-6-13 10:59
TLC提高了存储密度
然后,为了XXXX,要加上异或位,密度又下降了

容量上去了才有让你花样折腾的机会
容量上不去你怎么折腾都不够用
zhu890103 发表于 2015-6-13 13:35 | 显示全部楼层
其实我进来主要还是关注女浴室的头像与签名!支持了,女神大人!
夏冰萱 发表于 2015-6-13 14:09 | 显示全部楼层
感谢分享,学习了。虽然用不上但涨涨姿势还是好的,跟同事吹吹牛把他们唬唬。
Suser 发表于 2015-6-13 14:24 | 显示全部楼层
好深奥啊~
开始还明白,后面就似懂非懂了
evev 发表于 2015-6-13 14:35 | 显示全部楼层
其实对美光那个dwa的描述并不是很准确吧 无论剩余容量有多少都有加速效果 而不是规定的50%容量 不然怎么显出动态的先进性呢?
至于那个图的曲线应该是高强度下的连续写才会出现 家用很多空闲时间让主控和颗粒喘气的话不会出现这种结果
红色狂想 发表于 2015-6-13 17:08 | 显示全部楼层
屌丝跑分党的福音呀,ORZ的象征
sunbaolai 发表于 2015-6-13 18:52 | 显示全部楼层
好帖子,仔细拜读了两遍,真涨知识。
@neeyuese 我认为应该把文中“然而继续测试途中突然无朕兆的暴毙了”中的“朕兆”改为“征兆”,这样文章才更完美。

评分

参与人数 1绝对值 +1 收起 理由
neeyuese + 1 感谢纠错。

查看全部评分

neeyuese  楼主| 发表于 2015-6-13 19:12 | 显示全部楼层
evev 发表于 2015-6-13 16:35
其实对美光那个dwa的描述并不是很准确吧 无论剩余容量有多少都有加速效果 而不是规定的50%容量 不然怎么显 ...

DWA是永远占用1/2的用户可用空间,没有错呀,如果用户用了全盘50%容量,那么剩下的50%里取其中的一半(总用户可用容量的25%)做DWA不是一样的意思么。那个图就是要告诉你加速范围而已。

sunbaolai 发表于 2015-6-13 19:43 | 显示全部楼层
@neeyuese 请问m550 msata 512G 用的闪存和 m550 2.5 寸 512G 用的闪存颗粒应该不一样吧?有何区别?
neeyuese  楼主| 发表于 2015-6-13 19:54 | 显示全部楼层
你有拆解图么?我不清楚。
thinkpad 发表于 2015-6-13 20:20 | 显示全部楼层
neeyuese 发表于 2015-6-13 19:12
DWA是永远占用1/2的用户可用空间,没有错呀,如果用户用了全盘50%容量,那么剩下的50%里取其中的一半(总 ...

难道就是传说中的无限SLC? 和OCZ的一样。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部