前言

今天,发现自己原来已经很久写Blog了,惭愧……这段时间看了一些关于硬盘的东东,顺便整理一下。

园子里的牛们对WEB应用,LINQ等等肯定比较了解的,但硬盘这玩意儿,大家就未必关心了。做企业级数据库应用的人都会清楚,磁盘I/O对于数据库性能的影响是致命的,所以经常会看到企业级的数据库后面都带一个几百万RMB的盘柜,鉴于硬盘的重要性,程序员实在很有必要了解这东西。

一.硬盘分类

首先想先说说硬盘的分类,硬盘分类和硬盘发展史息息相关,在不同时期,主流硬盘的种类各有不同,而划分硬盘种类的标准有很多,其中最常见的是根据硬盘“接口类型”进行划分。平常我们经常说“SATA硬盘”和“SCSI硬盘”,就是以此标准分类的。下表列举了一些曾经主流的硬盘类型(接口类型)。

all_kind_of_disk

(1)ST-506/412和ESDI在九十年代后就基本被淘汰了,ST-506/412是早期希捷开发的一种硬盘接口,早期IBM PC/XT和PC/AT机器就使用这种硬盘。而ESDI是迈拓在1983开发的硬件接口,但由于成本过高,在后来与IDE的较量中败下阵来,最终被淘汰。

(2)IDE(Integrated Drive Electronics),也叫ATA(Advanced Technology Attachment)/PATA,ATA是最早的IDE标准的正式名称。对比之前的其他接口,IDE将控制器电路就驻留在驱动器中,不再需要单独的适配器卡。

在IDE(ATA)家族中,有7个不同的标准:ATA-1~ATA-7(都属于“并行ATA”标准)。都如果严格来算,只有ATA-1能称之为IDE,因为ATA-1之后版本,我们都称之为EIDE(Enhanced IDE/Fast ATA,IDE加强版,呵呵),但实际生活中,我们还是统称它们为IDE(ATA)。在2003年初,曾经风头一时无两的IDE(ATA)开始逐渐被Serial ATA替代,至今,在市场上已经很难找到“并行的ATA硬盘”了。

(3)Serial ATA(Serial Advanced Technology Attachment,串行ATA,简称SATA),是英特尔公司在2000年提出的硬件接口标准,2001年,几大硬盘生产商正式确立Serial ATA 1.0规范,至此,SATA正式登上历史的大舞台。

对比之前的并行ATA,SATA的优势在于:电力消耗降低,发热量小,支持热插拔 ,传输速度快......

而SATA家族,也分了N个不同标准,而其中的SATA 2.0就是现役主流的硬盘类型之一。我的笔记本硬盘就是SATA2.0接口:>

SATA硬盘实例图:

sata2.0

(4)SCSI(Small Computer System Interface),SCSI其实不是什么玩意儿,该接口早在1986年就已经出现,那时的标准还是SCSI1.0。而现役主流的SCSI硬盘一般采用第三代的Ultra 320/640标准。

从上图我们看到,虽然SCSI Ultra 320的外部传输速率理论值和SATA 2.0差不多,但实际上,SCSI硬盘的整体性能要比SATA要好(硬盘性能不能单看外部传输速率),于其性能好,因此服务器上通常采用此类硬盘产品,但同时它的价格也不菲,所以在普通PC上几乎不常看到SCSI的踪影。

SCSI硬盘实例图:

SCSI-3

(5)其他硬盘接口

其实USB也是标准的硬盘接口之一,自从1998年,WIN98支持USB之后,USB开始逐渐流行。但由于USB传输速率比较低,所以很少在PC机看到单用USB硬盘。

二.SCSI VS SATA

(1)总体性能上,SCSI一般能比SATA快上2倍以上。

(2)硬盘转数上,SATA一般是7200~10000rpm,而SCSI一般是10000~15000rpm。

(3)价钱上,每GB容量的价格,SCSI是SATA的4倍以上,真要命...

三.硬盘的组成

disk_struct

可以说,硬盘主要由以下几部分组成:接口(数据接口,电源接口),盘片,磁头,电机主轴,其他(如:集成电路……)。

(1)接口

数据接口,即俗称:硬盘接口,上面的“硬盘分类”已经说的比较清楚,这里就不罗嗦了。而电源接口没什么好说的:>

(2)盘片

我们先来看看盘片的历史:

disk_disk

自从2000年IBM“玻璃材料”盘片的硬盘面世后,现在硬盘一般都采用这种更高效,低造价的技术了。

(3)磁头

如果问“硬盘容量和硬盘的哪部分有关系”,估计不少人回答“盘片的数量”。嘿嘿,如果你的答案也是这样,你可能忽略“磁头”的作用了。其实,磁头技术非常重要,它和单张盘片的容量直接挂钩。我们知道,盘片上磁性物质存储着我们的数据,硬盘通过“磁头”感应盘片上“磁性物质”读/写数据,所谓“磁头技术”指的就是磁头读取盘片磁性物质的技术。为什么说“磁头技术”会和单片磁碟的容量挂钩?试想下,如果磁头的灵敏度高,那么单位面积上可存储的数据量自然就多了!

在磁头技术历史上,IBM可谓功不可没,来看看磁头的发展史:   

disk_readhead

想想97年在广州买电脑配的还是1G硬盘,可到2003年,主流硬盘一般都50~100G了,呵呵,这就是“磁头技术”革命带来的质的飞跃:>

(4)电机主轴

“电机主轴”这词可能大家不熟悉,但如果说“硬盘转数”相信大家应该都了解了,对,“电机主轴”决定着“硬盘转数”!

“电机主轴”的任务是带动盘片高速旋转并产生浮力,使磁头飘浮在盘片上方,然后把磁头带到目标扇区上方,让其进行数据读/写!“电机主轴”转速越快,磁头等待读/写时间也就越短,所以它在很大程度上决定了硬盘性能!理论上说,“电机主轴”转速越快越好,但实际上,转速越快发热量,振动和噪音都会随之增大,这些对整个硬盘都非常不利。

早期的硬盘,由于电机的限制,转速一般只有4000rpm左右,随着电机技术革新,后来的IDE硬盘转速达到5400rpm,而现在主流硬盘转速一般是7200rpm,高端产品则一般是10000~15000rpm(始终未能超过15000rpm)。虽然电机技术一直发展,但相对“盘片技术”和“磁头技术”,“电机技术”方面的发展算是比较慢的了(10年前和现在的差别不大)。

四.硬盘性能指标

(1)平均寻道时间(Average seek time)

平均寻道时间是指硬盘的磁头从初始位置移动到盘面指定磁道所需的时间。平均寻道时间是影响硬盘读写效率的最重要指标。平均寻道时间越小硬盘的性能越高。而平均寻道时间实际上是由转速、单碟容量等多个因素综合决定的一个参数。一般来说,硬盘的转速越高,其平均寻道时间就越低;单碟容量越大,其平均寻道时间就越低。

除了“平均寻道时间”外,还有概念我们需要了解下,分别是“平均等待时间”和“平均访问时间”。

“平均等待时间”,寻道完成后,要读取的数据块可能还没有转过来,等待这个数据块的时间就是“平均等待时间”。由于现在硬盘转速都比较快,所以这个相对于“平均寻道时间”一般要小得多。

“平均访问时间”是指从硬盘收到访问命令,到完成所有操作并返回最终结果所花费的时间。它是衡量硬盘整体读写效率的标准。

平均访问时间 = 平均寻道时间 +  平均等待时间 +  电子信号消耗时间。由于“寻道”和“等待”属于机械操作,和光速的电子信号相比之下,电子信号消耗时间完全可以忽略不计!所以,平均访问时间 = 平均寻道时间 +  平均等待时间。而“平均寻道时间”占据了绝大部分的“平均访问时间”!这就是为什么平均寻道时间是硬盘读写效率最重要指标的原因!这也是为什么我们的磁盘定时要做下“磁盘碎片整理”的原因,因为分散的碎片会引起较长的“平均寻道时间”。

(2)最大内部数据传输率(internal data transfer rate)

指磁头至硬盘缓存间的最大数据传输率,一般取决于硬盘的盘片转速和盘片数据线密度。目前大多数家用硬盘的内部传输率在60MB/s~90MB/s,内部数据传输率才是系统真正的瓶颈(“最大内部数据传输率”比“最大外部传输速率”要小很多,所以不要迷恋“最大外部传输速率”,它只是个传说),硬盘的转速相同时,单碟容量大的内部传输率高;在单碟容量相同时,转速高的硬盘的内部传输率高。

(3)缓存

缓存确实是个好东东!为什么这么说?先看看相关的工作原理:硬盘读取完指定扇区的数据之后、接到系统的下一条指令之前,磁头接着读取相邻的若干扇区的数据并存入缓存中。如果系统接下来所需的数据正好就是相邻扇区的数据,那么便可以直接从缓存中读取而不用磁头再寻址(缓存命中),从而极大提高数据访问速度。所以,为什么硬盘的缓存大有好处?就是这个原因,并且这也涉及到刚才说的“磁盘碎片整理”的问题。