磁盘I/O那些事

计算机硬件性能在过去十年间的发展普遍遵循摩尔定律,通用计算机的CPU主频早已超过3GHz,内存也进入了普及DDR4的时代。然而传统硬盘虽然在存储容量上增长迅速,但是在读写性能上并无明显提升,同时SSD硬盘价格高昂,不能在短时间内完全替代传统硬盘。传统磁盘的I/O读写速度成为了计算机系统性能提高的瓶颈,制约了计算机整体性能的发展。

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

由于单一盘片容量有限,一般硬盘都有两张以上的盘片,每个盘片有两面,都可记录信息,所以一张盘片对应着两个磁头。盘片被分为许多扇形的区域,每个区域叫一个扇区,硬盘中每个扇区的大小固定为512字节。盘片表面上以盘片中心为圆心,不同半径的同心圆称为磁道,不同盘片相同半径的磁道所组成的圆柱称为柱面。磁道与柱面都是表示不同半径的圆,在许多场合,磁道和柱面可以互换使用。磁盘盘片垂直视角如下图所示:

早期的硬盘每磁道扇区数相同,此时由磁盘基本参数可以计算出硬盘的容量:存储容量=磁头数*磁道(柱面)数*每道扇区数*每扇区字节数。由于每磁道扇区数相同,外圈磁道半径大,里圈磁道半径小,外圈和里圈扇区面积自然会不一样。同时,为了更好的读取数据,即使外圈扇区面积再大也只能和内圈扇区一样存放相同的字节数(512字节)。这样一来,外圈的记录密度就要比内圈小,会浪费大量的存储空间。

如今的硬盘都使用ZBR(Zoned Bit Recording,区位记录)技术,盘片表面由里向外划分为数个区域,不同区域的磁道扇区数目不同,同一区域内各磁道扇区数相同,盘片外圈区域磁道长扇区数目较多,内圈区域磁道短扇区数目较少,大体实现了等密度,从而获得了更多的存储空间。此时,由于每磁道扇区数各不相同,所以传统的容量计算公式就不再适用。实际上如今的硬盘大多使用LBA(Logical Block Addressing)逻辑块寻址模式,知道LBA后即可计算出硬盘容量。

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

3.1 寻道时间

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

常见磁盘平均物理寻道时间为:

  • 7200/RPM 的STAT硬盘平均物理寻道时间是9ms
  • 10000/RPM 的SAS硬盘平均物理寻道时间是6ms
  • 15000/RPM 的SAS硬盘平均物理寻道时间是4ms

3.2 旋转延迟

Trotation是指盘片旋转将请求数据所在的扇区移动到读写磁盘下方所需要的时间。旋转延迟取决于磁盘转速,通常用磁盘旋转一周所需时间的1/2表示。

  • 7200rpm的磁盘平均旋转延迟大约为60*1000/7200/2 = 4.17ms;
  • 15000rpm的磁盘其平均旋转延迟为2ms

3.3 数据传输时间

Ttransfer是指完成传输所请求的数据所需要的时间,它取决于数据传输率,其值等于数据大小除以数据传输率。

目前IDE/ATA能达到133MB/s,SATA II可达到300MB/s的接口数据传输率,数据传输时间通常远小于前两部分消耗时间。简单计算时可忽略。

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

4.1 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

4.2 吞吐量

吞吐量(Throughput),指单位时间内可以成功传输的数据数量。

顺序读写频繁的应用,如视频点播,关注连续读写性能、数据吞吐量是关键衡量指标。它主要取决于磁盘阵列的架构,通道的大小以及磁盘的个数。不同的磁盘阵列存在不同的架构,但他们都有自己的内部带宽,一般情况下,内部带宽都设计足够充足,不会存在瓶颈。

磁盘阵列与服务器之间的数据通道对吞吐量影响很大,比如一个2Gbps的光纤通道,其所能支撑的最大流量仅为250MB/s。

最后,当前面的瓶颈都不再存在时,硬盘越多的情况下吞吐量越大。

  • linux/performance/磁盘i_o那些事.txt
  • 最后更改: 2019/04/16 18:31
  • (外部编辑)