计算机组成 -- HDD
物理构造
一块机械硬盘由盘面、磁头、悬臂三个部件组成
盘面
- 盘面(Disk Platter)是我们实际存储数据的盘片
- 盘面本身通常是用铝、玻璃或者陶瓷这样的材质去做成光滑盘片,然后在盘面上有一层磁性的涂层,数据就存储在磁性的涂层上
- 盘面中间有一个受电机控制的转轴(控制盘面去旋转),转速:RPM(Rotations Per Minute)
磁头
- 通过磁头(Drive Head),从盘面上读取数据,然后再通过电路信号传输给控制电路和接口,再到总线上
- 通常,一个盘面上会有两个磁头,分别是盘面的正反面,盘面在正反面都有对应的磁性涂层来存储数据
- 一块硬盘不会只有一个盘面,而且上下堆叠了很多个盘面,各个盘面之间是平行的,每个盘面的正反两面都有对应的磁头
悬臂
- 悬臂(Actutor Arm)链接在磁头上,并且在一定范围内去把磁头定位到盘面的某个特定磁道(Track)上
- 一个盘面通常是圆形的,由很多同心圆组成,每个同心圆都是一个磁道,每个磁道都有编号
随机读写
- 一个磁道,会分成多个扇区(Sector),上下平行的盘面的相同扇区,组成一个柱面(Cylinder)
- 数据读取的步骤
- 把盘面旋转到某个位置,在这个位置,悬臂可以定位到整个盘面的某个子区间(称为几何区间)
- 把悬臂移动到特定磁道的特定扇区(在几何扇区里面,找到实际的扇区)
- 找到实际的扇区后,磁头落下,读取正对着扇区的数据
- HDD的随机IOPS
- 平均延时(Average Latency):盘面旋转,把几何扇面对准悬臂的时间,和转速相关
- 随机情况下,平均找到一个几何扇区,需要旋转半圈盘面
- 7200RPM的硬盘,一秒旋转240个半圈,即平均延时为1s/240 ≈ 4.17ms
- 平均寻道时间(Average Seek Time):在盘面旋转之后,悬臂定位到扇区的时间
- 一般在4~10ms
- 因此,随机在整个硬盘上找一个数据,需要8~14ms
- HDD是机械结构的,只有一个电机转轴,也只有一个悬臂,没有办法并行地去定位或者读取数据
- 对于7200RPM的HDD,随机的IOPS为1s/8ms=125或者1s/14ms≈70
- 平均延时(Average Latency):盘面旋转,把几何扇面对准悬臂的时间,和转速相关
顺序读写
- 把顺序存放的数据,尽可能地放在同一个柱面上
- 这样,只需要旋转一次盘面,进行一次寻道,就可以去写入或者读取同一个垂直空间上的多个盘面的数据
- 如果一个柱面上的数据不够,也不要去动悬臂(慢),而是通过电机转动盘面,这样就可以顺序读完一个磁道上的所有数据
- HDD顺序读写的吞吐率能达到200MB/s
Partial Stroking
- HDD的随机IOPS只有100,很难满足现代互联网高并发的请求
- 访问一次数据的时间 ≈ 平均延时 + 平均寻道时间,考虑缩短其中一个
- 一般情况下,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
- 这样通过软件去格式化硬盘,只保留部分磁道让系统可用的情况,可以大大提升硬件的性价比
参考资料
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.