大话存储II---第三章磁盘原理与技术详解(3.3)

3.3 磁盘相关高层技术

3.3.1 磁盘中的队列技术

        假如有一个包含1000个同心圆的转盘在旋转,有一个机械手臂可以将物体放到任何一个同心圆上。有三个人先后告诉机械手臂,第一个人要放东西到最内侧的圆上,第二个人要放到最外侧的圆,第三个人要放到最内侧的圆。如果机械手臂按照顺序操作,中间就会有两次换道操作。而如果机械手臂在处理完第一个人的请求之后,没有立即处理第二个请求,而是计算之后发现第三个请求也是在内侧圆上,就先将第三个请求完成,再去完成第二个请求,这样就只需要一次换道。因为磁头计算的时间比来回换道的时间要快得多,所以这种排队技术大大的提高了读写效率。实现队列功能的程序控制代码是存放在磁盘控制电路芯片中的,而不是主板上的磁盘控制器上。也就是说,由控制器发给磁盘指令,然后由磁盘自己的DSP固化电路或者由磁盘上的微处理器载入代码从而执行指令排队功能。

        但是排队也必须要磁盘控制器来支持。也就是说,如果磁盘擅自排队,不按照控制器发送过来的顺序一条一条的执行指令,则在读出数据之后,由于步调和控制器期望不一致,预先读出的数据只能先存放在磁盘驱动器的缓存中,等待控制器来取。

        所以,要实现排队技术,不仅需要磁盘驱动器,还必须在磁盘控制器(主板上的磁盘控制)电路中固化代码处理排队,和磁盘达成一致。或者不固化代码,而是修改磁盘控制器驱动程序,加入处理排队的功能从而配合磁盘驱动器。

3.3.2 无序传输技术

        控制器发一条指令要求读取某些扇区中的内容,磁盘可以不从数据所在的初始扇区开始读,而是采取就近原则。比如磁盘头正好处于待读数据的尾部,此时如果等待磁盘旋转到磁头位于数据的头部才开始读,就需要等待一圈的时间,这就是所谓的“旋转延迟”,时间就被浪费了。如果采取能读多少先读多少的原则,在尾部时就先读出尾部数据,然后立即发送给控制器,控制器通过DMA将数据放到内存,等磁盘转到数据块头部时,再读出剩余的部分发给控制器,就避免了时间的浪费。

        这种技术同样也需要磁盘控制器的支持,或者通过控制器硬件或驱动程序。

        通过指令排队和无需传输可以最大化利用磁盘资源。也就是,把麻烦留给控制器,把简单留给磁盘,因为控制器的处理速度永远比磁盘的机械运动快。

3.3.3 几种可控磁头扫描方式概述

        1.FCFS(First Come First Server)

        先来先服务,磁头完全按照IO进入的先后顺序执行寻道操作。显然,FCFS在随机的IO的环境中严重影响IO效率。

        2.SSTF(Shortest Seek Time First)

        在SSTF模式下,控制器会优先让磁头跳到距离当前磁头位置最近的一个IO磁道去读写,读写完成后,再次跳到离刚读写完的这个磁道最近的一个IO磁道去读写,以此类推。但是如果磁头的初始位置在53号磁道,如果此时IO队列不断有位于53号磁道周围的IO进入,那么诸如183号这种里53号较远的IO将会被饿死,永远轮不到183号磁道。所以SSTF模式的限制也是很大的。

        3.SCAN(回旋扫描模式)

        这种模式类似于电梯,从一端到另一端,然后再折返,磁头从最内侧磁道依次向外圈磁道寻道。如果当前队列中没有某个磁道的IO等待,那么磁头就会直接略过。在SCAN模型中,即使最内圈磁道没有IO,磁头也要触及到之后才能折返。SCAN不会饿死任何IO,但是也带来了不必要的开销,因为磁头从来不会在中途折返,只能触及终点之后才返回。如果磁道正从中间磁道向外圈磁道移动,而此时队列进入了一个内圈IO,但是此时磁头并不会折返,即使队列中只有这一个IO,也只能等待磁头触及外圈之后折返回来执行。

        4.C-SCAN(单向扫描)

        在C-SCAN模式中,磁头总是从内圈向外圈扫描,达到外圈后,迅速返回内圈,途中不接受任何IO,然后再从内圈向外全扫描。

        5.LOOK(智能监察扫描模式)和C-LOOK(智能监察单向扫描模式)

        LOOK模式相对于SCAN模式的区别在于,模式不必达到终点之后才折返,而只要完成最两端的IO即可折返。同样,C-LOOK也是一样,只不过是单向扫描。

        模式选择:

        在负载不高的情况下,可以使用SSFT模式获得最佳性能。

        在高负载的情况下,鉴于可能造成IO饿死的情况,使用SCAN或者C-SCAN、C-LOOK模式更为合适。

3.3.4 关于磁盘缓存

        磁盘必须有缓存,用来接收指令和数据,还被用来进行预读。磁盘缓存时刻处于打开状态。

        缓存在磁盘上就表现为一块电路板上的RAM芯片,某些资料中的“禁用”磁盘缓存其实是Write through模式,即磁盘收到指令和数据后,必须将其先写入盘片,再向控制器返回信号。但是,实际上指令和数据首先达到的一定是缓存。

3.3.5 影响磁盘性能的因素

        目前磁盘可以分为单磁盘和多磁盘。前者只有一张盘片,后者则有多张。盘片的正反两面都可以存放数据,所以每张盘片需要两个磁头,各读写一面。然而,磁盘某一时刻只能允许一个磁头来读写数据。也就是说,不管盘体内盘片和磁头再多,也不可能提高硬盘的吞吐量和IO的性能,只能提高容量

        影响磁盘性能的因素包括以下几种:

        1>转速:转速是影响硬盘连续IO时吞吐量性能的首要因素。在某一磁道读写数据时,磁头不会动,全靠盘片的转动来讲对应的扇区数据感应给磁头,所以盘片转的越快,数据传输时间就越短。在连续IO的情况下,磁头臂寻道次数很少,所以转速就是首要影响因素了。

        2>寻道速度:寻道速度是影响磁盘随机IO的首要因素。随机IO情况下,磁头臂需要频繁更换磁道,用于数据传输的时间相对于换道消耗的时间是很少的,根本不在一个数量级。如果磁头臂能够以很高的速度更换磁道,那么就会提升随机IOPS(input output per second,每秒进行读写的次数)值。目前高端磁盘平均寻道速度都是在10ms以下。

        3>单碟容量:单碟容量也是影响磁盘性能的一个间接因素。单碟容量越高,证明相同空间内的数据量越大,也就是数据密度越大。

        4>接口速度:接口速度是影响硬盘性能的一个最不重要的因素。目前的接口速度在理论上都已经满足磁盘所能达到的最高外部传输带宽。而在随机IO环境中,接口速度显得更加不重要,因为此时瓶颈几乎都在寻道速度上。


猜你喜欢

转载自blog.csdn.net/qq_28814687/article/details/80278023