物理构造

一块机械硬盘由盘面磁头悬臂三个部件组成

盘面

  1. 盘面(Disk Platter)是我们实际存储数据的盘片
  2. 盘面本身通常是用玻璃或者陶瓷这样的材质去做成光滑盘片,然后在盘面上有一层磁性的涂层,数据就存储在磁性的涂层上
  3. 盘面中间有一个受电机控制的转轴(控制盘面去旋转),转速:RPM(Rotations Per Minute

磁头

  1. 通过磁头(Drive Head),从盘面上读取数据,然后再通过电路信号传输给控制电路接口,再到总线
  2. 通常,一个盘面上会有两个磁头,分别是盘面的正反面,盘面在正反面都有对应的磁性涂层来存储数据
    • 一块硬盘不会只有一个盘面,而且上下堆叠了很多个盘面,各个盘面之间是平行的,每个盘面的正反两面都有对应的磁头

悬臂

  1. 悬臂(Actutor Arm)链接在磁头上,并且在一定范围内去把磁头定位到盘面的某个特定磁道(Track)上
  2. 一个盘面通常是圆形的,由很多同心圆组成,每个同心圆都是一个磁道,每个磁道都有编号

随机读写

  1. 一个磁道,会分成多个扇区(Sector),上下平行的盘面的相同扇区,组成一个柱面(Cylinder)
  2. 数据读取的步骤
    • 盘面旋转到某个位置,在这个位置,悬臂可以定位到整个盘面的某个子区间(称为几何区间
    • 悬臂移动特定磁道的特定扇区(在几何扇区里面,找到实际的扇区)
    • 找到实际的扇区后,磁头落下,读取正对着扇区的数据
  3. HDD的随机IOPS
    • 平均延时(Average Latency):盘面旋转,把几何扇面对准悬臂的时间,和转速相关
      • 随机情况下,平均找到一个几何扇区,需要旋转半圈盘面
      • 7200RPM的硬盘,一秒旋转240个半圈,即平均延时为1s/240 ≈ 4.17ms
    • 平均寻道时间(Average Seek Time):在盘面旋转之后,悬臂定位到扇区的时间
      • 一般在4~10ms
    • 因此,随机在整个硬盘上找一个数据,需要8~14ms
      • HDD是机械结构的,只有一个电机转轴,也只有一个悬臂,没有办法并行地去定位或者读取数据
      • 对于7200RPM的HDD,随机的IOPS1s/8ms=125或者1s/14ms≈70

顺序读写

  1. 顺序存放的数据,尽可能地放在同一个柱面
  2. 这样,只需要旋转一次盘面,进行一次寻道,就可以去写入或者读取同一个垂直空间上的多个盘面的数据
  3. 如果一个柱面上的数据不够,也不要去动悬臂(),而是通过电机转动盘面,这样就可以顺序读完一个磁道上的所有数据
  4. HDD顺序读写的吞吐率能达到200MB/s

Partial Stroking

  1. HDD的随机IOPS只有100,很难满足现代互联网高并发的请求
  2. 访问一次数据的时间 ≈ 平均延时 + 平均寻道时间,考虑缩短其中一个
  3. 一般情况下,HDD的平均寻道时间都比平均延时,先考虑缩短平均寻道时间
    • 放弃寻道,把所有数据都放在一个磁道上,IOPS=1s/4ms=250
    • 如果只用一个磁道,能存储的数据非常有限,因此在实践中,通常只用1/2或者1/4的磁道
    • 对于一块7200RPM的HDD
      • 平均延时为4.17ms,平均寻道时间为9ms,原本的IOPS=1s/(4.17ms+9ms)≈75.9
    • 如果只用其中1/4的磁道,IOPS=1s/(4.17ms+9ms/4)≈155.8
      • IOPS提升了一倍,和15000RPM的HDD性能差不多
      • 硬盘能利用的空间为原来的1/4,但价格却没有15000RPM的HDD的1/4
      • 这样通过软件去格式化硬盘,只保留部分磁道让系统可用的情况,可以大大提升硬件的性价比

参考资料

深入浅出计算机组成原理