PCEVA,PC绝对领域,探寻真正的电脑知识
打印 上一主题 下一主题
开启左侧

谈谈我对“Trim”的理解。

[复制链接]
跳转到指定楼层
1#
haierccc 发表于 2012-5-28 16:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
点击数:5463|回复数:11
本帖最后由 haierccc 于 2012-5-28 16:30 编辑

        研究SSD这么长时间了,长时间对Trim的作用不明所以,接触本论坛以后,终于有所领悟,我说说我对Trim的理解吧。
     不管是FAT16,FAT32,还是NTFS,在删除文件的时候,仅仅是在文件系统的数据结构里,给文件对应的“簇”打上删除标记,声明“此簇已经被释放”。也就是磁盘空间已经被回收,但是“簇”中的数据并不被删除。
     下次有文件再次写入的时候,直接可以写入这些簇,对于磁盘的写入原理来说,写入新数据,和覆盖原有的旧数据是同时完成的,也就是说写入数据的同时除原有的数据(覆盖了)。
     但是NAND闪存在写入的时候,必须要保证单元处于“空白”状态,也就是说不能有数据,如果有,必须要“删除”。所以SSD在写入空白块的时候有很快的速度,但是写入原来有数据的块时,要经历“删除旧数据”和“写入新数据”2个步骤,从而拖慢了速度(磁盘只有一个步骤)。
     对于空白的SSD,肯定都是没有数据的,读写速度很快,当所有的空白块都写入以后,SSD就“脏”了。
     这里的“写入”有2层含义,1是用户有用的数据,2是被删除的数据,因为如上文所述,数据被删除,仅仅是做了个标记而已,而SSD控制器并不理解这个标记(仅被操作系统所理解)。所以从SSD控制器来看,被删除的数据仍然占用NAND闪存空间,是“有用”的。
     而Trim的存在就是为了让SSD控制器能够知道哪些数据是被删除的,在操作系统删除数据的时候,就告诉主控,如下这些这些数据是被删除的。主控听到以后,就会在内部给这些数据打上标记。这样在做GC的时候就不用把这些数据合并写入了(也就是直接删除)。
     总之一句话:Trim的作用,是在GC的时候减少写入放大
     
     如果我的理解是正确的,那么又带来另一个问题
     现在有主控宣称,哪怕操作系统不支持Trim,也可以做低写入放大的GC。如果这是真的,那主控从何知道,哪些数据是被删除的呢?
      我认为,这就需要主控能够"理解"FAT32和NTFS的数据结构了。能够从二进制的层面上分析文件系统,从而判断出被删除的数据。

评分

参与人数 1活跃度 +5 收起 理由
wsy2220 + 5 赞一个!

查看全部评分

2#
neweyes 发表于 2012-5-28 17:57 | 只看该作者
不支持Trim的话,应该是要到操作系统下次写入同一位置的时候 ssd的主控才会知道。
3#
haierccc  楼主| 发表于 2012-5-28 18:24 | 只看该作者
是的,可是这时候已经晚了。Trim的作用就是提前让主控知道。
其实要达到“主控和操作系统看到的完全一样”的手段有2个:1操作系统告诉主控删除的哪些数据(Trim),2是要主控“学会”以操作系统的眼光来分析文件系统。
对于不需要Trim 的主控,我认为是后者。
4#
travis 发表于 2012-5-28 22:29 | 只看该作者
对于不需要TRIM的主控,我认为它是做不到分析文件系统的。
5#
James007ss 发表于 2012-5-28 23:23 | 只看该作者
现在有主控宣称,哪怕操作系统不支持Trim,也可以做低写入放大的GC。如果这是真的,那主控从何知道,哪些数据是被删除的呢?


我比较好奇的是,是哪家主控厂商这样宣称?
6#
neeyuese 发表于 2012-5-29 09:19 | 只看该作者
鉴于楼主说的: 现在有主控宣称,哪怕操作系统不支持Trim,也可以做低写入放大的GC。


我的理解:如果操作系统不支持Trim,则SSD只有在下次操作系统请求在同一地址写入数据时才会发现这个地址的数据已经无用了,那么这时候要做低写入放大,和主控之前对数据的排列结构有关,是相对其他主控的架构写入放大更低罢了,并不可能比支持Trim的情况下更低,这个你概念搞混了。另外主控不可能去识别文件系统,对它来说只有0和1的概念,一切都是FTL在告诉它如何处理,而FTL又是文件系统来告诉他如何操作的,文件系统在FTL之上,FTL在主控之上,只有上面的看得到下面的,不知道你理解了没有。还有一点就是,Win7只支持NTFS文件系统发送Trim指令,别的类似FAT的文件系统不支持发送Trim指令。

7#
Lenovo 发表于 2012-5-29 17:13 | 只看该作者
同一个盘,在支持TRIM的系统里面的写入放大肯定会比不支持TRIM的要小。否则就是他的TRIM没做好,白做了。不如不做。

目前标准SSD是不知道文件系统的,只知道LBA.
支持TRIM的操作系统在删除时的动作:发出删除命令给文件系统的同时,会给SSD发Trim指令和LBA范围,这fan部分LBA就会被SSD主控“TRIM”掉。
8#
haierccc  楼主| 发表于 2012-5-29 18:00 | 只看该作者
James007ss 发表于 2012-5-28 23:23
我比较好奇的是,是哪家主控厂商这样宣称?

我记得是“剑鱼”
9#
haierccc  楼主| 发表于 2012-5-29 18:58 | 只看该作者
本帖最后由 haierccc 于 2012-5-29 19:03 编辑
neeyuese 发表于 2012-5-29 09:19
鉴于楼主说的: 现在有主控宣称,哪怕操作系统不支持Trim,也可以做低写入放大的GC。


我仔细想了一下,哪怕是主控不会分析文件系统,也可以做到在无Trim的情况下做低写入放大的GC,关键就在于主控写入策略。
目前的主控写入策略是:尽量找空白块写入那些被“染脏”的块靠GC流程解决。
这样,一方面是用户不停的写入(消耗空白块),另一方面是GC流程不停的清除脏块(依靠Trim判断哪些数据无用并删除之,制造出空白块)。如果空白块的制造速度能够比得上消耗速度,就能保证长时间写入而性能不降。
但是如何能保证“空白块的制造速度比得上消耗速度”呢?靠2个因素:更加激进的GC策略,和减少单位时间的写入量。
好在家用硬盘的写入频率和数据量都不高,所以厂家可以用比较保守的GC策略来保证写入寿命。
以上的写入策略,我称之为“空白块优先”。

但我设想另一种写入策略,叫做“低地址优先”
也就是说,在写入的时候,从最低地址(或者从高地址,一样的道理)写入,写入地址逐渐递增(或递减)。

让我们来看看这种写入策略的详细流程:

对于一个全新的SSD,所有的块都是空白的,此时写入数据的地址逐渐递增,当写满(包括删除)的数据达到SSD的全部容量后,此盘就被100%染脏了。再次写入数据的时候,肯定是写到脏块里了,此时主控就会知道,这个块的数据是无用的,于是在FLT中做出标记,避开此地址,把数据写入空白的OP空间。
此时的情况就是:主控不断的发现无用数据并记录下来,运行GC流程删除之。而写入的数据被重定向到全是空白块的OP空间。
这是一种不需要Trim 的发现脏块机制。

10#
neeyuese 发表于 2012-5-29 19:02 | 只看该作者
从来不存在你说的“空白快优先”,只可能存在你说的“低地址优先”。

其实消耗时间的并不是你说的GC里的删除操作,而是GC里的搬运操作。
11#
tangjquan 发表于 2012-5-30 20:08 | 只看该作者
看不懂。,好纠结啊
12#
炸死企鹅 发表于 2012-5-31 22:56 | 只看该作者
学习SSD这么久了,我觉得Trim这个东西还是很好理解的,比Trim更难理解的东西更多,我现在还是在咬文嚼字的学习SSD专业术语呢,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部