从7200转硬盘升级到10000转的迅猛龙,那叫量变。
从10000转的迅猛龙升级到SSD,这个叫质变。
2者的差距是有些地方相当大,而有些却很接近,主要是难比较。
经常听到有人说:我买2个黑盘组RAID 0,传输率也有接近250MB/s了,这个速度和Intel X25-M不相上下了,写入还高,容量又大,性价比明显好。一开始还试着会去纠正下他这个错误的观念,后来麻木了。有时候并不是他不懂,可能他是个商家,或者是刚买了黑盘的用户,又或者只是想"炒作"下,世界之大,啥人都会有么。
废话不多说了,下面我来说说自己的感觉。我用过7200转的机械盘,组过RAID 0。我也用过10000转的猛禽,组过RAID 0,我还用过SAS的15000转3.5inch还有2.5inch的盘,组过多盘RAID 0,用过早期的MLC,SLC,组过RAID 0,现在在用MLC的SandForce和barefoot SSD。
首先,先来看机械盘的运作,工作时磁盘在主轴马达的带动下,高速旋转,磁头臂在音圈马达控制下,在磁盘上方进行径向的移动和寻址,机械盘常见指标有下面几个:
1,每分钟转速:指的是主轴马达带动磁盘的转速,一般是7200~15000转,节能盘是5400转。(大家都知道)
2,平均寻道时间:一般是指读取的寻道时间,单位是ms。这个指标是说硬盘接到读/写指令后把磁头移动到指定的磁道(客观的说应该是柱面,但是相对指定的磁头来说就是磁道)上所需要消耗的时间。其实除了平均寻道时间外,还有道间寻道时间与全程寻道时间,前者是指磁头从当前磁道移动到旁边磁道上所需要时间,后者是指磁头从最外圈(内圈)移动到最内圈(外圈)磁道上所需要的时间,基本上是平均寻道时间的2倍。
3,平均潜伏期:这个指标是指当磁头移动到指定磁道后,需要等待指定读/写扇区移动到磁头下方所需要的时间。(盘片旋转),也就是说盘转速越快,潜伏期越短。一般平均潜伏期指的是磁盘转动半圈的时间,相同转速硬盘的平均潜伏期是固定的。7200转为4.167ms,5400转为5.556ms。
4,平均访问时间:这个就是平均寻道时间+平均潜伏期+指令操作时间,由于指令操作时间很短,所以一般就是前2者相加了,厂商一般不提供这个数据,因为不同固件,批次,会有不同,很难统一。
5,数据传输率:单位一般为MB/s,数据传输率就是传输速度了,大家都懂的。不同的数据请求会有不同的数据传输率,不过主要分外部传输率(接口)和内部传输率(介质)。外部就是指缓冲区与主机(内存)之间的数据传输率,内部指磁头与缓冲区之间的数据传输率。外部传输率会被接口限制,SATA 3G/6G, SAS 3G/6G, PCIE 4X, 8X等等接口会限制外部传输率,而内部传输率就是硬盘真正的数据传输能力。为了充分发挥内部传输率,外部传输率必须比内部传输率高。机械盘外圈磁道最长,可以让磁头在单位时间内比内圈磁道划过更多的扇区,所以外圈的内部传输率比内圈快。
6,缓冲区:单位为MB。有些人喜欢叫Cache。作用是平衡内部和外部的传输率。为了减少主机(内存)的等待时间,硬盘会把读取的数据先放入缓冲区,等全部读完或缓冲区填满后再以外部接口的速度快速向主机(内存)发送。随着技术发展,缓冲区在原本的基础上又增加了缓存的功能。缓存体现在3个方面:预读:磁盘“私自”扩大读取范围,在缓冲区向主机(内存)发送指定扇区数据(磁头已经读完指定扇区)后,接着读取相邻若干扇区并送入缓冲区,如果后面读取操作证号指向已经预读的区域,直接就可以从缓冲区读取而不需要再次磁头寻址,提高访问速度。写缓存:通常在写入操作时,先将数据写入缓冲区并发送到磁头,等磁头写入完毕后再报告主机写入完毕,主机才开始处理下一任务,如果写缓存被开启,那么数据写入缓冲区后即刻向主机报告写入完毕,让主机提前处理下一个数据,提高了效率。读缓存:读取过的数据暂时保存在缓冲区内,如果主机再次需要时可以直接从缓冲区调用,加快速度。(缓存有专门的控制器,有专门的算法,自然有不同的效率。不同容量的缓存算法不通用。)
1,转速与寻道时间:
很多人认为机械硬盘转速快寻道时间就越快,这个是常见的错误认识,事实上寻道速度根本和转速完全没关系,因为2者不是一个设备控制的。
看过上面解释的朋友应该发现,转速是由主轴马达控制的,而寻道很明显是由音圈马达控制,所谓寻道就是磁头臂径向运动的速度和控制。很多情况下我们可以看到5400转和7200转的硬盘寻道时间一样,而之所以高速硬盘寻道时间快,是厂商的有意设计,就像高配机器低内存那样让人觉得不平衡,厂商会给高速盘配备更好的元件也是理所当然。
2,转速与数据传输率:
厂商宣传和用户的理解都是,高转速意味着高数据传输率,但是这个并不完全正确。持续数据传输率取决于很多指标,不单单是转速。转速高,单位时间磁头划过的扇区多,自然传输率快,这个没错,但是前提要盘片密度相等,低速硬盘提高盘片密度一样可以提升数据传输率。5400转的高单碟容量硬盘传输率强过10000转的猛禽就是一个例子。只要单碟密度提升1倍,那么5400转和10000转比传输率就不会输。高转速的优势是平均潜伏期,因为转速是死的,在这种情况下5400转永远处于劣势。
3,真正的内部数据传输率:
硬盘传输率大家都懂,但是有个误区,拿Mbps为单位的最高内部传输率说事,这其实是某些厂商与所谓高手的误导,后果相当严重。由于内部传输率决定了硬盘的实际数据传输性能,是个非常重要的指标,很多用户也最关心这个指标,厂商就投其所好,在产品资料中公布了最大内部传输率,但是很多都是以Mbps为单位,不少用户会拿这个数值来预测硬盘性能。但是这个数值是不能单纯的以除以8来换算成MB/s的,因为这个数值是磁头处理2进制的0/1信号(bit)纯理论性能,而磁头处理信号很大部分并不是用户数据(很多重编码的辅助信息)。很多硬盘厂商把这个数值标的相当高,但是这个数值没有任何实际价值,给人假象而已。厂商心里很明白,他们"偷着乐"而已。
4,拿缓冲区容量和性能说事:
缓冲区容量越大越好吗?容量缓冲区对零散数据传输有优势,不见得。大缓冲区容量会带来很多新问题,比如忽然断电等情况,笔记本有电池会好点。而缓冲区对性能的影响体现在厂商的缓存管理技术上,每个厂商是不同的,不同缓冲区容量也不适用相同的算法。我们拿最新的WD 4KB扇区EAR盘来说吧,配备了64MB的缓冲区,相对32MB的EADS来的快吗?不一定,你知道这个多出来的32MB是用来做啥的吗?相当大一部分用来做4KB和512B的模拟转换开销,映射表。厂商不是*,增加成本的做法他们才不做。当然既然给多缓存了,广告还是要打的。缓存管理算法比缓存容量更重要,命中率才是关键,光有容量没命中率只会带来安全隐患。
接下来我们来看看SSD吧,SSD里面的介质是闪存,一般是用的NAND。SSD的优势体现在极低平均访问时间,SSD没有寻道(里面没磁头),没潜伏期(没盘片)。由这里可以看出,随机性能上SSD可以说是绝对秒杀机械硬盘,没有任何的机械硬盘可以和SSD比较。差距是非常巨大的,50~100倍以上。
SSD的控制器也比机械盘的控制器复杂的多,这样形容的话可能会明白点:我们知道一个34nm的Intel NAND MLC Die的容量为4GB,如果我手头有个80G的X25-M G2,那么就是20个Die组成的(10个闪存颗粒,每个颗粒里2个Die封装),因为Intel主控是10通道的,如果我们把这块SSD理解成一个10块机械盘的RAID 0会如何哪?U盘为啥慢,因为主控一般是单通或者双通的,而且NAND颗粒也差点。而SSD快就是因为主控强,不看接口限制的话10个U盘RAID 0速度也很可观哦。"10盘"RAID 0带来的就是传输率的暴增,再加上SSD独有的极低平均访问时间,如何能不快?SSD的主控要管理10个”盘“,而机械盘主控只要管好1个”盘“就行了,复杂度当然会完全不同了。再加上NAND的物理特性,-读写/擦单位不等,坏块管理,映射表管理(OS LBA和SSD 物理page),缓存算法等等..可以想象。朋友,不看外部接口(SATA),你买块SSD就等于是买了块阵列卡加"盘"啊。
以我用电脑的经验来看,WINXP SP3系统对内存的要求是768MB可以基本流畅,明显减少了磁盘虚拟缓存负担,大于768MB后瓶颈转向磁盘系统,再提高内存也无济于事,只有提高磁盘速度才能感觉到速度提升。对于磁盘系统来说,50MB/s和100MB/s的传输率在XP下是完全2个感觉,如果大于150MB/s,这个感觉就又小下来了。早期的磁盘单盘很难达到100MB/s的传输率,普遍在60MB/s附近,所以很多朋友组了RAID 0来提高传输率破100MB/s,这样会感觉性能的提升。相对的,如今100MB/s传输率的盘已经烂大街了,再组RAID 0到200MB/s对XP的提升已经不明显了,也就显得无意义了,除非你是”视频复制党“,天天没事来回拷视频。以上是XP的感想。
至于Vista这个系统,烂就烂在磁盘性能上,没事都要拖磁盘后腿(后台做乱七八糟的Search Indexing,Fetch等等),用户就会感觉磁盘灯永远不太平(熄不掉),这里就有个问题就被扩大了,哪个问题?平均访问时间。对了,相信组过RAID 阵列的用户会感觉到Vista系统明显流畅很多,单盘的话总是有这有那的不舒服(即使你的盘传输率再高)。(优化到极限的那种系统不算,啥都关了自然快了)特别是加了外置阵列卡(卡上有缓存),或者开了南桥回写的。(主板会用内存做缓存,比如Intel的RST驱动,会用8~16MB内存做缓存,所以很多用户在开了卷回写缓存的Intel阵列上跑HDtune会看到突发传输率XXXXMB/s的速度,这是因为Hdtune软件测的是目标传输率,爆发率自然是发生在内存上的)这是为啥哪?机械硬盘同一时间只能一个磁头读/写数据,虽然多盘片的硬盘每张盘片会有1到2个磁头,但是同一时间只有1个磁头是读/写的。那么当Vista在后台请求那些零碎文件的时候,硬盘就会来回的挪动磁头去处理这些碎小文件,而当用户要去读/写某些文件的时候,2者就会抢着轮流让磁头处理,自然传输率不稳定了。(很多用户应该有这个经历,单块硬盘不同分区之间传输文件速度很慢,如果是大文件的基本是一半速度,如果是小文件就会很悲剧,而如果是两块硬盘或者是RAID阵列,速度就会明显快很多)而RAID阵列下,每个磁盘都有1个磁头可以同时读/写,自然会减轻负担。所以对Vista这类系统来说,平均存取时间比传输率对系统的流畅度来的更重要。如果是SSD哪?情况自然好很多了,前面不是说了SSD就像是一套"磁盘阵列系统"么,还带”卡“。
这个是我的1块ST 160G的盘,型号ST160827AS。单跑64KB速度。
我跑2个任务,各跑64KB,2个位置跨度是10%的C盘29G(也就是2.9G)
跑2个任务,各跑64KB,2个位置跨度是90%,从160G的头到接近内圈90%初,(160GX 90%= 144G)跨度。
我们发觉跨度越大,速度越慢,到了90%跨度后,这个速度已经很离谱了,因为磁头来回寻道的关系,时间都浪费了。这就是机械盘单磁头存取和平均存取时间慢的限制,多任务性能肯定低下了,像Vista这类系统,能快起来吗?磁盘对拷机器卡的同志们,看到这个图还认为不应该“卡”吗?
Win7这个系统是在Vista基础上开发而来,不得不说进步不少,后台操作明显比Vista轻很多,这样对磁盘负担减轻不少。但是SSD的优势还是显得很明显,由于操作系统比XP来的”臃肿“,开机启动项,驱动,服务都比较多,内存占用也很大,开机时需要把更多的数据读进内存,一块高传输率的磁盘是必要的,当传输率达到一定程度后,平均存取时间的要求就来了,SSD有着传输率和平均存取时间的双方面优势,开机显得快自然很正常。在多核CPU和大内存的带领下,多任务变成家常便饭,势必带来多请求,对机械盘的同一时间单磁头读/写是个非常沉重的打击,RAID系统或者SSD在这个时候优势明显,SSD多开/秒开程序的速度相信都看过,这就是差距。所以在当今主流操作系统上,单块机械盘已经不可能完全发挥整个电脑的性能了,磁盘系统的瓶颈也就凸现出来。
为啥会有这个问题?呵呵,玩速度,就是折腾。咋样折腾都可以,只要体现出速度就成。比如CPU,显卡上大炮(液氮),显卡开管线,CPU开核,内存超频等等都是”玩“速度的表现。在磁盘系统上,所谓的”玩“无非体现在下面几种:个人用户拿RAM来虚拟磁盘,安装Cache软件,使用EWF系统,这些原本都是用来规避磁盘系统瓶颈的方式,但是很多用户都喜欢SHOW出来,这样就变成了玩了,我很难想象拿这类机器来工作,至少我还没这个胆量。而所谓的”用“速度,自然就是我们日常最基本的操作速度,自然加上少量的”优化“来降低那些无用的操作来提升平均磁盘能力也是必要的。SSD是个新事物,SSD是个无底洞,SSD的速度可以标的老高,只要堆(钱),你要多少速度就可以给你多少速度。但是这些都是量变,我们从机械盘到SSD已经有了质变了,这些量变又有啥意义哪?而且不管如何折腾,有一个速度是提不上去的,厂商也不会告诉你。哪个速度?随机读取QD1速度,这个速度是SSD速度的关键。用CDM做测试的朋友会发觉,不管啥SSD,4KB读取的速度永远在1xMB~3xMB/s之间徘徊,你永远见不到4xMB/s以上,这是硬性限制(缓存内存不算啊)。啥东西都要讲道理,数据也是,如果哪天你看到NAND这个数据变成1XXMB/s了,大哥,你看到火星来的产品了。NAND是不可能有这个速度的。为啥?因为NAND的读取延迟摆在那里,同一时间的请求数是固定的,相对的SLC会比MLC高点而已。堆出来的高端产品,数据很好看,厂商可以说几十万,几百万的IOPS,但是这些IOPS都是在某些条件下达成的,而且绝对不可能是QD1下。一样的,如果是内存,当前4KB的QD1要到2xxxMB/s不可能,大部分都在1000MB/s以下,因为内存的延迟就是那样,不管你再如何快,这是当前工艺的物理限制。我们日常操作会用到多少QD?这个是很多人会问的问题,我可以告诉你,平均不会超过4,大部分都在1和2之间。而厂商给出的数据大部分是QD32或者64的,不用到数据库服务器等请求多的应用,你这辈子用不到,你喜欢为你用不到的性能买单吗?起先,那些PCIE接口的SSD都是为企业级服务器设计的,这样堆出来的性能自然没错,而且用的是正确的地方,而如今,随着OCZ, Supertalent, Photofast 那些厂商推出PCIE接口的SSD,然后标称值都老高的数据来吸引用户,这些做法我感觉是非常”忽悠人“的,因为用户根本"用不到"这些性能,而会冲着这些高指标去买单。(我这里说的”用不到“不是指你不需要,而是你不可能用到这性能,因为要达到这个性能需要有很多条件,但是厂商会标up to XXXMB/s甚至XXXXMB/s来忽悠你,产品可以达到这个速度不代表在你的平台和应用上会有这个速度)。
ramdisk
OCZ Vertex 2 100GB
WD VelociRaptor 600GB
持续速度很不错,一到随机就悲剧了,大部分时间都浪费在寻道加潜伏期上去了(也就是说大部分时间磁头都没在要的数据上)
这个问题很难准确的回答,电子产品看RP相信大家都知道。如果我告诉你,SSD已经有30多年的历史了,你们可能会不相信,是的,1976年就有了。技术在进步,耐久度却越来越烂,为啥?因为越来越小,越来越精密,越来越便宜。一个产品从军用,工业用到企业用再沦为民用后,产品本身的定位已经发生质变,可以想象我们手上的SSD和军用产品的SSD是完全不同的。 军用产品不讲究绝对的高性能,而讲究高耐久/稳定/恶劣环境,价格也不是考虑范围。到了工业用的要的就剩下适合恶劣环境,企业用的只要高性能/稳定/耐久了,到了我们手里。。。啥都不要了,只要高性能和便宜就成,难道不是吗?MLC的出现不正是为了弥补SLC在价格上的弱势吗?要是人人用得起SLC,还要MLC做啥哪?容量不够我堆就成了。
从SSD的初衷来看,耐久度和寿命肯定是高过传统机械盘的,但是实际受到影响的地方太多了,可以想象,即使我有一块0.001%故障率的盘,但是我用100多个盘组成了个RAID 0阵列,那么这个故障率就会明显提高,甚至不如故障率0.1%的单盘了吧。SSD是由N个Die组成的,每个Die都有可能会坏,很多Die出厂内部就有坏块,所以SSD主控要有坏块管理机制。即使1个Die的故障率低,但是盘一多故障率也是很可观的。选择主控ECC能力强还是很必要的