分享

SSD基础之Trim命令

 dios.com 2011-07-23
 

SSD基础之Trim命令

2011-03-14 20:50:50|  分类: 测评探索 |  标签:trim  ssd  写入  删除  数据   |字号 订阅

本文转自http://bbs./thread-2407-1-1.html

我相信听到过买SSD要买支持Trim的玩家不在少数,不过我敢肯定大多数玩家到目前为止还搞不懂Trim到底是干啥的,只是一味跟风,今天在这里我就稍微详细的解释下Trim这个命令。

Q: 为啥我们需要Trim?

A: 我们都知道,当一个文件被删除后,操作系统其实并没有删除数据 - “事实上,它只是在硬盘前的索引区里标记这块文件占用的区域为可覆盖的,所以下次数据将要再次写入的时候,可以覆盖写入这块被标记的区域。这也就是为啥那些所谓的文件恢复软件能恢复的道理。(数据依然存在)。”
    这里要注意一点: 硬盘本身是不知道当前数据的状态的,他只是被控制着做这做那。 上面这一套在普通的机械硬盘上工作起来非常完美,因为他们可以直接覆写旧的区域,但是当用到NAND闪存上就行不通了,当全部闪存被写满一遍后,没有空余(从未写过)的块可以被使用的情况下,速度就下来了。
    在固态硬盘闪存内,数据存储一般是以page(页)为最小单位存储的(典型的为4KB),而128个page组成了一个block(块),数据可以以4KB大小的页来读取和写入,但却只能以512KB(128 page)的块大小来删除。当读取数据或者写入到一个没有被使用过的page上时,固态硬盘的速度是很快的,但是覆写数据的话,就比较复杂了,需要许多步骤来完成。步骤可见下图:

SSD基础之Trim命令 - 情迷网路 - 离不开的心
 
当SSD的所有空闲块都被使用后,再有写入操作,它只能覆写数据到之前被操作系统标记为删除的区域。这也是速度下降的开始:

要覆写一个4KB 页的文件系统,首先要把整个512KB 块复制进缓存里。然后,在缓存里删除这个4KB页,替换成新的数据。接下来,清空整个闪存内的这个512KB区域,并从缓存里把新的数据写回去。如果你需要同时覆写很多的块 - ”例如是一系列小文件随机写入操作或者只是简单的写入一个大文件到SSD“。你会让你的SSD缓存快速过载,然后你的写入速度就会”垂直落体“。。。告诉你,你能体会到会有多慢,早期缓存少的SSD甚至会延迟接近1秒(JMF602之流),为了修复这个问题,SSD厂商一个个都在新主控制器上加入了越来越大的外置缓存,这虽然一定程度上解决了随机写入卡的问题,但是却不能解决SSD在覆写时速度下降的问题。

Q: Trim命令到底做了什么?

A: 简而言之,这个问题是因为操作系统和文件系统不能和SSD的主控进行删除文件的交流造成的,如果有之前没清除干净的数据,所有写入的页的操作都要先清除块再改写,将严重影响写入速度。有2种途径来修复这个问题:

第一个就是定期运行垃圾回收程序(GC)(这个操作有点像整理,在SSD空闲时,全盘扫描有效的页并合并整理起来变为一个包含全部有效页的块,而那些无效的页和块都将被完全的清除)。

第二个更好的途径就是当数据删除时候让系统告诉SSD数据没了,让SSD立即擦掉那些数据占用的块,这就是Trim命令做的事。
当一个文件在支持Trim的系统里被删除后,操作系统会发个命令给SSD,让他知道这个数据所在的这个page可以直接被写入,等于把控制权从操作系统变为了SSD主控制器固件。SSD一样会复制整个包含删除数据的块到缓存,清空块并写入有效数据的页回去,区别是这样等于把这个延迟时间从覆写数据的那个时间提前到了删除数据的时候(这个时候你对速度不敏感,如果你删除了很大很大的数据,可以去观察硬盘灯在你删除之后几秒内狂闪),自然就会显得SSD的速度回来了,因为你写入的时候有可用的空块。barefoot主控的SSD,有个程序叫做Wiper,这个程序会扫描全盘,清除掉全盘过去被删除的页(和Trim的操作一样,手动),让SSD像新买来的一样。事实上这个程序在清除全盘已删除的数据之前,预先做了有效数据备份。由于程序独特算法和主控对应,别家的主控不支持,因为不算是真正的Trim命令(不是由系统发出的命令),所以可以支持XP之类的老系统。

所以我们可以说,Trim保证速度不下跌的真正秘密是: 把将来要做的事提前做掉了。 但是这件事迟早要做,所以基本不会影响SSD原有的写入次数(寿命)。
有很多人说,Trim是为测试而生的,这话其实没错,因为 1.Trim不能提速,只是保证速度尽可能不下降。(实际是SSD上没被使用的容量那里的速度不下降。Trim提前把那里的块清空了。下次直接可以写当然快了。)2.Trim没改变原本要做的事,只是提前做掉了,测试软件测试时候就不需要做了,从而“显得”速度上去了。
对于GC来说,由于是移动,整理,合并了旧页到新块,删除了无效的旧块,会牺牲点写入次数(寿命)。但是GC支持RAID,也算有利有弊吧。

Q : 支持Trim有啥要求?RAID到底支持不支持Trim?

A : 首先我也是个玩家,非业内人士,所以下面的回答可能不正确,欢迎指出,而且这东西随时后更新,现在的答案不一定用的到将来。

Trim的三要素:

               1. 系统: Win7, 2008R2 , Linux核心2.6.28以上。
               2. 固件: SSD的厂商在固件里要放有Trim算法。
               3. 驱动: MS的驱动,Intel的AHCI驱动目前支持。 别的要看之后的更新了。
以上3点缺一不可。

RAID阵列里的盘明确不支持TRIM,不过RAID可以支持GC。详细操作请看 手动GC


当前固件下的SF1200和SF1500主控SSD,请使用Intel的AHCI驱动,MSAHCI不支持TRIM。这个bug是因为此主控算法极其特殊,采用改革的压缩算法,造成删除数据时,Trim命令发送给了错误的页和块,造成Trim无效。


附:百度文库中关于Trim的描述http://baike.baidu.com/view/926428.htm

Trim的作用
  原本在机械硬盘上,写入数据时,Windows会通知硬盘先将以前的擦除,再将新的数据写入到磁盘中。而在删除数据时,Windows只会在此处做个标记,说明这里应该是没有东西了,等到真正要写入数据时再来真正删除,并且做标记这个动作会保留在磁盘缓存中,等到磁盘空闲时再执行。   这样一来,磁盘需要更多的时间来执行以上操作,速度当然会慢下来。
  而当Windows识别到SSD并确认SSD支持Trim后,在删除数据时,会不向硬盘通知删除指令,只使用Volume Bitmap来记住这里的数据已经删除。Volume Bitmap只是一个磁盘快照,其建立速度比直接读写硬盘去标记删除区域要快得多。这一步就已经省下一大笔时间了。然后再是写入数据的时候,由于NAND闪存保存数据是纯粹的数字形式,因此可以直接根据Volume Bitmap的情况,向快照中已删除的区块写入新的数据,而不用花时间去擦除原本的数据。
  以上就是Trim的原理以及真正作用。
  注意:如果SSD组RAID0后,将失去Trim功能
win7下Trim启用的验证方法
  其实Windows 7默认状态下Trim指令是开启的,如果想查询目前的Trim指令状态,我们可以在管理员权限下,进入命令提示符界面,输入“fsutil behavior QUERY DisableDeleteNotify”,之后会得到相关查询状态的反馈。在这里,提示为“DisableDeleteNotify = 0”即Trim指令已启用;提示为“DisableDeleteNotify = 1”即为Trim指令未启用。   并不是操作系统提供Trim指令支持,所有SSD都能享受到Trim技术所带来的好处,这还需要固态硬盘的固件支持才能实现。一些主要的固态硬盘主控芯片厂商已经提供了支持Trim的固件(例如英特尔"X25-M G2"),不过也有厂商开发出不依赖操作系统的垃圾回收技术,通过回收不再使用的闪存区块加入负载平衡算法,防止固态硬盘在长期使用后速度下滑,并延长闪存使用寿命,过程完全在固态硬盘内部完成。


那么Trim到底解决了什么问题?就是之前SSD删除数据时,操作系统只是标记数据被删除,而数据实际上还保存在SSD上,当有新的数据写入时,SSD需要将原来在SSD上的数据搬家,而搬家过程就产生了无谓的写入,而Trim实际上就是解决了这个问题,让数据真正的被删除,或者说不再出现搬家的情况!

而这个功能也并非非要win7才行,xp也一样可以,用intel ssd toolbox就可以了,里面有内置的优化器,可以完成优化功能。以下组合都可以让Trim技术生效。
1:如果是win7,安装微软的native ahci,不需要安装intel ssd toolbox
2:如果是win7,安装Intel的Intel Matrix Storage Manager驱动,并安装intel ssd tool box
3:如果是winxp,安装Intel的Intel Matrix Storage Manager驱动,并安装intel ssd tool box

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多