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

三星8系列SSD的Trim功能存在导致用户数据出错的隐患

[复制链接]
neeyuese 发表于 2015-6-19 01:24 | 显示全部楼层 |阅读模式
点击数:17162|回复数:43
1个多月前,我发了个帖子是说关于840 Evo更新固件后有用户反馈的Linux下Trim导致数据出错的问题,其实850Pro “砖头门” 这版的固件也有这个问题。 既然这2个问题的共同点是Linux,Trim,数据出错,三星SSD。那么我们今天就围绕SSD的Trim来展开。

Trim是什么?为什么需要Trim?

当初PCEVA做美光SSD专题时,有对Trim指令进行了介绍,详细可以见这里:http://www.pceva.com.cn/topic/crucialssd/index-6_6.html
简单来说,Trim就是当用户删除文件的时候,文件系统通知SSD控制器,这个逻辑地址对应的物理地址文件已经无效,你做垃圾回收时候不需要再浪费时间搬运了

Queue Trim的基本概念

在早期的SATA协议标准里,标准的Trim属于一条non-queued指令,也就是说需要先暂停所有的读写操作并释放缓存里的数据到硬盘之后才能执行Trim操作。我们知道SSD的并发性能很强,通过AHCI支持NCQ后,多QD下同一时间的IOPS非常可观。在高负载并发读写进行的时候经常的忽然进行标准的Trim指令就会严重影响性能了。表现就像下面这样:

-数据传输- -数据传输- -释放缓存到硬盘- -等待- -TRIM- -数据传输- -数据传输-



如图标准Trim指令会打断NCQ。

为了解决这个问题,在SATA协议3.2版里加入了Queue Trim的支持,就是能够在NCQ里执行Trim了,做Trim的时候不需要暂停SSD的I/O操作了。表现就像下面这样:

-数据传输- -数据传输- -TRIM- -数据传输- -数据传输- -数据传输-

目前只有新版的Linux内核下支持Queue Trim,Windows和MAC OSX这类系统并不支持。


目前已确认三星的8系列SSD新版固件开启了Queue Trim支持,但是支持的不好会导致数据损坏





如图,拿我手上的SSD来说,Intel 730 并没有Queue Trim的支持,而更新了新版固件的840 Evo却支持了Queue Trim。(看Word 77的6 - RECEIVE/SEND FPDMA QUEUED supported,如果为1就是支持Queue Trim)。很明显三星新版8系列SSD固件支持了SATA 3.2标准并且默认激活了Queue Trim功能,但是支持的却并不好,会导致用户数据出错。

三星对Queue Trim的答复与解决对策

关于Queue Trim的问题有位用户反映给三星官方客服后,第一次他提到了NCQ Trim造成数据出错,但是没提到Linux,结果客服给了如下回答



客服直接就说了三星SSD对Linux下的Queue Trim支持有问题,建议禁用。(也就是说三星内部已经知道Linux下的问题)

第二次这位用户详细解释了为什么会造成盘故障的问题,强调说盘的固件有问题。



结果依然得到了模板一样的回答

第三次他一点不提Trim的字眼,这一次客服算是看了来信并回答如下:



客服强调他们是售后支持,并不是固件开发工程师,固件开发工程师在韩国。目前的建议就是让用户更新最新的 Linux内核,而最新的内核里面是禁用全8系列三星SSD Queue Trim功能的“补丁”。

其实在2个月前我还有个帖子是关于840Pro在Linux下严重掉速的,这样看来三星客服的回答还真没错,三星对Linux这种开源系统不予支持三星要做的其实就是发布新固件关闭这个Queue Trim功能的支持,要么就是真的好好去重新做个能够完美支持Queue Trim的固件。



我在想如果三星不修复这个问题的话,万一之后的Windows 系统哪天来个补丁支持Queue Trim,或者MAC OSX支持Queue Trim的话是否全世界用三星SSD的用户就热闹了?丢数据的丢数据,变砖的变砖了?

三星SSD的Trim还有什么问题?下面是我的分析,仅与技术人员讨论

上面是已知的对Queue Trim支持问题,那么下面我再来说一下这几天新闻里说到的 ”部分三星SSD出现TRIM执行bug:数据被破坏、后果很严重。“

这个文章最近最近各处被转发,而且已经出现了新的中文标题:三星SSD 8* 等系列新firmware 存在误报支持NCQ TRIM 导致数据丢失的问题。其实我想说,这次貌似和Queue Trim又没关系了。原文出处地址:https://blog.algolia.com/when-solid-state-drives-are-not-that-solid/



原文作者已经表示他们并没有开启Queue Trim。



作者上面的图里显示,General Purpose Log 0x13 does not exist ,这个就表示Queue Trim 并没有启用。

既然不是Queue Trim的问题,那是什么导致了三星SSD Trim下去后数据出错呢?

Firmware bug造成Delay Trim (延迟Trim) 操作导致的数据出错。

这个bug是一个隐藏的很深的bug,只有在大压力测试下才会出现,原文作者是做数据库index操作,非常折磨ssd,windows做做文件系统这些小事,一般测试不出来的。数据出错的原因是做trim操作时,将有效数据trim掉了。

什么是Delay Trim ? 为什么我可以确认三星做了Delay Trim?

这个我们在2年前讨论840 Pro的Trim策略时候有过帖子: 三星840PRO垃圾回收策略探讨

总结部分我们提到说:三星在GC策略上,的确采取了非常保守的算法。因此导致前面如果在刚发送完Trim指令就执行测试的时候,由于SSD实际根本没有执行后续必要的GC操作,从而无法得到很好的测试成绩。

Trim的发送包含2个要点,1个是Trim指令本身,另一个是需要Trim的地址范围(LBA地址范围),一条Trim指令发送需要至少包含1个扇区号,也就是512字节。支持的Trim指令的地址范围取决于所使用的SSD,最大不能超过65535扇区,也就是不到32MB。

前面说过了,在不支持Queue Trim的情况下,由于Trim操作需要暂停并发读写指令,因此会影响性能。那么如果每次Trim的地址范围偏小,多次Trim的话更会影响性能。假设我们现在把每次Trim的地址范围缓存起来一段时间,如果在这段时间有更多需要Trim的地址范围加进来,那么我们就可以一次发送更大范围的Trim了,这不就降低了频繁打断并发读写操作的可能吗? 这个操作就叫Delay Trim。

Delay Trim是把双刃剑,做的不好非但会掉性能,还会有数据安全隐患。

假设SSD缓存了几次Trim地址范围但是还没有做Trim,这时候Trim的地址范围如果是放在缓存里的,此时突发掉电的话会如何?再次上电后这些Trim地址就没有了,也就是说Trim没效果了,当然这不影响数据安全,但是可想而知这会影响性能表现和垃圾回收效率吧。

那么这里说的数据安全隐患是什么呢?假设缓存的Trim地址范围在缓存里出错了,或者在缓存的这段时间里漏掉了某些SSD读写操作逻辑地址(在压力大的情况下更容易发生),造成将有效数据给Trim掉了。(这是完全有可能的,比如这个地址被文件系统标记Trim(删除操作)并发送给SSD主控,但是在之后的操作中被后来的新数据覆盖了,主控因为延迟Trim的发送将这个地址范围给Trim掉了,导致新的有效数据无效化了。



由于标准Trim的地址是512B为最小单位的,因此表现出来的就是如作者这里写的,小文件(小于512B)被清零了(Trim掉),运行文件检测的时候发现不了错误,因为文件在内存里的副本是好的,重复读取这些小文件都是访问的系统内存,而大文件内随机的地址被清零(某些地址范围被Trim掉)。用户的文件就这么出错了。

这不前几天还有网友问,为什么他的SSD做Trim或者快速格式化后,在那里卡几十秒呢?因为这些SSD不支持Delay Trim呀,所以如果Trim掉的无效数据多,之后的垃圾回收需要消耗较长时间去擦除这些数据。也就是暂停所有读写,Trim了并且直接垃圾回收,性能恢复了也以绝后患。

最终建议,企业级客户目前最好远离三星。消费电子嘛,本来就不能用于严肃的场合,换身衣服就装企业级的不算。话说阿里巴巴不是有高官因为采购三星ssd被fire掉了么,要我说数据库或者非Windows这种随大流系统还是别碰三星的SSD了,乖乖Intel之类的吧。

题外话:好像还有人蛮期待我的“长篇黑文”的。还有人对我长期“黑”三星很是不满意。但我想问问:你要是负责企业存储的技术人员,现在你会选择三星的SSD吗?没中招的还好说,换个品牌采购即可;对于已经中招的企业,怎么解决问题才是关键。这些都是切实的技术层面与每个企业的自身利益问题,跟立场毫无关系。你们这些枪手、粉丝,考虑过别人的利益吗,考虑过别人被坑后的感受没?如果没有,在给三星的问题产品洗地之前先抽自己几个耳光可能就知道了。

说点心里话,我觉得技术讨论就是技术讨论,黑不黑捧不捧的跟我有啥关系?从原理分析到实测表现再到各种功能的确认,最后能跟同好讨论点真相出来,这才是我关心的问题。现在就是互联网就有这么一堆自己带着有色眼镜的人,他们用立场角度去判断别人的价值观的是非,但自己却连事情到底怎么回事都搞不清楚,更别提分享什么有价值知识了,请问他们有享受言论自由的资格吗?还好我心里强大,常人被这样污蔑可能早就不敢说话了吧,他们的目的也就达到了不是?对他们我就一句忠告:回家把书念好了再喷,学渣是没有资格评论我的。

本帖子中包含更多资源

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

x

评分

参与人数 4绝对值 +8 收起 理由
tove + 2 评个分好像很有风险哈。。。
变开彡金钅冈 + 2 赞一个!
TouchNet + 2 我很赞同
zero8177 + 2 严重同意就事论事,问题就是问题,与属于哪.

查看全部评分

dboy99 发表于 2015-6-19 10:42 | 显示全部楼层
本帖最后由 dboy99 于 2015-6-19 10:52 编辑

好文,先抢个沙发再慢慢品尝

从这两种trim问题可以看出,三星对于做产品的态度依旧是有问题的。

以前曾经说过,三星在生产手机的时候会把速度放在第一位,把可靠性放在最末,这种手法帮他打败苹果以外的几乎所有对手。

现在他又用同样地手法去争取SSD市场份额。

问题是,手机作为个人消费品,有bug的话花点钱找公关公司解决即可,而SSD作为商用存储产品,对缺陷的容忍度是很有限的,三星完全是在玩火自焚

Orange_ou 发表于 2015-6-19 10:53 | 显示全部楼层
棒子的ssd 最近很多负面新闻啊
目前都不怎么敢推荐了
NOIP117 发表于 2015-6-19 10:55 | 显示全部楼层
Win10不知道支持不支持Queue Trim,我再考虑是否把系统盘从840Pro换到520上了
dboy99 发表于 2015-6-19 11:00 | 显示全部楼层
棒子星做产品的态度一直都是这样,消费者从来都是棒子星的半成品小白鼠,能接受就买,不能接受就躲开。

反正我是肯定不敢碰的了
overthink 发表于 2015-6-19 11:25 | 显示全部楼层
话说阿里巴巴不是有高官因为采购三星ssd被fire掉了么


有内幕

PS:应该是“高管”才更严谨吧,高级管理人员和高级官员,这两个貌似有点区别。
OstCollector 发表于 2015-6-19 11:29 | 显示全部楼层
不符合标准的设备有多远滚多远
标准是甩锅的唯一准则
boyce 发表于 2015-6-19 11:54 | 显示全部楼层
膜拜大神知势贴
初恋璀璨如夏花 发表于 2015-6-19 12:01 | 显示全部楼层
不是很懂,,就想知道840pro有问题没
dert88 发表于 2015-6-19 12:09 | 显示全部楼层
膜拜浴室大神,这次是三星Queue Trim BUG造成linux先遭殃,幸好我是家用的,windows逃过一劫,就怕win10开始支持Queue Trim就歇菜了。



另外为什么SSD的BUG在linux下更容易被发现呢?而windows下出问题却容易被掩盖?是什么道理呢?是否因为linux在新技术的支持上更快速?
OstCollector 发表于 2015-6-19 12:16 | 显示全部楼层
dert88 发表于 2015-6-19 12:09
膜拜浴室大神,这次是三星Queue Trim BUG造成linux先遭殃,幸好我是家用的,windows逃过一劫,就怕win10开 ...


Linux是对新功能支持最快的操作系统,基本上没有之一

yukari 发表于 2015-6-19 12:36 | 显示全部楼层
簡單來說就是並發命令的同步沒做好,在高負載下命令隊列出錯,導致有效數據被trim掉?

评分

参与人数 1绝对值 +1 收起 理由
neeyuese + 1 赞一个!

查看全部评分

wujiakangkk 发表于 2015-6-19 12:56 | 显示全部楼层
回家把书念好了再喷,学渣是没有资格评论我的。
Orange_ou 发表于 2015-6-19 13:08 | 显示全部楼层
dert88 发表于 2015-6-19 12:09
膜拜浴室大神,这次是三星Queue Trim BUG造成linux先遭殃,幸好我是家用的,windows逃过一劫,就怕win10开 ...

linux 开源系统 就是支持新特性比较快 然而有没有bug 不好说  先搞了再说  多用来做学习研究不过 linux服务器那边也是比较保守 软件都相对比较旧 新的有没有bug不好保证
然而看这样子 windows也是比较保守的 毕竟是让客户用的 出问题了也是比较麻烦


深蓝羽翼 发表于 2015-6-19 13:16 | 显示全部楼层
支持浴室
打酱油114 发表于 2015-6-19 13:35 | 显示全部楼层
看来升级WIN10也的好好想下 我的840 PRO了
OstCollector 发表于 2015-6-19 13:45 | 显示全部楼层
Orange_ou 发表于 2015-6-19 13:08
linux 开源系统 就是支持新特性比较快 然而有没有bug 不好说  先搞了再说  多用来做学习研究不过 linux服 ...

linux 的服务器也不慢了

ubuntu server 已经升到了 3.19
debian stable 已经升到了 3.16
redhat enterprise 升到了 3.10
suse enterprise 升到了 3.12

3.12开始支持queued trim,也就是ubuntu、debian和suse都支持了
bug在这个时候被发现估计是因为他们的debian stable从wheezy升级到了jessie

Orange_ou 发表于 2015-6-19 14:34 | 显示全部楼层
本帖最后由 Orange_ou 于 2015-6-19 14:45 编辑
OstCollector 发表于 2015-6-19 13:45
linux 的服务器也不慢了

ubuntu server 已经升到了 3.19


最近发布的rhel7.1 还是3.10内核。。13年5月份的发布。。。 都两年了 不算慢 但也不算快了3.12 13年11月份发布。。。 而现在都4.0了
然而像rhel的维护期是10年。。。所以一般那些公司的系统版本更加旧
这东西毕竟稳定为主


mikuluka 发表于 2015-6-19 14:48 | 显示全部楼层
呢意思是我用850PRO只要不用linux基本暂时就没事呗 不过话说有没有办法彻底解决840EVO的BUG 三个750G的表示用着都蛋疼了
Pale_Cheung 发表于 2015-6-19 15:11 | 显示全部楼层
OstCollector 发表于 2015-6-19 12:16

Linux是对新功能支持最快的操作系统,基本上没有之一

linux 分支太多了。

真的快的像 fedora 这种“试验田”。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部