近日学习《大话存储》,将自己的一些理解整理到这里。
本文主要分享,硬盘原理,各个接口原理,和磁盘柜的分区及原理概念。
一、IO总线原理
计算机的CPU、内存和硬盘等其他设备的通讯是通过IO总线来实现的,下面就是IO总线的示意图
上图中,CPU与内存中间的是系统总线(前端总线),总线频率想当与CPU向外部存取数据时的数据传输速率,内CPU的自身频率(主频)表示CPU运算时电路产生的频率。
CPU和内存由于足够快,他们之间单独用一条总线连接,这个总线通过北桥芯片连接到其他慢速设备的总线。由于北桥的速度太快,而IO总线的速度相对北桥显得太慢,所以北桥和IO总线中间增加南桥芯片,来连接硬盘控制器和USB设备等。
总线是共享的,既半双工工作模式,同一时刻只能有一个设备接收或者发送信号。所有的设备通过总裁总线或者中断总线上给出的信号来判断这个时刻总线可以由哪个设备来使用。
产生总裁和中断信号的可以是CPU也可以是其他设备,如果CPU需要向某个设备做输出操作,那么就要由CPU主动做中断。如果某个设备请求向CPU发送信号,则由这个设备主动产生中断信号来通知CPU,CPU运行操作系统内核的设备管理程序,产生中断信号。
(此部分参考“大话存储”10页)
二、磁盘结构及原理
磁盘大致由盘片、磁头、马达、底座、电路板等几项组成的。
1、磁头
磁头是完全靠磁盘旋转时,在盘片上空产生的气流,利用空气动力学将其悬于磁片上空。早期的硬盘在每次关机前需要运行一个parking的程序,将磁头回到盘片的最内圈的一个不含磁粒子的区域,(叫做启停区),硬盘不工作,磁头就停留在启停区,当需要从硬盘读取数据时,硬盘就开始旋转,旋转速度达到额定速度时,磁头会因盘片旋转产生的气流抬起来,这时磁头才向盘片中存放数据的区域移动。
早期的磁盘可以使磁头保持在盘片上—几微米—处飞行,目前已经能达到0.005~0.01μm,(注: 1 000 000 微米(μm) = 1 米(m))
磁盘在逻辑上被划分为磁道、柱面以及扇区。每个盘面的每个面都有一个读写磁头,磁头起初停在盘片的最内圈,它不存放数据,称为启停区或者着陆区(Landing Zone)。
启停区外就是数据区,最外圈的就是0磁道,硬盘的数据存放就是从最外圈开始的。
0磁道存放用于操作系统启动所必须的程序代码,PC启动后BOIS程序加载任何操作系统或其他程序时,总是默认从0磁道读取程序代码来运行。
(注:许多磁盘仅仅因为0磁道的损坏就报废的,无法修复)
2、盘面
盘面就是盘面了,没有什么好说的。
盘面分为上下两面。
3、磁道
磁盘在格式化时被划分许多同心圆,既磁道。磁道从最外圈向内圈从0开始编号。在同样的转速下,外圈在相同的时间段里,划过的圆弧长度要比内圈划过的圆弧长度大,所以外圈数据的读写要比内圈快。
4、扇区
将每个磁道等距离切割,形成等长度的圆弧,即为扇区。
每个扇区中的数据作为一个单元,是最小的读写单位,因为磁头只能定位到某个扇区的开头或者结尾。所以一个扇区内部的数据,是连续流式记录的。
划分磁道和扇区的过程,叫做低级格式化,一般硬盘出厂的时候已经格式化完毕了。
高级格式化,是指对磁盘上存储的数据进行文件系统的标记,而不是对磁道和扇区进行磁化标记。
扇区结构图
(问题:同步什么意思)
下图是我们普通使用的硬盘整体分区情况,物理分区和逻辑分区的一个结构图
三、硬盘的接口技术
目前硬盘的结构包括以下几种
●用于ATA指令系统的IDE接口
●用于ATA指令系统的SATA接口
●用于SCSI指令系统的SCSI接口
●用于SCSI指令系统的SCSI(SAS)接口
●用于SCSI指令系统的IBM专用串行SCSI(SSA)接口
●用于SCSI指令系统的并且承载于FabreChannel协议的串行FC(FCP)接口
1、 IDE接口
IDE的英文全称为“Integrated Drive Electronics”,即“电子集成驱动器”,它的本意是指把“硬盘控制器”与“盘体”集成在一起的硬盘驱动器。把盘体与控制器集成在一起的做法减少了硬盘接口的电缆数目与长度,数据传输的可靠性得到了增强,硬盘制造起来变得更容易,因为硬盘生产厂商不需要再担心自己的硬盘是否与其它厂商生产的控制器兼容。对用户而言,硬盘安装起来也更为方便。IDE这一接口技术从诞生至今就一直在不断发展,性能也不断的提高,其拥有的价格低廉、兼容性强的特点,为其造就了其它类型硬盘无法替代的地位。
2、SCSI接口
SCSI的英文全称为“Small Computer System Interface”(小型计算机系统接口),是同IDE(ATA)完全不同的接口,IDE接口是普通PC的标准接口,而SCSI并不是专门为硬盘设计的接口,是一种广泛应用于小型机上的高速数据传输技术。SCSI接口具有应用范围广、多任务、带宽大、CPU占用率低,以及热插拔等优点,
SCSI硬盘主要应用于中、高端服务器和高档工作站中。
(注:一个300G的SCSI硬盘价格,2011年是4500元,146G的价格在1800左右)
在系统中使用SCSI必要要配有专门的SCSI控制器,SCSI卡上有一个相当于CPU的芯片,它对SCSI设备进行控制,能处理大部分工作,减少了CPU的负担。
(大家会发现,PC在复制文件时,CPU的使用率也是很高的)
普通IDE和SATA硬盘的转速一般是5400和7200转,而SCSI的转速是15000和10000两种。
10000转/s的SCSI硬盘的顺序读写速度达到1G/s,但是实际使用的传输速度只有几十兆,原因就是磁头的不停换道导致的。
基本实际使用中10000转/s的80M/s,15000转/s的200M/s
3、光纤接口
光纤通道的英文拼写是Fibre Channel。光纤通道硬盘是为提高多硬盘存储系统的速度和灵活性才开发的,它的出现大大提高了多硬盘系统的通信速度。光纤通道的主要特性有:热插拔性、高速带宽、远程连接、连接设备数量大等。
光纤通道是为在像服务器这样的多硬盘系统环境而设计,能满足高端工作站、服务器、海量存储子网络、外设间通过集线器、交换机和点对点连接进行双向、串行数据通讯等系统对高数据传输率的要求。
(注:不知道大家在哪里遇见过,我没有实际见过)
4、STAT接口
使用SATA(Serial ATA)口的硬盘又叫串口硬盘。2001年,由Intel、APT、Dell、IBM、希捷、迈拓这几大厂商组成的Serial ATA委员会正式确立了Serial ATA 1.0规范,2002年, Serial ATA委员会确立了Serial ATA 2.0规范。Serial ATA采用串行连接方式,串行ATA总线使用嵌入式时钟信号,具备了更强的纠错能力,与以往相比其最大的区别在于能对传输指令(不仅仅是数据)进行检查,如果发现错误会自动矫正,这在很大程度上提高了数据传输的可靠性。
个人认为,SATA对比IDE的最大优势是硬盘线更长,由于IDE并行的特性,注定硬盘线长度受限。
5、SAS接口
SAS(Serial Attached SCSI)即串行连接SCSI,是新一代的SCSI技术,和现在流行的Serial ATA(SATA)硬盘相同,都是采用串行技术以获得更高的传输速度,并通过缩短连结线改善内部空间等。SAS是并行SCSI接口之后开发出的全新接口。此接口的设计是为了改善存储系统的效能、可用性和扩充性,并且提供与SATA硬盘的兼容性。
SAS的接口技术可以向下兼容SATA。具体来说,二者的兼容性主要体现在物理层和协议层的兼容。在物理层,SAS接口和SATA接口完全兼容,SATA硬盘可以直接使用在SAS的环境中,从接口标准上而言,SATA是SAS的一个子标准,因此SAS控制器可以直接操控SATA硬盘,但是SAS却不能直接使用在SATA的环境中,因为SATA控制器并不能对SAS硬盘进行控制;在协议层,SAS由3种类型协议组成,根据连接的不同设备使用相应的协议进行数据传输。其中串行SCSI协议(SSP)用于传输SCSI命令;SCSI管理协议(SMP)用于对连接设备的维护和管理;SATA通道协议(STP)用于SAS和SATA之间数据的传输。因此在这3种协议的配合下,SAS可以和SATA以及部分SCSI设备无缝结合。
SAS系统的背板(Backplane)既可以连接具有双端口、高性能的SAS驱动器,也可以连接高容量、低成本的SATA驱动器。所以SAS驱动器和SATA驱动器可以同时存在于一个存储系统之中。但需要注意的是,SATA系统并不兼容SAS,所以SAS驱动器不能连接到SATA背板上。由于SAS系统的兼容性,使用户能够运用不同接口的硬盘来满足各类应用在容量上或效能上的需求,因此在扩充存储系统时拥有更多的弹性,让存储设备发挥最大的投资效益。
在系统中,每一个SAS端口可以最多可以连接16256个外部设备,并且SAS采取直接的点到点的串行传输方式,传输的速率高达3Gbps,估计以后会有6Gbps乃至12Gbps的高速接口出现。SAS的接口也做了较大的改进,它同时提供了3.5英寸和2.5英寸的接口,因此能够适合不同服务器环境的需求。SAS依靠SAS扩展器来连接更多的设备,目前的扩展器以12端口居多,不过根据板卡厂商产品研发计划显示,未来会有28、36端口的扩展器引入,来连接SAS设备、主机设备或者其他的SAS扩展器。
和传统并行SCSI接口比较起来,SAS不仅在接口速度上得到显著提升(现在主流Ultra 320 SCSI速度为320MB/sec,而SAS才刚起步速度就达到300MB/sec,未来会达到600MB/sec甚至更多),而且由于采用了串行线缆,不仅可以实现更长的连接距离,还能够提高抗干扰能力,并且这种细细的线缆还可以显著改善机箱内部的散热情况。
6、IBM专用串行SCSI(SSA)接口
IOPS
吞吐量与IOPS
业界有不成文规定:只要IO延迟在20ms以内,此时的IO性能对于应用程序来说是可以接受的。
磁盘阵列的瓶颈主要体现在2个方面,吞吐量与IOPS。
1、吞吐量
吞吐量主要取决于阵列的构架,光纤通道的大小(现在阵列一般都是光纤阵列,至于SCSI这样的SSA阵列,我们不讨论)以及硬盘的个数。阵列的构架与每个 阵列不同而不同,他们也都存在内部带宽(类似于pc的系统总线),不过一般情况下,内部带宽都设计的很充足,不是瓶颈的所在。
光纤通道的影响还是比较大的,如数据仓库环境中,对数据的流量要求很大,而一块2Gb的光纤卡,所能支撑的最大流量应当是2Gb/8(小B)=250MB /s(大B)的实际流量,当4块光纤卡才能达到1GB/s的实际流量,所以数据仓库环境可以考虑换4Gb的光纤卡。
最后说一下硬盘的限制,这里是最重要的,当前面的瓶颈不再存在的时候,就要看硬盘的个数了,我下面列一下不同的硬盘所能支撑的流量大小:
10 K rpm 15 K rpm ATA
——— ——— ———
10M/s 13M/s 8M/s
那么,假定一个阵列有120块15K rpm的光纤硬盘,那么硬盘上最大的可以支撑的流量为120*13=1560MB/s,如果是2Gb的光纤卡,可能需要6块才能够,而4Gb的光纤卡,3-4块就够了。
2、IOPS
决定IOPS的主要取决与阵列的算法,cache命中率,以及磁盘个数。阵列的算法因为不同的阵列不同而不同,如我们最近遇到在hds usp上面,可能因为ldev(lun)存在队列或者资源限制,而单个ldev的iops就上不去,所以,在使用这个存储之前,有必要了解这个存储的一些算法规则与限制。
cache的命中率取决于数据的分布,cache size的大小,数据访问的规则,以及cache的算法,如果完整的讨论下来,这里将变得很复杂,可以有一天好讨论了。我这里只强调一个cache的命中 率,如果一个阵列,读cache的命中率越高越好,一般表示它可以支持更多的IOPS,为什么这么说呢?这个就与我们下面要讨论的硬盘IOPS有关系了。
硬盘的限制,每个物理硬盘能处理的IOPS是有限制的,如
10K rpm 15 K rpm ATA
——— ——— ———
100 150 50
同样,如果一个阵列有120块15K rpm的光纤硬盘,那么,它能撑的最大IOPS为120*150=18000,这个为硬件限制的理论值,如果超过这个值,硬盘的响应可能会变的非常缓慢而不能正常提供业务。
在raid5与raid10上,读iops没有差别,但是,相同的业务写iops,最终落在磁盘上的iops是有差别的,而我们评估的却正是磁盘的IOPS,如果达到了磁盘的限制,性能肯定是上不去了。
那我们假定一个case,业务的iops是10000,读cache命中率是30%,读iops为60%,写iops为40%,磁盘个数为120,那么分别计算在raid5与raid10的情况下,每个磁盘的iops为多少。
raid5:
单块盘的
iops = (10000*(1-0.3)*0.6 + 4 * (10000*0.4))/120
= (4200 + 16000)/120
= 168
这里的10000*(1-0.3)*0.6表示是读的iops,比例是0.6,除掉cache命中,实际只有4200个iops
而4 * (10000*0.4) 表示写的iops,因为每一个写,在raid5中,实际发生了4个io,所以写的iops为16000个
为了考虑raid5在写操作的时候,那2个读操作也可能发生命中,所以更精确的计算为:(这里我没有弄清楚)
单块盘的
iops=
(10000*(1-0.3)*0.6 + 2 * (10000*0.4)*(1-0.3) + 2 * (10000*0.4))/120
= (4200 + 5600 + 8000)/120
= 148
计算出来单个盘的iops为148个,基本达到磁盘极限
raid10
单块盘的iops = (10000*(1-0.3)*0.6 + 2 * (10000*0.4))/120
= (4200 + 8000)/120
= 102
可以看到,因为raid10对于一个写操作,只发生2次io,所以,同样的压力,同样的磁盘,每个盘的iops只有102个,还远远低于磁盘的极限iops。
在一个实际的case中,一个恢复压力很大的standby(这里主要是写,而且是小io的写),采用了raid5的方案,发现性能很差,通过 分析,每个磁盘的iops在高峰时期,快达到200了,导致响应速度巨慢无比。后来改造成raid10,就避免了这个性能问题,每个磁盘的iops降到 100左右。