也谈Windows 7对SSD的优化

系统
在Windows 7里,如果固态硬盘报告支持ATA协议数据集管理(DSM)命令里的Trim属性,NTFS文件系统就会在用户删除文件的时候要求ATA驱动向固态硬盘发 出新的Trim操作指令,告诉它相关页面可以安全擦除。固态硬盘得到这一指示后,就不会急于执行擦除操作,而是等到合适的机会,也就是再次有写入操作的时 候,因为这时相关页面已经可以重新使用,就不需要再执行擦除操作了。

前几天看到一篇文, 叫"漫谈Windows 7对固态硬盘的优化", 里面有这么一段:

" 在Windows 7里,如果固态硬盘报告支持ATA协议数据集管理(DSM)命令里的Trim属性,NTFS文件系统就会在用户删除文件的时候要求ATA驱动向固态硬盘发 出新的Trim操作指令,告诉它相关页面可以安全擦除。固态硬盘得到这一指示后,就不会急于执行擦除操作,而是等到合适的机会,也就是再次有写入操作的时 候,因为这时相关页面已经可以重新使用,就不需要再执行擦除操作了。"

这也太神奇了吧, 难道Trim一把, 本来必须要先擦除才能写入的Flash现在就不用擦除了? 我等草民实在不能理解. 找原文来看看:

http://blogs.msdn.com/e7/archive/2009/05/05/support-and-q-a-for-solid-state-drives-and.aspx

"In Windows 7, if an SSD reports it supports the Trim attribute of the ATA protocol’s Data Set Management command, the NTFS file system will request the ATA driver to issue the new operation to the device when files are deleted and it is safe to erase the SSD pages backing the files. With this information, an SSD can plan to erase the relevant blocks opportunistically (and lazily) in the hope that subsequent writes will not require a blocking erase operation since erased pages are available for reuse."

这就能理解了, 比较准确的翻译应该是"SSD可以在恰当的时候(晚一点)再去擦除相关的块, 这样接下来的写操作可以不用等待擦除操作完成, 因为有(其它的, 译注)擦除过的块可供重用"

我不会翻译, 丑点但意思应该对, 原译者可能对文件系统, Flash(负载均衡)原理不太了解, 原文理解起来可能比较困难吧...

简单的说, 引入Trim之前, 文件系统对SSD来说是个黑盒, 整个文件系统所占用的空间对SSD来说都是被使用中, 文件系统中的未使用空间也被保持着, 这完全是浪费, Trim扮演的角色就是给文件系统到SSD提供了一个接口, 让SSD知道哪些块是文件系统未使用的, 这对提高负载均衡的性能非常有利.

复杂了说, 首先你要知道闪存的操作不像内存硬盘一样随便儿写1写0, 闪存的擦除(写1)操作是对块的, 而且慢到死, 其次你得知道闪存一定要有负载均衡, 为了寿命也为了性能, 而且用于负载均衡的冗余块越多越好(这很好证明, 举个极端的例子, 有一个冗余度是无穷的SSD, 这样只用写就行了, 永远不需要进行那个该死的擦除操作, 证毕, 不对, 好像还需要证明单调性...)

闪存卡/SSD出现以前的Flash应用常常是裸的 一块NOR Flash接上来, 负载均衡都是在JFFS/TFFS这样的Flash文件系统级实现的, 所有文件系统空闲的空间都被用来做为负载均衡冗余, 根本就没有上面这种问题, 现在很多嵌入式系统的固化OS都还是这么做, 像手机什么的, 可是到了消费级产品, 闪存卡, SSD这些东西, 必须得使用FAT/NTFS这些通用文件系统, 像硬盘一样提供给OS一个平坦的块设备接口, 只能在这一层之下做负载均衡, 只能靠硬件上多加的冗余容量(你看Intel那个X25-E用40GiB的Flash颗粒做32GB的SSD), 有了Trim之后, 这个情况就改观了.

另外我觉得其实原文逻辑有点问题: 有Trim之前, 文件系统删除一个文件, SSD根本不会去擦除那个块, 哪敢啊, 还以为在用呢, 这时候就算有写入操作, 也不用等(根本就不存在的)擦除操作. Trim的好处应该是: 有Trim之后, SSD就知道那些块不被占用了, 有空闲(没有读写操作)的时候那些块就会被擦掉, 这样接下来的写操作就有更多擦除过的块(不仅仅是硬件冗余的那些)可供使用, 可以撑得住更久的密集写入而不用等待缓慢的阻塞的擦除操作.

当然, 这会引起一个副作用, Trim过的块的内容变得不确定, 那些反删除/数据恢复软件, 大概要集体师太了吧XD

写这文的本意是不希望那个诡异的说法以讹传讹下去, 之前还看过把超线程解释成双核的文... 不过不知道有多少人有耐心看完呢...

【编辑推荐】

  1. Windows7 RC问题不断
  2. Windows 7 RC产品激活密匙 可免费获取
  3. Windows 7 RC到期将每两小时关闭一次
责任编辑:庞桂玉 来源: cnbeta
相关推荐

2009-09-04 08:13:55

Windows7 SSD优化

2009-08-21 19:07:06

Windows 7固态硬盘优化

2009-05-06 09:00:03

微软Windows 7操作系统

2009-02-18 08:36:17

专家Windows优化

2009-09-08 08:21:46

Windows 7固态硬盘

2009-10-22 09:04:13

Windows 7系统特性

2009-03-06 08:54:25

EngineeringWindows 7兼容性

2009-08-21 09:15:01

Windows7盗版者洪磊

2009-03-09 18:44:05

2009-08-18 09:00:00

Windows 7SSD固态存储

2009-12-28 09:27:11

Windows 7企业部署

2017-05-16 15:27:32

精益敏捷代码

2012-03-21 09:12:24

编程

2009-11-13 15:44:39

Visual StudWindows 7

2009-02-20 09:17:27

Windows 7启动画面构思

2009-02-12 16:44:45

windows7硬件要求

2009-04-16 08:17:55

Windows 7微软操作系统

2010-08-02 13:55:20

2012-02-03 16:59:28

内存SSD向上扩展

2010-01-07 08:55:41

Windows 7Natal
点赞
收藏

51CTO技术栈公众号