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