标签:
磁盘大致由盘片、读写头、马达、底座、电路板等几大项组合而成。
磁头运行时距离磁盘表面的高度由下图可以随意感受一下:
磁盘在逻辑上被划分为磁道、柱面以及扇区。
启停区:每个盘片的每个面都有一个读写磁头,磁头期初停在盘片的最内圈,即线速度最小的地方。这是一个特殊区域,它不存放任何数据。
0磁道:在最外圈,离主轴最远的地方是0磁道,硬盘数据的存放就是从最外圈开始的。有一个0磁道检测器,由它来完成硬盘的初始定位。
0磁道存放着用于操作系统启动所必需的程序代码,因为PC启动后BIOS程序在加载任何操作系统或其他程序,总是默认从磁盘的0磁道读取程序代码来运行。
?
扇区的结构如下图所示
?
扇区:将每个环形磁道等距离切割,形成等长度的圆弧,每个圆弧就是一个扇区。
每个扇区可以存放512B的数据和一些其他信息。
一个扇区有两个主要部分:存储数据地点的标识符和存储数据的数据段。
扇区头标:扇区头标包括组成扇区三级地址的三个数字
柱面、磁头和扇区三者简称CHS,所以扇区的地址又称为CHS地址。
现在CHS编址方式已经不再使用,而转为LBA编址方式。
LBA地址:LBA编址方式不再划分柱面和磁头号,这些数据由磁盘自身保留,而磁盘对外提供的地址全部为线性的地址,即LBA地址。
所谓线性,指的是把磁盘想象成只有一个磁道,这个磁道是无限长的直线,扇区为这条直线上的等长线段,从1开始顺序编号,直到无限远。这种方式屏蔽了柱面、磁头这些复杂的东西。
某个LBA地址到底对应着哪个磁道上的哪个扇区,这种对应关系保存在磁盘控制电路的ROM芯片中,磁盘初始化的时候载入缓存汇总以便随时查询。
单位:磁盘读写都是以扇区为最小寻址单位的。也就是说不可能往某某扇区的前半部分写入某某数据。
一次IO:对于磁盘来说,一次磁头的连续读或者写叫做一次IO。
性能瓶颈:磁盘的读写是通过盘片的转动实现的,相对于盘片的转动而言,步进(换道速度)的速度就慢多了,所以制约磁盘性能的主要因素就是这个步进速度,也就是寻道速度。
目前磁盘的平均寻道速度最高可以达到5ms多,不同磁盘的寻道速度不同,普通IDE磁盘可能会超过10ms。
SCSI接口协议:专门用于计算机和其外设交互数据的一套接口系统。
目的:提高磁盘性能
无序传输:控制器发出一条指令要求读取某些扇区中的内容,磁盘可以不从数据所在的初始扇区开始读,而是采取就近原则。比如,磁盘恰好处于待读取数据的尾部几个扇区,磁盘按照能读多少就读多少的原则,在尾部时就先读取尾部的数据,然后立即发给控制器,控制器立即通过DMA数据放到内存,等磁盘旋转到数据块头部扇区时再读取剩余的部分。这样做避免了“旋转延迟”。
通过指令排队和无序传输可以最大化利用磁盘资源。
?
?扫描模式的选择:
?1 负载不高的情况下,SSTF模式可以获得最佳的性能
?2 高负载条件下,SCAN或者C-SCAN,C-LOOK模式更为合适,可以防止造成某些较远的IO饿死的问题。
?
缓存的作用:用于接收指令和数据,还被用来进行预读。
磁盘缓存时刻处于打开状态。
“禁用”缓存:并非真的关闭缓存,而是磁盘收到写入指令和数据后,必须先将其写入盘片,然后才向控制器返回成功信号,这样就相当于禁用了缓存,但是实际上,指令和数据首先到达的一定是缓存。
强制盘片访问:FUA指令,Force Unit Access,对于写操作,磁盘必须将受到的数据写入盘片才返回成功信号,也就是进行write through。对于读操作,磁盘受到指令后,直接去盘片上读数据,不搜索缓存。
?
影响磁盘性能的因素包括以下几种:
?
凡是作为一个通信协议,就可以按照OSI模型来将其划分层次。
划分了层次之后,我们可以把这个协议进行分解,提取每个层次的功能和各个层次之间的接口,从而可以将这个协议融合到其他协议之中,来适应各种不同的环境。
SCSI的全称是Small Computer System Interface,即小型计算机系统接口,具备多种类型的外设通信能力。?
需要:一块相当于CPU的SCSI的控制器,对SCSI设备进行控制,减少了对CPU的负担。
磁盘驱动器控制电路位于磁盘驱动器上,专门负责直接驱动磁头臂做运动来读写数据
磁盘控制器位于主板上,专门用来向磁盘驱动器控制电路发送指令,从而控制磁盘驱动器读写数据。
操作系统还没有启动起来加载磁盘控制器驱动的时候,是怎么访问磁盘的呢?
因为,CPU必须执行磁盘控制器驱动程序才能产生指令,进而才能读写磁盘数据。
所以,系统BIOS可以加载一个简化版的磁盘控制器驱动程序。
操作系统初始化时,通过执行这个驱动程序,会向系统BIOS报告控制器所掌管的磁盘设备的情况。
最后BIOS通过执行驱动程序,使得CPU可以发送对应的读指令,提取磁盘的0磁道的第一个扇区中的代码载入内存执行,从而加载OS。
再介绍一个影响磁盘性能的概念,叫做Queue Depth
在上面的介绍中,我们会默认理解,磁盘控制器向存储设备发起的指令,是一条一条顺序发送的。
而实际上,这些指令是一批一批地发送的,存储目标设备批量执行IO。
在IO比较少的时候,处理一条指令和同时处理多条指令将会耗费几乎相同的时间。
Queue Depth决定了批量指令处理的最大条数。
随着Queue Depth的增加,IO延迟也会随机增加。
?
这一章,主要介绍了磁盘原理,影响磁盘性能的一些因素。
通过对这些基本原理和概念的理解,不仅了解了磁盘是如何工作的,在遇到底层应用程序的性能问题时,也提供了另外一种思路来定位问题,即对IO读写性能的分析,来定位性能问题。
再啰嗦几句,虽然目前存储这个工作方向很有意思,也很有挑战,但是存储这个方向,更多偏向的是稳定,没有很多fancy的功能开发,所以个人觉得对新人来说,并不是很好的锻炼方向。
最近也愈发对工作分配不满意,更多做的是支持、调查问题之类的没有挑战又费时的工作,可能会考虑换个方向试试吧。
?
《大话存储2-存储系统架构与底层原理极限剖析》?
4 磁盘控制器、磁盘驱动器和他们的驱动程序(控制电路)
标签:
原文地址:http://www.cnblogs.com/suzhou/p/5770524.html