前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >互联网时代下机械硬盘的发展史

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

作者头像
JavaEdge
发布2021-12-12 10:08:11
4310
发布2021-12-12 10:08:11
举报
文章被收录于专栏:JavaEdgeJavaEdge

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

拆解机械硬盘

机械硬盘的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个半圈,平均延时:

代码语言:javascript
复制
1s / 240 = 4.17ms

平均寻道时间(Average Seek Time)

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

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

代码语言:javascript
复制
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就变成:

代码语言:javascript
复制
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:

代码语言:javascript
复制
1s / (4.17ms + 9ms) = 75.9 IOPS

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

代码语言:javascript
复制
1s / (4.17ms + 9ms/4) = 155.8 IOPS

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

总结

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

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-12-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 拆解机械硬盘
    • 盘面(Disk Platter)
      • 磁头(Drive Head)
        • 悬臂(Actutor Arm)
          • 磁道
          • 扇区(Sector)
          • 柱面(Cylinder)
      • 读取数据
      • 一次硬盘的随机访问所需时间
        • 平均延时(Average Latency)
          • 平均寻道时间(Average Seek Time)
          • Partial Stroking:根据场景提升性能
          • 总结
          相关产品与服务
          对象存储
          对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档