大话存储系列3——磁盘原理

1、磁头扫描方式

FCFS(First Come First Serve):先来先服务

SSTF(Shortest Seek Time First):控制器会先让磁头跳到离当前磁头位置最近的一个IO磁道去读写,然后最近的下一个。

SCAN(回旋扫描模式):电梯模型,从一端到另一端。

2、磁盘的缓存

磁盘缓存分为读缓存和写缓存。读缓存是指,操作系统为已读取的文件数据,在内存较空闲的情况下留在内存空间中(这个内存空间被称之为“内存池”),当下次软件或用户再次读取同一文件时就不必重新从磁盘上读取,从而提高速度。

写缓存实际上就是将要写入磁盘的数据先保存于系统为写缓存分配的内存空间中,当保存到内存池中的数据达到一个程度时,便将数据保存到硬盘中。这样可以减少实际的磁盘操作,有效的保护磁盘免于重复的读写操作而导致的损坏,也能减少写入所需的时间。

硬盘的缓冲区是硬盘与外部总线交换数据的场所。硬盘的读数据的过程是将磁信号转化为电信号后,通过缓冲区一次次地填充与清空,再填充,再清空,一步步按照PCI总线的周期送出,可见,缓冲区的作用是相当重要的。它的作用也是提高性能,但是它与缓存的不同之处在于:

一、它是容量固定的硬件,而不像缓存是可以由操作系统在内存中动态分配的。

二、它对性能的影响大大超过磁盘缓存对性能的影响,因为如果没有缓冲区,就会要求每传一个字(通常是4字节)就需要读一次磁盘或写一次磁盘。

磁盘上必须有缓存(我觉得这里就是指的硬盘缓冲区,而不是硬盘的缓存),用来接收指令和数据,还被用来进行预读。磁盘缓存时刻处于打开状态,缓存在磁盘上就表现为一块电板上RAM芯片,目前有2MB ,8MB,64MB 等容量规格所谓磁盘缓存的禁用是指的Write Through模式,即:磁盘收到写入指令和数据后,必须先将其写入盘片,然后才向控制器返回陈工信号,这样就相当于“禁用”了缓存。但实际上,指令和数据首先到达的一定是缓存。

SCSI指令中有连个参数可以控制对磁盘缓存的使用:

**DPO(Disable Page Out):这个参数的作用是禁止缓存中的数据页(缓存中的数据以页的为单位存在)被换出。不管是读还是写,被置了这个参数的数据在缓存空间不够的时候不能覆盖缓存中的其他数据,也就是不能将其他数据换出。

**FUA(Force Unit Access):这个参数的作用是强制盘片访问。对于写操作,磁盘必须将受到的数据写入盘片才能发挥成功信号,也就是进行Write Through 。对于读操作,磁盘收到指令后,直接去磁盘片上读取数据,而不搜索缓存。

所以,当某个SCSI指令的DPO和FUA连个参数值都被设置为1时,便相当于完全不使用缓存的提速功能了,但是需要注意,此时指令和数据依然会先到达缓存。

一次性禁用磁盘写缓存也是可以的,通过条用操作系统提供的一些接口就可以实现,操作系统会利用对应磁盘的驱动程序来将磁盘的写缓存一次性关闭,直到下次磁盘掉电或者Reset位置,禁用效果会一直保持。对于磁盘阵列中的磁盘,写缓存一律禁用。


3、影响磁盘性能的因素

一个磁盘可以由多个盘片,每个盘片正反面都可以存放数据,所以每个盘片有两个磁头,各读写一面。然而有一点需要澄清,磁盘每个时刻只允许一个磁头来读写数据,也就是说,不论你磁盘内盘片,磁头再多,也不可能提高硬盘的吞吐量和IO性能,只能提高容量。

不过也有人致力于改变现状,想让磁头在磁盘内实现并发读写,也就是相当于盘片之间相互形成RAID从而提高性能,目前还没有成型的产品。

影响磁盘性能的因素主要有如下几种:

1、转速:在连续IO情况下,磁头臂寻道次数很少,所以要提高吞吐量或者IOPS的值,转速就是首要的影响因素了

2、寻道速度:这个是影响随机IO(不是连续IO)的首要因素。如果磁头臂能偶以很高的速度更换磁道,那么就会提升随机IOPS值,目前高端磁盘寻道速度都在10ms以下。

3、单碟容量:具有高数据密度的硬盘会显示出更高的性能。

4、接口速度:这是一个影响磁盘性能最 不重要的因素,因为目前的接口速度都满足磁盘所能达到最高的外部传输带宽,在随机IO情况下,瓶颈更是在寻道上,不过高端磁盘都用高速接口的。

4、磁盘接口、磁盘控制器、磁盘驱动器控制电路、磁盘控制器驱动程序、

磁盘接口:包括物理接口和逻辑接口,也就是硬盘接入到磁盘控制器上需要用的接口,具体的针数、某个针脚的作用等待。除了物理的这种接口规范之外,还定义了一套指令系统,叫做逻辑接口。磁盘通过物理的线缆和接口连接到磁盘控制器(在主板上,稍后具体介绍),我们想现在往磁盘上存放一个字母应该怎么操作撒?具体发送什么指令撒?这个问题。。。。就需要业界去定义了,其中指令集定义了“怎么向磁盘发送数据和从磁盘读取数据以及怎么控制其他行为”
比如SCSI 和ATA指令。其中,逻辑接口,也就是SCSI 或者ATA指令集部分,指令实体内容是需要由运行于操作系统内核的驱动程序来生成的,而物理接口的连接,就是磁盘控制器芯片需要负责的,比如ATA控制器或者SCSI控制器。

磁盘控制器:其作用是参与底层的总线初始化、仲裁等过程以及指令传输过程、指令传输状态机、重传、ACK确认等,将这些太过底层的机制过滤掉,从而想驱动程序提供一种简洁的接口。驱动程序只要将要读写的设备号、起始地址等信息,也就是指令描述快(Command Description Block CDB)传递给控制器即可,控制器接受指令并做相应动作,将执行后的结果信号返回给驱动程序。

驱动器控制电路:应该讲磁盘控制器和磁盘驱动器的控制电路区别开来,而至是作用于不同的物理位置的。磁盘驱动器控制电路位于磁盘驱动器上,它专门负责直接驱动磁头臂做运动来读写数据,而主板上的磁盘控制器专门用来向磁盘驱动器的控制电路发送指令,cpu做的仅仅是操作控制器就可以了。现在我们梳理一遍:cpu通过主板上的导线发SCSI或者ATA指令(CDB)给同样处于主板上的磁盘控制器(一般在南桥芯片里),磁盘控制器继而通过线缆将指令发送给磁盘启动器并维护底层指令交互状态机,由磁盘驱动器解析收到的指令从而根据指令的要求来控制磁头臂。

SCSI或者ATA指令CDB是由OS内核的磁盘控制器驱动程序生成并发送的,cpu通过执行磁盘控制器驱动程序生成指令发送给磁盘控制器,控制器收到这些CDB后,会做一定程度的翻译映射工作,生成最低层的磁盘生成最底层的磁盘可接受的纯SCSI指令,然后通过底层的物理操作,比如总总线仲裁,然后编码,再在线缆上将指令发送给对应的磁盘。

磁盘控制器驱动程序:我们来思考一个问题,操作系统在磁盘里面,那么当机器刚刚通上点,操作系统还没有起来,也就是说磁盘控制器驱动程序(集成于操作系统内核里)还没有加载到cpu里面,那么怎么来控制磁盘驱动器读取数据和指令呢?这似乎是一个矛盾的问题,你要去锁着的箱子里拿这把锁的钥匙。。。。。其实方法很简单,你可以在准备一把备用钥匙房子啊箱子外面啊。。

对,电脑也是这么办的,在系统的BIOS中存放了初始化系统所必须的基本代码。在初始化过程中有这么一步,就是去查找磁盘控制器的BIOS地址,然后去执行这个地址上的代码,也就是磁盘控制器的BIOS代码来初始化磁盘控制器。磁盘控制器自己的BIOS可以存放在主板上单独的ROM中,也可以存放在系统BIOS所在的ROM里的一块空间。里面所包含的就是基本的控制器驱动程序,初始化过程中,执行这个驱动程序的结果就是会想系统BIOS报告控制器所掌管的磁盘设备情况。最后通过BIOS通过执行驱动程序而使得CPU可以发送对应的读指令,提取磁盘的0磁道的第一个扇区中的代码载入内存,从而加载操作系统

这个驱动程序很不完善,我们用usb启动系统的时候也是类似的原理。

下面用一个图来说明磁盘控制器驱动程序、磁盘控制器和磁盘驱动器控制电路三者之间的关系:

时间: 2024-08-31 20:20:00

大话存储系列3——磁盘原理的相关文章

大话存储系列5——RAID原理

整理自网络和大话存储2: 1.预备知识:条带化 当多个进程同时访问一个磁盘时,可能会出现磁盘冲突.大多数磁盘系统都对访问次数(每秒的 I/O 操作,IOPS)和数据传输率(每秒传输的数据量,TPS)有限制.当达到这些限制时,后面需要访问磁盘的进程就需要等待,这时就是所谓的磁盘冲突.     避免磁盘冲突是优化 I/O 性能的一个重要目标,而 I/O 性能的优化与其他资源(如CPU和内存)的优化有着很大的区别 ,I/O 优化最有效的手段是将 I/O 最大限度的进行平衡.     条带化技术就是一种

大话存储系列1——对存储的初步认识

这篇文章转载自大牛Hellodba,连接如下:http://www.hellodb.net/2009/08/storage.html 那这篇文章开始我的存储之旅,我将会在近期整理出关于存储的更多细节. IOPS IOPS (Input/Output Operations Per Second),即每秒进行读写(I/O)操作的次数,多用于数据库等场合,衡量随机访问的性能.存储端的IOPS性能和主机端的IO是不同的,IOPS是指存储每秒可接受多少次主机发出的访问,主机的一次IO需要多次访问存储才可以

大话存储系列14——集群文件系统

文件系统是操作系统的一个重要组成部分,通过对操作系统所管理的存储空间的抽象,向用户提供统一的.对象化的访问接口,屏蔽对物理设备的直接操作和资源管理. 根据计算环境和所提供功能的不同,文件系统可划分为四个层次,从低到高依次是: 单处理器单用户的本地文件系统,如DOS的文件系统: 多处理器单用户的本地文件系统,如OS/2的文件系统: 多处理器多用户的本地文件系统,如Unix的本地文件系统: 多处理器多用户的分布式文件系统,如Lustre文件系统. 平时大家有很多叫法:什么集群文件系统.san共享文件

大话存储系列21——存储系统内部IO 上

1.IT系统的IO结构图 2.应用程序层IO 应用层程序是计算机系统内主动发起IO请求的大户,但是要知道,计算机内不止有应用程序可以向底层存储设备主动发起IO请求,其他的,比如文件系统自身.卷管理层自身.适配器驱动层自身等,都可以主动发起IO.当然,只有应用程序发起的IO才可以修改用户实体数据内容,而其他角色发起的IO一般只是对数据进行移动.重分布.校验.压缩.加密等动作,并不会修改用户层面的实际数据内容. 应用程序在读写数据的时候一般是直接调用操作系统所提供的文件系统API来完成文件数据的读写

大话存储系列8——磁盘阵列

JBOD(just a Bound Of  Disk)只是一串磁盘:这就是盘柜,里面没有带RAID 控制器. 而我们说的盘阵(磁盘阵列)是指的自带RAID控制器的盘柜.磁盘阵列将内部的磁盘经过外部SCSI接口连接到主机上段的SCSI接口.此时,整个磁盘对于主机来说,就是主机SCSI总线上的一个或者多个设备,具有一个或者多个SCSI ID.所有的逻辑磁盘都以LUN的形势呈现给主机. hp EVA 和 MSA 的区别 接口不一样嘛! EVA 里面的硬盘接口也是光纤的,而MSA就不是了,用的硬盘是SC

大话存储系列19——数据备份与恢复 下

4.卷克隆(Clone) 克隆是指源数据集某时间点的一份或者几份实实在在的实体复制,利用快照做克隆:首先对某个源数据集(源卷或者源文件系统)创建一份快照,之后将这份快照执行的所有数据块阯出来到一个额外的存储空间,这样,被复制出来的所有数据就组成了源数据集在那个时刻的一个克隆实体. 历史是不能回过头去改变的,但是快照却是可写的(以前我一直以为快照时只读的),其实可写的Snapshot也只不过是对指针的处理而已,即系统增加了一个RoFW数据映射表,比如存储系统将Snapshot也只不过是对指针的处理

大话存储系列11——NAS、DAS、SAN三国争霸

原文转自:http://www.liusuping.com/storage/das-nas-san-cunchu-jishu-bijiao.html 1.什么是NAS 找了一篇非常非常好的文章,把NAS的解释的淋漓尽致,看下面的东西之前,一定要看这篇文章: 转自:http://www.storageonline.com.cn/storage/nas/what-is-the-the-the-the-the-nas/ IT男们经常受到两个消息的折磨:好消息是,有姑娘主动打来电话了:坏消息是,她们只是

大话存储系列18——数据备份与恢复

备份一般会有文件级的备份,还有块级的备份两种,我们接下来先简要了解一下这两种备份的区别. 文件级备份:备份软件只能感知到文件这一层,将磁盘上的所有文件,通过调用文件系统的接口备份到另一个介质上,所以文件级备份软件,要么依靠操作系统提供的API来备份,要么本身具有文件系统的功能,可以识别文件系统元数据.其机制就是将数据以文件的形势独处,然后在将独处的文件存储在另外一个介质上.这些文件在原来的介质上存放可以使不连续的,各个不连续的块之间的链关系由文件系统来管理.如果备份软件将这些文件备份到新的空白介

大话存储系列19——数据容灾

数据备份系统只能保证数据被安全地复制了一份,但是一旦生产系统发生故障,比如服务器磁盘损坏致使数据无法读写.主板损坏造成直接无法开机或者机房火灾等意外事件,我们必须将备份的数据尽快地恢复到生产系统中继续生产,这个动作就叫做容灾. 容灾可以分为四个级别: 数据级容灾:也就是只考虑将生产站点的数据如何同步 到远程站点即可. 与应用结合的数据级容灾:也就是可以保证对应应用程序数据一致性的数据同步,以及可感知应用层数据结构的.有选择的同步部分关键重要数据的数据容灾: 应用级容灾:也就是灾难发生时,不仅可以