数据存储架构与技术(第2版)
上QQ阅读APP看书,第一时间看更新

2.1 磁盘

磁盘是一种基于磁存储的存储盘,也被称为HDD或机械硬盘等。1956年,IBM生产出了第一款磁盘产品——IBM 350。这款产品容量仅有5 MB左右,包含50片24 in(1 in≈2.54 cm)的盘片,访问延迟接近1 s。这块磁盘以单体设备独立存在,还没有作为一个部件被集成进入系统。

1973年,IBM推出了IBM 3340磁盘,也被称为温切斯特(Winchester)磁盘,简称温盘。在温盘的设计中,磁头、盘片和转轴封装在密闭空间里(填充惰性气体),转动磁碟通过浮起磁头进行读写。这种封装形态对磁盘的批量生产提供了支持,因而温盘被认为是现代磁盘的模型,其设计一直沿用至今。

1997年,巨磁阻(Giant Magneto Resistive)技术被提出,并被用于磁盘。这种技术使用了具有更强磁阻效应的材料和多层薄膜结构,将磁盘的存储密度从3~5 GB/in2提升到了10~40 GB/in2。这种技术极大地推动了磁盘的大容量设计。因为巨磁阻效应的发现,法国物理学家阿尔贝·费尔(Albert Fert)与德国物理学家彼得·格林贝格(Peter Grünberg)获得了2007年诺贝尔物理学奖。

经过过去近70年的发展,磁盘在容量、性能和可靠性上均取得了长足的发展。目前,磁盘在大规模存储系统中仍然占据主要的位置,在容量型存储系统中仍具有比较优势。

2.1.1 磁盘的组成与结构

磁盘主要包含两部分:机械部分和电子部分,如图2.2所示。

图2.2 磁盘的组成

磁盘机械部分包括底座、主轴电机、盘片、音圈电机、磁头组、顶盖等部分,如图2.3所示。所有的盘片平行地安装在同一个转轴上,盘片的两面分别对应一个磁头,所有磁头关联在同一个磁头组上,磁头组尾部有一个音圈电机,驱动整个磁头组围绕同一个轴承旋转摆动。

图2.3 磁盘机械部分的组成

电子部分包括主控SoC(System on a Chip,单片系统)、电机驱动芯片、RV(Rotation Vibration,转动振动)传感器、Shock传感器、DRAM、Flash ROM(Read-Only Memory,只读存储器)等器件,如图2.4所示,其中的RV传感器通常只用在企业级磁盘上。

图2.4 磁盘电子部分的组成

2.1.2 磁盘性能

磁盘通过磁头对盘片上的磁介质进行感应与转换,从而完成数据读写。写数据时,磁盘的写磁头将电信号转化成磁信号,将盘面上的磁介质颗粒去磁化,让其按照一定的规律排列。读数据时,磁盘的读磁头通过感应磁场的变化,将磁信号转化成电信号,从而识别出数据。

在磁盘工作时,盘片高速旋转产生的升力使磁头悬浮在盘片上方。磁头的核心元件是读磁头和写磁头,读磁头是一种对磁场变化很敏感的传感器,写磁头是一个缠绕在磁芯上的线圈,通过电流改变磁颗粒的磁化方向。具体而言,在写数据时,“0”或“1”数据流以脉冲电流形式通入写磁头线圈,使磁头下方盘片上的磁性介质层的磁化方向发生改变,实现数据写入,即电磁转换;在读数据时,读磁头感应旋转的盘片上方磁场的变化,输出变化的电压信号,实现数据读取,即磁电转换。

磁盘的读性能与磁盘内部构造密不可分,主要的访问延迟来自磁盘的机械部件。图2.5展示了磁盘的结构。磁盘通过寻道(Seek)和旋转(Rotation)两个机械操作以扇区(Sector)为粒度读数据。这两个机械操作可以从磁盘内部构造的两部分来理解,一部分是盘片部分,另一部分是磁头部分。

图2.5 磁盘的结构

在盘片部分,多个盘片(Platter)平行地围绕转轴(Spindle)旋转。转轴旋转带动盘片旋转,被称为旋转(Rotation)操作。每个盘片的正反两面,被称为盘面(Surface),每个盘面上附着磁性介质,用于记录数据。盘面被划分为若干个同心圆,每个同心圆被称为磁道(Track)。磁道被切分为固定大小的扇区,即磁盘的最小访问单位。

在磁头部分,每个盘面对应一个磁头(Head),磁头对其对应的盘面进行读写。不同盘面上的磁头组成一个磁头组。每个磁头由对应的磁臂(Arm)进行驱动,在盘面上不同的磁道上移动,即寻道操作。例如,目前的磁盘中磁头的飞行高度低于10 nm,飞行速度接近200 km/h,寻道精度为50 nm左右,寻道速度为毫秒级。

除了旋转操作和寻道操作之外,磁盘的访问延迟还包括数据传输的时间和控制器处理时间。因而,磁盘访问延迟可以通过式(2.1)计算。

Tdisk service time = Tseek time + Trotation time + Tdata transfer time + Tcontroller time  (2.1)

其中,Tdisk service time为预计的数据访问时间,Tseek time为寻道时间,Trotation time为旋转时间,Tdata transfer time为数据传输时间,Tcontroller time为控制器处理时间。

寻道时间是磁头定位到特定磁道的时间。寻道时间有不同的表示方式,包括最大寻道时间(Tfull stroke time)、平均寻道时间(Taverage time)、相邻磁道寻道时间(Ttrack-to-track time)等。最大寻道时间是指磁头从盘面上的一侧磁道移动到另一侧磁道的时间,是盘面上径向移动最大距离所需的时间。平均寻道时间是指磁头在盘面上不同磁道之间移动的平均时间。相邻磁道寻道时间是指磁头在相邻两个磁道上移动的时间。

旋转时间是盘片旋转到磁头定位扇区的时间。旋转时间由转轴的转速决定。通过磁盘规格文档中给出的转速可以计算出旋转时间。磁盘规格中的转速通常有5400 r/min、7200 r/min、15000 r/min,转速在业界常用rpm(rounds per minute,每分钟转的圈数)来表示。Trotation time为旋转半圈的时间,计算公式为Trotation time = 0.5 / (转速/60000),单位为ms。例如,5400 r/min的磁盘Trotation time为5.6 ms,7200 r/min的磁盘Trotation time为4.2 ms。

数据传输时间是数据从磁介质传输到主机的时间。数据传输时间包括内部传输时间和外部传输时间。内部传输时间与磁盘转速相关,可通过以下公式进行估算:数据传输量/(单磁道的存储容量×转速)。外部传输时间与磁盘接口相关,可以通过以下公式进行估算:数据传输量 / 接口带宽。例如,SATA 2.0接口理论带宽为300 MB/s,传输1 MB数据的外部传输时间估算为3.33 ms。

控制器处理时间主要是指数据在电子部件中的处理延迟。与机械部件的延迟相比,这部分延迟相对较小,通常可以忽略。

在磁盘的处理过程中,磁盘的读写请求延迟也与磁盘负载有关。磁盘读写请求延迟与磁盘负载的关系为Tavg. response time = Tdisk service time / (1 – 磁盘利用率)。磁盘的利用率是当前读写请求的数量与磁盘最大吞吐率的比值。通常,在磁盘利用率达到70%之后,磁盘读写请求的延迟会出现比较明显的增大。磁盘延迟与磁盘负载的关系如图2.6所示。

从磁盘访问延迟的计算公式中可以发现磁盘的性能与盘片的转速、磁头的寻道速度和数据的传输量相关度较高。其中,有两个比较重要的特性。

数据访问的连续性(局部性)对磁盘性能的影响:在访问数据时,磁盘需要在寻道和旋转后定位到相应的数据块进行读写。如果每次访问的地址比较随机,那么每次访问均需要进行寻道和旋转操作,而实际用于磁头与盘片间数据读写的时间较少,也就是数据有效读写时间较少。因而,数据访问越连续(局部性好),磁盘越能发挥性能优势。

图2.6 磁盘延迟与磁盘负载的关系[1]

数据访问块的大小对磁盘性能的影响:在一次数据访问中,寻道时间、旋转时间和控制器处理时间相对固定,而传输时间跟数据量的多少相关。当数据量较大时,传输时间在总时间中占比较高;当数据量较小时,传输时间在总时间中占比较低,大部分时间花费在寻道、旋转等操作,数据访问有效带宽较低。因而,数据访问块越大,磁盘越能发挥性能优势。

这两个特性对存储软件的设计比较关键。例如,在文件系统的设计中,常用技术包括增加数据访问块的大小、改善数据访问的局部性,以及相应的预取、缓存等,均与磁盘的特性密不可分。

2.1.3 磁盘固件

磁盘的电子部件有主控SoC芯片,用于信号处理、检错纠错、驱动电机等;在控制器上也运行了相应的固件,用于地址映射、请求排队与调度、缓存等功能。下面将介绍磁盘固件中的地址映射、磁盘缓存和磁盘调度3个方面的内容。

1.地址映射

磁盘向操作系统导出了一个线性的一维地址空间,通常称为LBA(Logical Block Address,逻辑块地址)。磁盘的固件需要将操作系统所看到的一维线性地址转换为磁盘内部的扇区地址。在磁盘内部,通常采用CHS描述磁盘扇区的PBA(Physical Block Address,物理块地址)。CHS代表柱面(Cylinder)、磁头(Head)和扇区(Sector),通过这3个维度的参数可以定位到内部的特定扇区。磁盘固件中的地址映射功能完成从LBA到PBA的映射。

从LBA映射到CHS的一种简单的映射关系可以表示为

(2.2)

(2.3)

(2.4)

其中,Cylinder#、Head#和Sector#分别为柱面编号、磁头编号和扇区编号。Cylinder_Sectors和Track_Sectors分别表示每个柱面中的扇区个数和每个磁道内的扇区个数。

在实际的磁盘中,地址映射关系相对复杂。为了支持优化存储密度、提高访问性能等,地址映射中还包括分区(Zone)、重映射(Remap)、偏移(Skew)等常见的技术。

(1)分区

在磁盘中,不同磁道的周长是不同的。有两种方式在磁道中划分扇区,一种方式是固定扇区数,另一种方式是固定位密度,即每个扇区采用固定的长度。上述简单的映射关系是假设每个磁道固定扇区数,但是这浪费了周长较长的磁道(即外圈磁道)的存储密度。如果采用每个磁道固定扇区数,那么CHS的计算会比较麻烦。因而,在磁盘中采用分区的方式是两者之间的折中方式。

分区将盘面上不同半径的磁道划分为多个区域,每个区域中按照每磁道固定扇区数的方式划分扇区,不同区域之间每磁道的扇区数不同,尽可能获得较高的位密度。通过这种方式,在存储密度和地址映射便利性之间取得平衡。

在带有分区的情形下,LBA到CHS的转换仅需要记录几个分区的起始地址即可。其计算方式为

(2.5)

(2.6)

(2.7)

(2.8)

其中,Zone_LBA为当前分区中LBA的偏移,Zone_StartLBA和Zone_Start Cylinder分别为当前分区的起始LBA和起始柱面号。

(2)重映射

在磁盘中,地址映射需要处理扇区故障。如果一个扇区出现故障,磁盘需要重映射故障扇区到新的扇区,以进行数据读写。在磁盘中,通常在每个磁道上预留一个或多个扇区,用于扇区的重映射。

在有扇区重映射的情形下,磁盘固件需要记录一个重映射表。重映射表中记录了故障扇区的地址到新扇区的地址。在CHS地址转换时,通过查找重映射表以确定扇区是否发生了重映射,并获得发生重映射的扇区的新地址。

(3)偏移

在磁道进行切换时,在磁头移动的过程中,盘片依然在旋转。所以,当磁头在不同磁道之间进行切换时,磁头开始读取时已经不是下一个相邻扇区了。为了解决这个问题,可以采用偏移的做法。如图2.7所示,依据磁道切换的时间,在下一个磁道编号时,向后偏移一定数量的扇区数。磁道切换需要时间,同样在盘面切换、柱面切换中也会有类似的问题。因而,偏移同样可以在盘面或柱面切换时使用。

图2.7 带偏移的地址块映射示意

在有偏移的情形下,逻辑地址到物理地址的转换中需要计算出相应的偏移位置,从而合并到已有计算结果中。

2.磁盘缓存

磁盘在设备内部会保留一定大小的嵌入式内存,用于数据的缓存,典型的磁盘缓存大小为2~64 MB(注意,操作系统中也将主存对磁盘的缓存称为磁盘缓存,与本小节的磁盘缓存是不同的概念)。磁盘缓存跟大部分缓存的作用类似,既包括了写数据的缓冲,也包括了读数据的缓存。

(1)写缓冲

主机将数据发给磁盘,磁盘可以将数据先缓冲在磁盘缓存中,然后给主机返回完成的通知。磁盘在后台将数据再写入磁盘介质。通过这样的方式,主机看到的磁盘写性能有明显的提升。这样的缺点是,因为磁盘缓存是易失的,在系统掉电时可能会丢失数据。为防止数据丢失,主机可以关闭磁盘缓存,或者启用显式调用sync等同步操作。

(2)读缓存与预取

主机与磁盘之间的接口性能通常大于磁盘内部介质的访问性能。因而,磁盘缓存的另一个作用是提供读缓存。磁盘可以通过预取操作,将磁盘介质上的数据先行读取到磁盘缓存中。在主机发送读请求到磁盘时,数据读缓存可以提高数据在磁盘缓存中命中的概率,从而降低读延迟。

3.磁盘调度

磁盘接收到磁盘读写请求的地址是分散的,磁盘的调度算法通过调度读写请求的顺序,减少请求的平均访问时间,提高磁盘整体吞吐率,并增强不同请求之间的公平性。

(1)FCFS算法

FCFS(First Come First Serve,先来先服务)算法不改变读写请求的顺序,按照请求到达的顺序依次进行服务。先来先服务算法的优势是公平性很强,请求的延迟相对较低,但缺点是磁盘的整体吞吐率不高。

(2)SSTF算法

SSTF(Shortest Seek Time First,最短寻道时间优先)算法是选择读写请求中离当前磁道最近的请求进行服务。该算法的优势在于能够降低磁盘寻道的时间,提高磁盘的整体吞吐率,但缺点是公平性难以保证,会出现“饿死”现象,即出现请求一直得不到响应的情形。

(3)扫描(SCAN)算法

扫描算法,也被称为电梯算法,是从磁盘盘面上的一端一直移动到另一端,在移动的过程中处理相应的读写请求;然后再跳回到起始的一端,按同样的方向移动,服务请求。扫描算法的优点在于磁盘整体吞吐率较高,也不会出现“饿死”现象。

循环扫描(C-SCAN)算法与扫描算法类似,不同之处在于循环扫描在磁头从一端移动到另一端后,并不跳回到起始的一端,而是从所在位置反向移动到起始的一端,在移动的过程中进行读写请求的服务。

(4)前看(LOOK)算法

前看算法与扫描算法类似,区别在于前看算法从一端移动到另一端时仅移动到所有请求中最大磁道号即可停止,而不是一直移动到盘面的最末端。这样的方式相比于扫描算法,可以减少不必要的磁头移动。

循环前看(C-LOOK)算法是前看算法的变种,与循环扫描算法类似,从一端往另一端移动时,并不是跳回到起始的一端,而是服务完一个方向后反向移动,并在移动过程中服务请求。

目前,硬盘的技术仍然在发展之中,如何提高磁盘的密度是关注点。例如,SMR(Shingled Magnetic Recording,叠瓦式磁记录)、HAMR(Heat-Assisted Magnetic Recording,热辅助磁记录)、MAMR(Microwave-Assisted Magnetic Recording,微波辅助磁记录)等新技术。