一篇文章弄清磁盘的里里外外及访问特性
介绍存储技术当然要从存储技术最基本的组件磁盘开始介绍了。目前市面上我们见得最多的是 3.5 寸或者 2.5 寸的磁盘。虽然由于 SSD 硬盘的猛攻,机械磁盘的市场份额屡屡受挫,但老大地位并没有被动摇。
下面这个图是 3.5 寸和 2.5 寸磁盘的真容,相比大家都见过。这个也是目前应用最多的硬盘类型。无论是在消费级市场,还是企业级都是这样。差异可能是消费级使用的 SATA 接口,而在企业级使用 SAS 接口更多一下。
图 1 磁盘的外部结构
如果扒开磁盘,其内部的结构确实比较复杂的。如图 2 是磁盘的内部结构图。在磁盘内部,两个核心的组件是盘片和磁臂。其中盘片用来存储数据,而磁臂则是用来读写数据的。如果您仔细观察还会发现,磁盘的盘片不止一个,而是由多个盘片叠加起来的。
图 2 磁盘的内部结构
磁盘的历史
世界上第一块磁盘是由 IBM 发明的,发明时间是 1956 年。下面这张图是关于第一块磁盘的酷照,右图是通过专机运输的图。严格来说,这个磁盘不应该叫磁盘,而应该称为基于磁性介质存储系统。
图 3 第一个磁盘
从图中可以看出,这个设备比冰箱还要大(盘片大小是 24 寸),但是其存储容量仅仅只有 5MB。没错,你没看错,仅仅只有 50MB。
直到 1980 年,希捷才制造了世界上第一块与当前硬盘类似的硬磁盘。这个磁盘的尺寸为 5.25 寸,容量才 200 多 KB!
图 4 希捷 5.25 寸磁盘
纵观磁盘的发展史,从最早的 24 寸磁盘到现在最小的只有 0.85 寸的磁盘。虽然磁盘的尺寸不断变小,但容量却有了翻天覆地的变化。最近希捷推出了 16TB 的磁盘,而该磁盘的容量已经是其鼻祖容量的 335 万倍之多!
图 5 磁盘尺寸年表
磁盘的内部结构
前面我们从物理层面了解硬盘的内部结构,本节我们将深入的分析一下磁盘的内部结构。并且,基于磁盘的结构特点,我们将深入介绍一下磁盘的访问性能问题。
前面在实物图中我们已经看到磁盘是由很多个盘片组成的,而数据正是存储在这些盘片上的。如图 4 所示,图中的一圈圈灰色同心圆为磁道(track),从圆心向外画直线,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称之为一个扇区(图践绿色部分)。扇区是磁盘的最小组成单元,通常是 512 字节。
图 6 盘片逻辑结构
在实物图中我们看到磁盘中包含层叠的多个盘片,如图图 7 展示了由一个个盘片组成的磁盘立体结构,一个盘片上下两面都是可读写的,图中蓝色部分叫柱面(cylinder)。
图 7 磁盘盘片立体结构
简单介绍了磁盘结构后,下面我们将对磁盘的参数进行讲解。磁盘的常见参数包含如下几种:
磁头(head)
磁道(track)
柱面(cylinder)
扇区(sector)
圆盘(platter)
在图 7 中,磁盘是包含 3 个圆盘(盘片),6 个磁头,7 个柱面(每个盘片 7 个磁道) 的磁盘,图 6 中每条磁道有 12 个扇区,因此,我们可以根据这些参数计算出磁盘的容量为 6*7*12*512 字节。即:
存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数
下面讲一下现代磁盘。在老式磁盘中,尽管磁道周长不同,但每个磁道上的扇区数是相等的,越往圆心扇区弧段越短,但其存储密度越高。不过这种方式显然比较浪费空间,因此现代磁盘则改为等密度结构,这意味着外围磁道上的扇区数量要大于内圈的磁道,寻址方式也改为以扇区为单位的线性寻址。为了兼容老式的 3D 寻址方式,现代磁盘控制器中都有一个地址翻译器将 3D 寻址参数翻译为线性参数。
那么如何查询磁盘的参数信息呢?以 Linux 操作系统为例,可以通过 fdisk -l 命令查看磁盘的详细信息。如图 7 所示,显示的磁盘的详细信息。
图 8 Linux 系统磁盘信息
磁盘访问数据的时间特性
前面我们介绍了磁盘的内部结构,接下来我们分析一下磁盘传输数据相关的内容,重点是关于其耗时的介绍。
磁盘传输数据的大概流程是这样的。当上层下发读写请求时,磁盘的驱动器将请求转换为具体的磁道编号和扇区编号。然后定位到具体的位置进行数据的读写。这个定位过程可以分解为 2 步,也就是摆动磁臂到具体磁道的过程(寻道)和等待盘片旋转到指定扇区的过程。具体如图 9 所示。
图 9 寻道与旋转
上面上个过程都需要消耗时间,前者称为寻道时间,后者称为旋转延迟。下面我们具体解释一下这两个时间。
寻道时间:寻道时间是指将读写磁头移动至正确的磁道上所需要的时间。寻道时间越短,I/O 操作越快,目前磁盘的平均寻道时间一般在 3-15ms。如图 10 是某品牌磁盘寻道时间及寻道平均延时。
图 10 某品牌磁盘寻道时间参数
旋转延迟:旋转延迟是指盘片旋转将请求数据所在的扇区移动到读写磁盘下方所需要的时间。旋转延迟取决于磁盘转速,通常使用平均延迟,也就是用磁盘旋转一周所需时间的 1/2 表示。比如:7200rpm 的磁盘平均旋转延迟大约为 60*1000/7200/2 = 4.17ms,而转速为 15000rpm 的磁盘其平均旋转延迟为 2ms。
定位成功后就可以进行数据读写了,数据读写的过程会扫描指定数量的扇区。比如读取 1KB 的数据,需要扫描 2 个扇区,这个也是需要消耗时间的。另外就是数据需要通过磁盘控制器经总线传输给 CPU,这部分操作也是需要消耗时间的。我们将这部分时间总称为数据传输时间。数据传输时间通常远小于前两部分消耗时间,简单计算时可忽略。
通过对比上面的各种时间数据,我们可以看出寻道时间占比最大。这也正是机械磁盘在处理随机 IO 时性能非常差的根本原因。
磁盘性能的指标
关于磁盘性能有 2 个关键的指标,一个是 IOPS,另外一个是吞吐量。下面我们简单介绍一下这两个指标。
IOPS(Input/Output Per Second)即每秒的输入输出量(或读写次数),即指每秒内系统能处理的 I/O 请求数量。IOPS 是衡量随机小 IO 的关键衡量指标。可以通过如下公式推算出磁盘的 IOPS:
IOPS = 1000ms/ (寻道时间 + 旋转延时 + 数据传输时间)
如果忽略数据传输时间,理论上可以计算出随机读写最大的 IOPS。以 10000 转磁盘为例,其寻道时间大概是 8ms,而旋转延时大概是 2ms,因此可以计算出大概在 100 左右。
吞吐量(Throughput),指单位时间内可以成功传输的数据数量(字节数)。吞吐量是衡量连续 IO 的关键指标。由于是连续 IO,因此寻道时间可以省略。这样吞吐量主要与旋转时间关系比较大,比较读取一个磁道上所有数据的耗时也要 2ms。另外一个关键因素是磁盘的接口,不同的接口也有吞吐极限。比如 SATA 接口大概在 100MB/s 左右,而 SAS 磁盘则在 200MB/s 左右。
本节的内容先到这里,更多关于存储的精彩内容请关注本号。
版权声明: 本文为 InfoQ 作者【SunnyZhang的IT世界】的原创文章。
原文链接:【http://xie.infoq.cn/article/cfbde150e73a2c5b2a6fb794b】。文章转载请联系作者。
评论