目录

磁盘

磁盘的物理结构

硬盘内部主要部件为磁盘盘片、传动手臂、读写磁头和主轴马达。实际数据都是写在盘片上,读写主要是通过传动手臂上的读写磁头来完成。实际运行时,主轴让磁盘盘片转动,然后传动手臂可伸展让读取头在盘片上进行读写操作。磁盘物理结构如下图所示:

磁盘结构

由于单一盘片容量有限,一般硬盘都有两张以上的盘片,每个盘片有两面,都可记录信息,所以一张盘片对应着两个磁头。

扇区:盘片被分为许多扇形的区域,每个区域叫一个扇区,硬盘中每个扇区的大小固定为 512 字节。

磁道:盘片表面上以盘片中心为圆心,不同半径的同心圆称为磁道。

柱面:不同盘片相同半径的磁道所组成的圆柱称为柱面。

早期的硬盘每磁道扇区数相同(外圈的记录密度就要比内圈小使得浪费大量的存储空间),此时由磁盘基本参数可以计算出硬盘的容量:存储容量=磁头数磁道(柱面)数每道扇区数*每扇区字节数。

后期使用 ZBR(Zoned Bit Recording,区位记录)技术,盘片外圈区域磁道长扇区数目较多,内圈区域磁道短扇区数目较少,大体实现了等密度,从而获得了更多的存储空间。

磁盘读取

操作系统在对磁盘进行管理时通常以磁盘块作为最小单位。而定位一个磁盘块则通过磁盘块地址进行。磁盘块通常为扇面数的整数倍,更为常见的是 2 的幂次方倍,如 32 个扇面或 64 个扇面等。

操作系统通常都会标明磁道(磁柱)、扇面、和盘面(磁头)3 个参数。以这种方式给出的地址称为逻辑块地址(Logical Block Address,LBA)。

读取过程如下:

  1. 操作系统将要读取的 LBA 传送给磁盘驱动器并启动读取命令。
  2. 磁盘驱动器通过将磁头移动到正确的位置,并启动处于指定盘面上的磁头来搜索指定的磁道。在磁头的移动过程中,读取磁头将不断地检查下面的扇面号直到找到所要求的扇面为止。
  3. 磁盘控制器将扇面数据和 ECC 信息传送到一个处于磁盘界面里的缓冲区。这里的 ECC 信息是在数据流动的动态过程中进行计算而得出的。
  4. 磁盘驱动器向操作系统发出“数据就绪”信号。
  5. 操作系统从磁盘界面里的缓冲区读取数据,既可以按一个字节一个字节的方式来读取,又可以启动 DMA 命令来读取。

磁盘调度算法

  1. 先来先服务
  2. 短任务优先:短任务优先就是谁的磁盘读写数据量最少,谁就优先。
  3. 短寻道优先:短寻道优先则考虑当前磁头离谁的数据最近,谁就优先。
  4. 电梯算法:先满足一个方向的所有请求,再满足所有反方向的请求,这样循环往复。
  5. 提前查看电梯算法:每次往某个方向移动时必须确保该方向还有请求未满足。否则即刻调转方向。这样效率将得到提高。

影响硬盘性能的因素

影响磁盘的关键因素是磁盘服务时间,即磁盘完成一个 I/O 请求所花费的时间,它由寻道时间、旋转延迟和数据传输时间三部分构成。

寻道时间

Tseek 是指将读写磁头移动至正确的磁道上所需要的时间。寻道时间越短,I/O 操作越快,目前磁盘的平均寻道时间一般在 3-15ms。

旋转延迟

Trotation 是指盘片旋转将请求数据所在的扇区移动到读写磁盘下方所需要的时间。旋转延迟取决于磁盘转速,通常用磁盘旋转一周所需时间的 1/2 表示。比如:7200rpm 的磁盘平均旋转延迟大约为 60*1000/7200/2 = 4.17ms,而转速为 15000rpm 的磁盘其平均旋转延迟为 2ms。

数据传输时间

Ttransfer 是指完成传输所请求的数据所需要的时间,它取决于数据传输率,其值等于数据大小除以数据传输率。目前 IDE/ATA 能达到 133MB/s,SATA II 可达到 300MB/s 的接口数据传输率,数据传输时间通常远小于前两部分消耗时间。简单计算时可忽略。

衡量性能的指标

机械硬盘的连续读写性能很好,但随机读写性能很差,这主要是因为磁头移动到正确的磁道上需要时间,随机读写时,磁头需要不停的移动,时间都浪费在了磁头寻址上,所以性能不高。衡量磁盘的重要主要指标是 IOPS 和吞吐量。

IOPS

IOPS(Input/Output Per Second)即每秒的输入输出量(或读写次数),即指每秒内系统能处理的 I/O 请求数量。随机读写频繁的应用,如小文件存储等,关注随机读写性能,IOPS 是关键衡量指标。可以推算出磁盘的 IOPS = 1000ms / (Tseek + Trotation + Transfer),如果忽略数据传输时间,理论上可以计算出随机读写最大的 IOPS。常见磁盘的随机读写最大 IOPS 为:

7200rpm 的磁盘 IOPS = 76 IOPS 10000rpm 的磁盘 IOPS = 111 IOPS 15000rpm 的磁盘 IOPS = 166 IOPS

吞吐量

吞吐量(Throughput),指单位时间内可以成功传输的数据数量。顺序读写频繁的应用,如视频点播,关注连续读写性能、数据吞吐量是关键衡量指标。它主要取决于磁盘阵列的架构,通道的大小以及磁盘的个数。不同的磁盘阵列存在不同的架构,但他们都有自己的内部带宽,一般情况下,内部带宽都设计足够充足,不会存在瓶颈。磁盘阵列与服务器之间的数据通道对吞吐量影响很大,比如一个 2Gbps 的光纤通道,其所能支撑的最大流量仅为 250MB/s。最后,当前面的瓶颈都不再存在时,硬盘越多的情况下吞吐量越大。

磁盘阵列

分基于软件的软 RAID(如 mdadm)和基于硬件的硬 RAID(如 RAID 卡)

级别 特征 原理 单元 冗余 性能 利用率 最多坏 用途 缺陷
RAID0 条带 分片分散存入 2 块硬盘 2 读写速度 2 倍 100% 0/2 SWAP/TMP 不冗余,数据难恢复
RAID1 镜像 相同数据存入 2 块硬盘 2 写速度不变,读速度 2 倍 50% 1/2 数据备份 读写速度没加,利用率低
RAID4 校验 分片分散存入 2 块硬盘,校验码存入第 3 块硬盘 3 读写速度 2 倍 2/3=66% 1/3 用的很少 1. 坏盘时另外 2 块需要重新计算还原坏盘数据;2. 校验码盘压力大成为瓶颈
RAID5 校验 分片和校验码混合存储 3 读写速度 2 倍 2/3=66% 1/3 用的不多 坏盘时另外 2 块需要重新计算还原坏盘数据
RAID6 校验 分片盘校验码盘分别 2 个,数据分片校验码计算 2 次 4 读写速度 2 倍 2/4 2/4 1∈2 用的很少 “部队中有一半是搞后勤的,感觉还是不太爽。”
RAID10 1+0 2 块硬盘 1 组先做 RAID1,多组 RAID1 再做 RAID0 4 读写速度 N 倍,N 为组数 2/4 2/4 1∈2 用的最多 -
RAID50 5+0 3 块硬盘 1 组先做 RAID5,多组再做 RAID0 6 读写数读 2N 倍,N 为组数 4/6 2/6 1∈3 土豪用的 “好是好,就是贵!”

参考

《操作系统之哲学原理第 2 版》邹恒明

《操作系统导论》