2.1 存储设备的历史轨迹
1.穿孔卡
人们对“存储”的渴望在19世纪80年代就已经凸显出来了。这个时期,一位美国老爷爷Hollerith发明了基础的,利用穿孔卡片收集和整理数据的系统,并于1889年开发出一种复杂的电子排序和制表机。这复杂的电子排序和制表机机器包含一个穿孔装置、一个带有计数器的制表机和一个电控制排序工具箱,能够基于穿孔卡片上孔的位置来分组。这项技术随后被用于美国人口普查,使得原本需要耗时8年的美国人口普查缩短为仅仅1年。
20世纪的前10年,Hollerith发明了一种新的穿孔卡片,如图2-1所示。这种穿孔卡片上共有960个孔洞,以80列、每列12个的方式排列,这种排列方式使得数据只能记载960bits。这种卡片能够与一种更简单的键控穿孔、更高效的卡片分类机和制表机一起使用,在很多地方都得到了应用,甚至第一次世界大战期间的美国军队还使用了这种技术。
图2-1 穿孔卡片
1911年,Hollerith成立了计算机制表公司(Computing-Tabulating-Recording Company,CTR),这就是IBM的前身之一。
2.磁带
1950年以打孔记载数据的方式慢慢被盘式磁带取代。
当时,一盘磁带可以替代一万张穿孔卡片,所以当IBM将盘式磁带用于计算机存储时,受到了极大的欢迎。这种情况一直持续到了20世纪80年代,磁带被用于存储音乐和电影,这种用于存储电影的一圈一圈大轮子的盘式磁带成为了整整一代人的回忆。
在过去几十年里,磁带技术发展迅速。一卷现代磁带已经可以存储15TB数据,一个磁带库最多可以存储278PB(1PB=1024TB)数据。这些数据如果用CD光碟存储的话需要3.97亿张(一张普通CD光盘容量约为700MB)。
与其他存储设备相比,磁带的访问速度要慢很多。但是,作为存储媒介,磁带也有相当多的优点。例如,磁带更为节能,数据一旦被磁带记录,就会被放进磁带库里静静待着,不会消耗任何电能。此外,磁带的出错概率要比其他存储设备低4~5个量级。
磁带的这些优点让它在很多地方仍然发挥着不可忽视的作用,例如,2011年, Google曾因一个软件升级误删除4万个Gmail账户邮件信息。虽然这些被存储在硬盘中的数据被放在多个数据中心,但是还是丢失了。幸运的是,同样的数据还被存储在磁带中,这使Google可以从中恢复这些数据。这个事件告诉我们:Google仍在使用磁带。
之所以很多人会认为磁带已经消失,只是因为在消费产品中已经看不到它的身影了。事实上,磁带不但没有远去,还会有很长的生命力。每隔2~3年,磁带的容量就会增加一倍,IBM在2017年8月推出的新磁带可以存储近330TB的内容。
3.硬盘
令人惊讶的是,硬盘这个理念最先提出的时间要早于磁盘。1956年12月13日, IBM的Reynold B.Johnson认为可以外接更大的存储硬件来存储更多的数据,于是就提出了外接硬盘这个理念。这个时候的硬盘是超级巨大的一个一个挨在一起的圆形磁盘片,被放置在固定温度的空间里,相当于现在两个中等冰箱的大小,可以存储3.75MB的数据(见图2-2)。
图2-2 IBM最早推出的硬盘
从这个时候起,硬盘就和磁带技术相互补充、共同发展。硬盘与磁带使用了相同的物理技术,简单来说就是,在磁性材料薄膜中有许多很窄的轨道,磁性材料的磁性在两种极性之间转换。信息用二进制位编码,在轨道上的某一个特定点通过磁性转换与否来体现。
1980年,苹果最先引进个人计算机的概念,自带了内置硬盘,这一变化延续至今。计算机硬盘都是直接内置的,没有特殊需求并不需要外置额外的硬盘。
而普通的内置硬盘就演变成了我们现在熟悉的硬盘驱动器。硬盘驱动器主要由盘片、磁头、主轴和控制器组成,工作时,主轴马达会带动盘片转动,然后传动臂伸展磁头在盘片上进行数据读/写操作。所以硬盘本质上来说是一种机械装置。
· 盘片。
盘片是硬盘的主要组成部分,是硬盘存储数据的载体。盘片的好坏对硬盘的存取速度和存储容量影响巨大。盘片最初是用塑料做基片的,但塑料的硬度较低,容易变形,特别是在高速转动的情况下。现在盘片材料大多是特殊的金属材料,甚至硬度极高的特殊玻璃材料。盘片的上下两面是磁性材料,通过磁道和扇区来管理。
硬盘内部一般包括多个盘片,盘片的个数及单个盘片的容量直接决定了硬盘的总容量。硬盘的尺寸其实即盘片的直径,早期有8英寸、5英寸的硬盘,目前常见的是3.5英寸、2.5英寸、1.8英寸等,3.5英寸的硬盘主要用在台式机和服务器上,2.5英寸和1.8英寸的硬盘面向的对象是移动笔记本和移动硬盘。
· 主轴。
盘片的转动是靠主轴马达来带动的,硬盘的转速就是指主轴的转动速度,一般用每分钟转多少转来表示,即RPM消费级市场的硬盘转速一般为5400RPM和7200RPM;企业级市场的转速一般较高,可以达到10000RPM,甚至15000RPM,转速的快慢是硬盘性能的重要指标,因为转速越快,磁头定位数据的速度就越快,但转速的提升带来的一个问题就是功耗的增加。
· 磁头。
磁盘中的每个盘片都有两个磁头,上下面各有一个。写数据的时候,磁头改变盘片上磁性材料的磁极;读数据的时候,磁头去检查盘片表面的磁极。
· 控制器。
控制器一般是一块印刷电路板,位于硬盘的底部,包括主控芯片、控制电路、内存等。控制器控制着主轴马达的电源和转速,也管理着硬盘和主机之间的数据传输。它接受并解释计算机发来的指令,然后向硬盘发出各种控制信号。
下面来介绍一下硬盘性能。
硬盘的两个重要性能参数是IOps和吞吐量。IOps是指每秒能进行多少次的I/O操作。首先,什么是一次I/O?在系统路径的每个层次上都有I/O的概念,如果我们把整个系统看作一个一个按层分布的模块,每个模块之间都有各自的接口,那么接口之间的指令和数据的交互即可看作一次I/O。例如,从应用程序到操作系统请求:读取显示C:\file.txt文件内容,操作系统在一系列底层的操作完成后给应用程序返回一个成功的信号,这次I/O就算完成了。应用程序到操作系统的一次I/O发生后,操作系统到硬盘驱动程序会触发多次I/O,“读取从某某位置开始的多少扇区”“接着再次读取从某某位置开始的多少扇区”,这若干次的I/O对应了上层的一次I/O。同样道理,I/O请求会一层层下沉分解,直到主机上的硬盘控制器向硬盘发送特定接口协议的指令和数据,如ATA、SCSI、NVMe等协议。这是最细粒度的I/O,也是通常意义上的一次I/O请求。
IOps其实直接对应的就是完成一次I/O所需要的时间,即I/O服务响应时间。对硬盘来说主要包括3部分:磁头寻道时间、盘片旋转时间、数据传输时间。
磁头寻道时间,是指磁头从盘片的直径方向移动到正确磁道的时间,一般硬盘的磁头寻道平均时间大概在3~15ms。
移动到正确的磁道之后,盘片需要通过旋转使得目标扇区对应到磁头的位置,这个时间即盘片旋转时间。可以想象一下,这时最糟糕的情况是旋转一圈,最好的情况可能不需要旋转,所以取平均值,即以旋转半圈的情况来计算旋转时间。之前提到过旋转时间的直接影响因素就是硬盘的转速,假设硬盘转速为10000RPM,那么旋转一圈的时间是1/10000=0.0001min,即6ms,那么旋转时间为3ms。
吞吐量,是指单位时间内硬盘能够传输到主机硬盘控制器上的数据量。对于读操作来说,数据先从盘片被读取到硬盘内部的缓冲区,然后通过接口被传输到主机硬盘控制器。同样对于写操作来说,数据先通过硬盘控制器接口被传输到硬盘内部的缓冲区,然后通过磁头被写入盘片。可以理解为数据传输时间是除寻道和旋转时间以外所有的数据搬运路径上的时间和,这段时间主要为磁头真正在盘片上读/写数据的时间和接口上的传输时间。真正读/写数据的时间和盘片的旋转速度、磁道记录密度有关系,接口传输时间和采用的接口类型有关。通常,每秒10000转的SCSI硬盘的磁盘读/写速度大概可以达到1000MB/s,而对于接口传输速率来说,由于主流的SAS、SATA接口传输速率不断提升的数据传输时间通常远小于前两部分消耗的时间和,所以对于硬盘来说数据传输时间在通常情况下可以被忽略。
4.磁盘(软盘)
1971年,3.5英寸软盘的前身问世了,只不过当时的尺寸比较大。
初代软盘大小为32英寸,后因为携带不便改成了8英寸,这项改进让IBM的Alan Shugar名声大噪,后期他离开IBM创办了希捷。
20世纪80年代,日本的索尼首先研发出了3.5英寸软盘。相比之前更小、存储量更大。
在鼎盛时期,软盘被人们认为是以后计算机发展的必然趋势,全球有多达50亿片软盘正在使用,可是,苹果的第一款iMac就取消了对软盘的依赖,转而使用了光盘驱动器。
5.CD/DVD
20世纪80年代,CD开始流行。CD出现的时间比早期的软盘要早很多,据资料记载,20世纪60年代CD就已经被开发出来作为存储工具了,只是到了20世纪80—90年代才开始流行,变成了主要的存储工具。
而DVD则是在1995年开始流行的,这可能与当时DVD播放机的流行有关。DVD存储容量比CD更大,达到了几GB以上。
6.U盘/移动硬盘
随着USB等的出现,最初那个巨大的、移不动的外置存储变成了后来的移动硬盘。在1994年,康柏、迪吉多(成立于1957年的一家美国老牌计算机公司,发明了Alpha微处理器,后于1998年被康柏收购)、IBM、英特尔、微软、NEC和北电网络一起研发出了两种可移动的存储设备形态,即U盘和移动硬盘。
7.固态硬盘
传统的硬盘驱动器是由盘片、磁头、主轴、控制器组成的机械装置,而固态硬盘则是由闪存介质、控制芯片组成的电子芯片设备,两者有着完全不同的存储原理和控制方式。
固态硬盘是在闪存的基础上加入控制电路,使数据被读取后还能存留,在最终擦除时,通过放电使数据不再保留。硬盘驱动器包括可旋转的磁盘和可移动的读/写磁头,而固态硬盘使用微型芯片,并没有可以移动的部件。所以,和硬盘驱动器相比,固态硬盘的抗震性更强、噪音更低、读取时间和延迟时间更短。固态硬盘和硬盘驱动器有相同的接口,因此在大多数应用程序中,固态硬盘可以很容易地取代硬盘驱动器。
早期的固态硬盘也有采用RAM作为介质的产品,如1976年就出现了第一款使用RAM的固态硬盘,RAM的优点是可以随机寻址,且速度比较快,但是因为RAM的特性,固态硬盘掉电数据就消失了,并且RAM价格比较昂贵,所以很长一段时间内这种固态硬盘都只是用在一些特殊场景的小众产品。
直到20世纪90年代,一些厂商才开始尝试使用Flash作为固态硬盘的介质,Flash使用一种叫作Floating Gate Transistor的晶体管来保存数据,每个这样的晶体管叫作一个单元(Cell),这种晶体管比普通的MOSFET多了一个Floating Gate,悬浮在中间,能够保存电荷。存储1bit数据的单元为SLC(Single Level Cell),存储2bit数据的单元为MLC(Multiple Level Cell),同理存储3bit数据的单元为TLC(Triple Level Cell),现在已经有了QLC,即一个单元可存储4bit的数据。如图2-3所示, SLC、MLC与TLC在同样面积的存储芯片上,存储容量依次增加,但是与此同时,又由于存储单元划分粒度的增加,在读/写数据的时候控制需要更加精细,这使得其擦写时间性能方面是依次减少的。当然随着技术的不断完善,TLC甚至是QLC必将成为业界主流。
图2-3 SLC、MLC与TLC