互联网时代下机械硬盘的发展史

x33g5p2x  于2021-12-12 转载在 其他  
字(2.6k)|赞(0)|评价(0)|浏览(244)

无论是作为个人电脑的数据盘,还是在数据中心里面用作海量数据的存储,机械硬盘仍然在被大量使用。随着成本下降,机械硬盘还替代掉了很多传统的存储设备,如以前常用来备份冷数据的磁带。

拆解机械硬盘

机械硬盘的IOPS大概只能做到每秒100次左右。机械硬盘拆开,自然知道为什么它的IOPS是100左右了。

硬盘的构造,里面有接口,有对应的控制电路版,以及实际的I/O设备(也就是我们的机械硬盘)。

一块机械硬盘是由盘面、磁头和悬臂三个部件组成的。

盘面(Disk Platter)

实际存储数据的盘片。
本身通常是用的铝、玻璃或者陶瓷这样的材质做成的光滑盘片。有层磁性涂层。数据就存储在这个磁性的涂层上。
中间有个受电机控制的转轴。控制盘面去旋转。

硬盘的转速5400转的、7200转,指的就是盘面中间电机控制的转轴的旋转速度,英文单位叫RPM,也就是每分钟的旋转圈数(Rotations Per Minute)。所谓7200转,其实更准确地说是7200RPM,指的就是一旦电脑开机供电之后,我们的硬盘就可以一直做到每分钟转上7200圈。如果折算到每一秒钟,就是120圈。

磁头(Drive Head)

数据并不能直接从盘面传输到总线上,而是通过磁头,从盘面上读取到,然后再通过电路信号传输给控制电路、接口,再到总线。

一个盘面有两个磁头,分别在盘面的正反面。盘面在正反两面都有对应的磁性涂层来存储数据,而且一块硬盘也不是只有一个盘面,而是上下堆叠了很多个盘面,各个盘面之间是平行的。每个盘面的正反两面都有对应的磁头。

悬臂(Actutor Arm)

悬臂链接在磁头上,并且在一定范围内会去把磁头定位到盘面的某个特定的磁道(Track)。

磁道

一个盘面通常圆形,由很多同心圆,每个“甜甜圈”就是个磁道。每个磁道都有自己的编号。
悬臂只是控制到底读最里面那个“甜甜圈”,还是最外面的“甜甜圈”数据。

扇区(Sector)

一个磁道,会分成一个个扇区。

柱面(Cylinder)

上下平行的一个个盘面的相同扇区叫一个柱面。

读取数据

两个步骤:

  • 把盘面旋转到某个位置
    在这个位置,悬臂可定位到整个盘面的某个子区间。该子区间像块披萨饼,叫几何扇区(Geometrical Sector),即“几何位置上”,所有这些扇区都可以被悬臂访问到。
  • 把悬臂移动到特定磁道的特定扇区,即在这个“几何扇区”里,找到实际扇区。找到后,磁头会落下,即可读取到正对着扇区的数据。

一次硬盘的随机访问所需时间

平均延时(Average Latency)

盘面旋转,把几何扇区对准悬臂位置的时间。
和机械硬盘转速相关。随机情况下,平均找到一个几何扇区,需旋转半圈盘面。
7200r硬盘,1s可旋转240个半圈,平均延时:

1s / 240 = 4.17ms

平均寻道时间(Average Seek Time)

盘面选转之后,我们的悬臂定位到扇区的的时间。我们现在用的HDD硬盘的平均寻道时间一般在4-10ms。

若随机在硬盘找个数据,需 8~14 ms。硬盘只有一个电机转轴,也只有一个悬臂,所以无法并行定位或读数据。那一块7200r硬盘,1s随机的I/O访问次数就是:

1s / 8 ms = 125 IOPS
或
1s / 14ms = 70 IOPS

顺序存放的数据,尽可能存放在同一柱面。这就只需旋转一次盘面,进行一次寻道,就可写或读,同一个垂直空间上的多个盘面的数据。
若一个柱面上的数据不够,也不要去动悬臂,而是通过电机转动盘面,即可顺序读完一个磁道上的所有数据。所以,对HDD的顺序数据读写,吞吐率还不错,约200MB/s。

Partial Stroking:根据场景提升性能

100 IOPS,难以满足现在互联网海量高并发请求。所以,DB都会将数据存在SSD。
但20年前,没有现在这么便宜的SSD硬盘。DB数据只能存放在HDD。

即便如今数据中心用的HDD,也是7200r,要更快随机访问速度,会选择SSD。但当时,SSD非常贵,还没能商业化。硬盘厂商们在不断研发转得更快的硬盘。数据中心往往用10000转,乃至15000转的硬盘。
直到2010年,SSD开始逐步进入市场,西数还在尝试研发20000转硬盘。转速更高、寻道时间更短的机械硬盘,才能满足实际DB需求。

但10000r,乃至15000r硬盘也更贵,想节约成本,提高性价比,就得想它法。Google早年用家用PC乃至二手硬件,通过软件层面设计解决了可靠性和性能。那有办法提高机械硬盘的IOPS吗?这就是Partial Stroking或者Short Stroking,“缩短行程”技术。
既然访问一次数据的时间:“平均延时+寻道时间”,只要能缩短其一,就能提升IOPS!

一般 硬 盘 的 寻 道 时 间 > 平 均 延 时 硬盘的寻道时间 > 平均延时硬盘的寻道时间>平均延时,如何缩短平均寻道时间?
最极端的:不需要寻道,即将所有数据都放在一个磁道。比如始终把磁头放在最外道磁道。寻道时间就基本为0,访问时间就只剩平均延时。
IOPS就变成:

1s / 4ms = 250 IOPS

但只用一个磁道,能存的数据就很有限了!可能我们还不如把这些数据直接都放到内存呢!
所以,实践可只用1 / 2 1/21/2或1 / 4 1/41/4磁道,即最外面1/4或1/2的磁道。
如此,硬盘可使用的容量可能变成1/2或1/4。但寻道时间也变成1/4或1/2,因为悬臂需移动的“行程”也变成原来1/2或者1/4,IOPS大幅提升!

比如7200r硬盘,正常平均延时4.17ms,寻道时间9ms。原本IOPS:

1s / (4.17ms + 9ms) = 75.9 IOPS

若只用其中1/4磁道,则IOPS变成:

1s / (4.17ms + 9ms/4) = 155.8 IOPS

IOPS提升一倍,和块15000r硬盘性能差不多。但这时硬盘可用空间也只有原1/4。所以,这样通过软件去格式化硬盘,只保留部分磁道让系统可用的情况,可大大提升硬件性价比。

总结

机械硬盘的硬件主要由:盘面、磁头和悬臂组成。
数据在盘面上的位置,可通过磁道、扇区和柱面来定位。
实际的一次对于硬盘的访问,需要把盘面旋转到某一个“几何扇区”,对准悬臂的位置。然后,悬臂通过寻道,把磁头放到我们实际要读取的扇区上。

受制于机械硬盘的结构,对随机数据的访问速度,就要包含旋转盘面的平均延时和移动悬臂的寻道时间。通过这俩时间,能计得机械硬盘IOPS。

7200转机械硬盘的IOPS,只能做到100。早期没有SSD,所以想出Partial Stroking这个浪费存储空间,但能缩短寻道时间以提高硬盘IOPS的方案。

相关文章