|
固态硬盘SSD的灵魂--控制器如果您已经看过"固态硬盘的核心--闪存芯片(Nand Flash)介绍"一文,相信对Nand Flash已经有了一些了解。Nand Flash的性能指标虽然大多数以微秒来计算,比传统的机械硬盘高很多。 如果您已经看过"固态硬盘的核心--闪存芯片(Nand Flash)介绍"一文,相信对Nand Flash已经有了一些了解。Nand Flash的性能指标虽然大多数以微秒来计算,比传统的机械硬盘高很多。然而闪存本身也有不少先天不足,比如擦除的时候以块(Block)为单位,以及不能避免的坏点等问题。而MLC的Nand Flash相比SLC虽然便宜大碗,但是性能更低,寿命更短。用MLC来做固态硬盘显然要克服不少的困难。固态硬盘早期的发展已经证明,良好的控制器的设计对于固态硬盘的性能和寿命至关重要,可以说是固态硬盘的灵魂。 2008年中,固态硬盘开始崭露头角,逐步进入主流消费市场。然而其售价动辄数千,让一般消费者望而却步。不久以后,搭载MLC Nand Flash的固态硬盘开始出现在市场上,售价逐渐降低到2000元甚至更低,开始接近某些消费者能承受的心理价位。随着固态硬盘的逐步普及,一些性能上的问题开始浮现出来。照理说,固态硬盘的随机读写性能应该比传统机械硬盘要好很多,用来做系统盘应该更流畅。不过有些人的实际使用情况却是,在用MLC的Nand Flash作为系统盘时,有时会产生卡和顿的情况,这可是使用机械硬盘都不会出现的情况!经过测试发现,这些MLC的固态硬盘的小文件的读写性能都相当不如人意,其中尤其以写性能为甚。 正当人们对固态硬盘的前景有些悲观的时候,2008年下半年,从未涉足硬盘领域的Intel发布了其自己设计的两款固态硬盘X25-E和X25-M。除了性能极度强劲让人吃惊之外,使用MLC Nand Flash的X25-M的性能仍然很强,和之前的MLC固态硬盘的性能相比可说是天翻地覆的变化。 上图为国外网站Anandtech在2008年做的4KB大小文件的随机写入性能测试。四个被测硬盘分别是OCZ的MLC固态硬盘,OCZ的SLC固态硬盘,Intel的X25-M固态硬盘和希捷的7200转机械硬盘。OCZ的MLC固态硬盘的性能可说是惨不忍睹,此时速度仅0.016MB/s,要知道,它的大文件连续写入性能可是在100MB/S以上! 而同样采用MLC Nand Flash的Intel固态硬盘此时的性能仍能保持在40MB/S以上,两者之间的不同,仅仅是控制器而已。 目前并没有直接的证据表明为什么Intel的固态硬盘为什么性能如此强劲,或者其他品牌早期的固态硬盘的性能如此之差。但是如果我们尝试了解固态硬盘控制器所要解决的种种问题,或许我们可以从侧面了解这其中的原因。 写入放大倍数(Write Amplification) 写入放大倍数(Write Amplication)是固态硬盘的设计所面临的一个重大的问题。 在"固态硬盘的核心--闪存芯片(Nand Flash)介绍"一文,我们已经提到, 对Nand Flash所进行的种种操作不是以bit为单位,而是以页(Page)或者块(Block)为单位。 特别是擦除(Erase)这个操作,是以Block为单位的。 现今的Block大小基本是512KB, 而将来的Nand Flash的Block则会越来越大。 当我们要在某个Block中覆盖一个小文件时,由于很可能存在其他有效数据,所以控制器所需要做的实际事情是:读出Block中所有有效数据->擦除Block->在缓存中覆盖文件->然后把更新过的内容写入Block中。 这整个过程所花的时间要比直接向空白的Page中写入数据要慢得多。这是固态硬盘和机械硬盘显著不同的一点 很明显,在清楚这个操作的过程以后,我们就明白,固态硬盘的控制器在写入数据时,应该尽量找空白的区域,这样可以直接写入,从而避免上面所述的需要经过擦除这个操作的曲折过程。不过100%避免显然是不可能的,比如硬盘快满的时候。 所以就有了写入放大倍数(Write Amplification)这个指标。它的意思就是实际写入的数据量和需要写入的数据量的比值。 这个比值肯定是大于等于1的,而且是越接近1越好。 Intel宣称其固态硬盘的写入放大倍数一般小于1.1,这可以说是非常好的数值了。这也体现了其控制器设计的优秀之处。 TRIM 要彻底解决写入放大的问题,在实际应用中只靠固态硬盘控制器的努力是不够的,因为这其中涉及到操作系统的一个历史遗留问题。一直以来,操作系统在删除文件时,并不是将文件在硬盘中的数据逐个清除,而只是对其做个标记,表示文件已被删除。当以后需要使用这块空间时,就直接用新文件覆盖标记为已删除的文件。由于机械硬盘的写入和覆盖基本是一回事,在机械硬盘年代,这样的做法是让其性能最大化很好的做法。 但是这个做法用到固态硬盘上就不行了,前面已经解释过固态硬盘的覆盖要比直接向空白区域写入的性能差很多。设计良好的固态硬盘控制器固然会自己去寻找空白区域来写入新文件,但是硬盘的空间总有穷尽的一天,当硬盘上的剩余空间全都是被标记为已删除的文件时,覆盖操作就不可避免了,这也意味着写入性能大幅度降低的时刻来临了。 对此,业界给出的解决办法是TRIM,这个需要操作系统和固态硬盘控制器两方面合作支持的命令。对于操作系统来说,TRIM是比较容易实现的,大致只需要在删除文件的同时向固态硬盘发送文件具体占用的位置即可。固态硬盘需要根据位置信息把数据擦除。在时机的选择上则是个问题,如果立即擦除的话,很可能会让使用者觉得删除文件的过程变得漫长,最好应该是在较空闲时进行擦除工作。这对于控制器的控制管理能力又是一个比较严峻的考验。 上图是实测的TRIM带来的作用。所使用的硬盘是SuperTalent的MLC固态硬盘UltraDrive GX 1711。测试项目为4KB小文件的随机写入性能。全新的硬盘是13.1MB/S。使用过一段时间后,性能骤降至6.93MB/S。将TRIM打开后,性能回升至12.9MB/S,几乎等于全新的硬盘的性能了。 TRIM对于固态硬盘的性能是相当重要的,很多早期的固态硬盘并不支持TRIM,购买时千万要注意。在操作系统方面,微软直到Windows7才开始支持TRIM,务必注意。 损耗控制(Wear leveling) 在"固态硬盘的核心--闪存芯片(Nand Flash)介绍"一文中我们介绍过SLC和MLC Nand Flash分别大致能承受10万次和1万次的擦写操作。即使是SLC的10万次,也并非一个很大的数字,拿来作为读写操作频繁的系统盘也不禁会让人觉得有很悬的感觉,是不是用了不久就会坏呢?对此,固态硬盘的控制器再次肩负起重任。办法就是在写入时,尽量在空白区域中寻找经历过较少擦写次数的区域。最完美的情况当属擦写操作均匀地分布在硬盘中的每个区域中。假设有一个MLC的80GB的硬盘,在坏掉的时候恰好每个区域都经过了1万次擦写,那么一共可以写入500__0x80GB的数据。即使用户每天都把硬盘重写一遍,也得用13.7年的时间! 现实不会这么完美,让硬盘中所有的区域都完全平均地承受擦写的动作,但是普通用户也不会每天都写入这么多的数据。所以固态硬盘的寿命会比MLC仅仅一万次的擦写寿命长很多。而好的控制器的设计显然也会延长固态硬盘的寿命。 结语 经过上面的这些介绍,我想您肯定已经明白固态硬盘的设计面临着不少不容易解决的问题。而事实也是早期的固态硬盘往往既不支持TRIM,性能上也有较大的缺陷,使用体验难以让人满意。不过固态硬盘的发展趋势可说相当不错,目前较新的固态硬盘大多都克服了以前出现过的问题,配合Windows7性能都非常不错。只要价格再下来一些,无疑将迅速成为大多数玩家的首选。 责编:张鹏宇 微信扫一扫实时了解行业动态 微信扫一扫分享本文给好友 著作权声明:畅享网文章著作权分属畅享网、网友和合作伙伴,部分非原创文章作者信息可能有所缺失,如需补充或修改请与我们联系,工作人员会在1个工作日内配合处理。 |
最新专题 |
|