Chinaunix首页 | 论坛 | 博客
  • 博客访问: 804889
  • 博文数量: 127
  • 博客积分: 2669
  • 博客等级: 少校
  • 技术积分: 1680
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-23 11:39
文章分类

全部博文(127)

文章存档

2014年(5)

2013年(19)

2012年(25)

2011年(9)

2010年(25)

2009年(44)

分类:

2009-10-23 12:02:58

嘿嘿,前不久听EMC的一个讲座,其中有一个讲座是讲磁盘阵列性能调优的一些原则的。感觉非常实战,很多原则性的东西非常有用。回来整理了一下,发给大家共享。虽然不是100%原创,但确实感觉内容不错才给整理出来的哦

应该是分成两部分,一部分讲随机IO,一部分讲顺序IO环境。现在只整理出了随机IO,先给大家看看,欢迎大家拍砖讨论:

EMC创新日:随机环境系统性能调优指南

理解随机IO和顺序IO的特点

   对于随机应用来说,大部分是一些数据库的应用,此外,Oracle ASM也是属于随机应用,但每个IO段都比较大,所以导入起来时间比较长。除了随机应用,系统中通常还会有顺序读写的IO应用,一般来说在归档、视频等等 的应用比较常见。它们对性能的要求是不太一样的,规模也是不一样的。针对这两种IO特点,我们通常由一些配置的原则,但不见得哪一种是贯穿的。

   随机应用要求是响应时间,我们每一个IO都希望在几毫秒内完成,然后才可以进行下一个IO操作。顺序读写要求带宽比较高,这种情况下,一个IO过来,很 可能一读就占了几M或者十几M,这时候一个IO的操作就占用了整个阵列。其他IO就会被迫排在它的后面,顺序IO就占用了太多的资源,并占用了其他IO的 资源。例如本来在1秒钟可以处理1000个IO,现在只能处理700个IO。所以我们就建议不要把顺序读写放在同一个磁盘上面,但是我们可以把它放在一排 阵列上面没有问题,最好用不同的磁盘来分散IO压力。

性能调优的通用原则

详细分析随机环境下的IO特点之前,我们会先给出一些存储系统调优最基本的原则。这些原则基本适用于大多数应用环境,无论是随机IO的环境还是顺序IO的环境。

  读Cache设置:一 般会认为读cache在阵列中是提高性能的非常有用的措施,对于一些应用来说,大部分时候读cache的确非常有效。但是一个原则是不要分配太多的读 Cache给系统,一般日常的工作状态中,分配20%左右的读Cache就已经足够了。原因有两点,首先,在随机IO的应用状态下,我们不能保证所需要读 取的IO能在缓存中命中。其次,在顺序IO的读取过程中,从磁盘中读取IO的速度并不慢,先读到缓存中对整体读取速度的提高没有太明显的影响。因此,通常 的一个标准就是,读缓存设置20%左右就足够了。

  选型配制时不仅需要考虑容量,还需要考虑性能:其次,当我们在进行存 储选型或者配置的时候,我们不仅仅需要考虑存储系统的容量,我们还需要考虑性能的因素。举个例子来说,从容量的角度,我们可能4块磁盘就足够满足应用,另 外一个方面四块磁盘不一定能够满足我们对IO性能的要求。举例来说,一块15K转硬盘在非常随机的IO状态下能提供180个IOPS,如果是4块盘,大概 就只有720个IOPS,究竟是否能满足性能的需要?

  系统盘中是否能够存放应用数据?此外,CLARiiON中有5块 盘作为系统盘使用。应该说,系统盘中其实有一定的空间给我们使用,我们同样可以应用系统盘中间的空间进行编组,划分LUN。但这是在IO的压力并不是十分 大的情况下,应用系统盘的空间对阵个系统的影响不大。当IO压力很大的时候,我们不建议把应用的LUN放到系统盘上面,会导致整体系统的响应速度变慢。

   而且有一种情况,在阵列中有一个HA VAULT选项,这个选项的作用就是当系统盘一旦出现故障以后,这个选项能够自动将cache里面的数据文本下载到系统盘上面去,如果这时候系统盘还有其 他的应用在访问,这时候系统要同时把数据从cache里面DOWN到磁盘里面,两个应用都在系统磁盘上操作,这样速度也会变慢。当然这个选项可以取消它, 但带来的负面因素就是,当系统出现故障的时候,无法自动的把数据从cache下载到磁盘里面,可靠性会降低。

  选择合适的磁盘类型:当进行存储选型的时候,我们通常会有FC、SAS和SATA几种磁盘类型。FC盘和SAS盘等适用于关键实时应用, SATA盘性能比较低,我们通常用在归档的环境。但是如果你的访问是顺序的,基本上一个访问,你这时候你可以用SATA盘。
 
把不同的随机应用混在一起

  下面我们重点讨 论一下随机IO的应用。对于一些用户来说,往往很疑惑,我有几个不同的随机IO的应用,对于这些不同的随机IO的应用,我们要不要分在不同的RAID组, 或者不同的LUN中。其实对于存储系统来说,我们会发现,不同的随机IO即使混合在一起,也同样是随机的IO,对于这些不同的应用,我们即使划分在一个 RAID组或者LUN里面,对单个应用的性能都不会有太多的影响。

  此外,随机IO应用的高峰期通常不会完全重合,当随机IO处于高峰 期的时候相互之间的确会产生影响,因此对于用户来说,我们需要注意的就是,如果同时有两个随机IO的应用高峰期大致相同,且其中一个的应用对性能的要求很 高,需要有一定的资源保证,在这种情况下,我们需要把这个应用独立出来划分LUN。如果这些随机IO的高峰期并不是非常一致,且没有需要保证高性能的应用 的情况下,我们可以大胆的把这些应用混在一起,这样我们能够用更多的磁盘来担负多个应用的IO需求,不仅不会对性能造成影响,还能有效的消除热点。


不同的随机应用混合在一起还是随机应用

   我们关注一下数据库的应用,对于关系型数据库来说往往LOG是比较重要的,我们通常会单独划分空间来保存LOG,在需要很高性能的时候这样做的确是必须 的而且是有效的。但是如果系统对性能要求并不十分苛刻的话,我们其实可以大胆的把LOG和数据放到一起,因为它占用性能的影响其实没有我们想象那么大。很 多时候,LOG都是顺序的少量的写IO,通常IO写到Cache里面,读的话不会占用所有的cache。当我们把LOG和数据放到一起,我们能用更多的磁 盘来完成LOG读写IO的操作,此外,LOG本身对性能的影响本身也并不十分明显。因此我们建议,在对性能没有苛刻要求的情况下,完全可以把非关系型数据 库的LOG和数据放到一起。


两个不同数据库的LOG和数据交叉存放

  一个实用的技巧,是把两个不同的数据库的LOG和数据交叉存放,来保护数据或者错峰使用。
 
选择什么样的RAID级别?

  对于随机IO的分布来说我们还需要考虑我们到底选择什么样的RAID级别,不同的RAID级别对磁盘的要求是不同的,对于综合性能来说,RAID是最值得期待的。

   通常RAID5是一个综合成本和性能的很好的选择,但是我们什么情况下需要采用RAID0+1呢?实际上一般的应用来说,占绝大多数的都是读IO,其中 写IO通常占到10%左右。但是,当我们分析写IO超过20%的时候,我们就应该考虑采用RAID0+1,这种情况下,如果不要求太高的性能,RAID5 也是可以接受的。但是当写IO超过了40%左右,那么我们就必须考虑采用RAID0+1了。

  因为不同的RAID方式对磁盘产生的 IO(Disk IO)是不同的。举例来说,一个四块磁盘的RAID5要做一个写操作时,所产生的磁盘IO实际上是4个,包括2个读IO和2个写IO。而同样一个写IO, 在一个四块磁盘的RAID 0+1组中,所产生的磁盘IO实际上只有2个,实际上只需要同时写到两个磁盘中就可以了。因此,当一个应用中的写IO越高,那么对于RAID5和 RAID0+1的性能影响就会体现的越明显。

  那什么时候使用RAID6呢,首先要求写操作的比率比较低,低于15%的时候可以考虑使 用RAID6。读操作的时候RAID5和RAID6相差不多,但是它比RAID5对系统的影响更大,因为一个post IO通常会在后端产生6个磁盘IO。所以,首先RAID 6在写IO操作并不十分多的情况下应用会比较好,另外就是应用在数据完整性方面的要求的确非常高。



相同应用下不同的RAID级别的性能差别

   如图的这个案例,2100个IOPS,其中30%的写IO,在RAID0+1的情况下,磁盘利用率达到70%,响应时间13ms,而换到RAID5的情 况下,磁盘利用率就达到了92%,响应时间变成了62ms,很多应用都不能接受62ms的响应时间。而对于RAID6来说,写操作完全没办法满足应用要 求。

  RAID条带宽度对性能会带来什么影响呢?RAID条带宽度主要与RAID组的磁盘数据是有关系的。一般来说,一个磁盘片的宽度 是64K,如果是3+1的RAID组就是64K*3,7+1的RAID组就是64K*7。在随机应用的环境中,带宽对整体性能并没有明显的影响。但是当一 个RAID组中的磁盘数量过多的时候,在磁盘出现故障需要重建的时候,磁盘会当机。
 
矫正偏移量

  另外有一个很关 键的问题就是偏移量(Alignment),偏移量基本上产生在WINDOWS平台,或者Wintel架构中。因为在WINDOWS平台里面,每个磁盘都 留有一部分空间用来存放分区表,系统在启动的时候会有很多的信息在里面,一般为32K。由于我们知道一个盘片的基本容量在64K,那么这个盘片还有32K 的可用空间。当一个大于32K的写IO过来的时候,这时候就需要2个磁盘或者更多的磁盘来完成这个IO操作,这就是偏移量。

  偏移量对 系统的整体性能有非常大的影响,那么我们通过什么方式能够调整呢?对于wintel的架构,我们可以通过diskpar工具来设定偏移量,例如将数据块大 小设为64K,这样写操作的时候,数据将自动从第二块磁盘去写入。在虚拟机的环境下,如果是RDM的LUN环境,我们可以在虚拟机层面使用diskpar 工具工具设定偏移量,如果是VMFS的LUN环境,我们需要先在ESX上使用FDISK,然后在虚拟机层面使用diskpar工具工具设定偏移量。

  偏移量是个很重要的问题,但很多用户会很容易忽视它。我们举个例子来说明,在没有矫正偏移量的情况下,系统性能会损失多少。一般来说,最常用的数据块大小除以64,就是我们损失的性能比。如果常用数据块为8K,那么损失的性能为8/64=12.5%。

Oracle ASM环境下性能调优

  对于Oracle ASM的环境,一般来说是大数据块的随机写入。如果我们对系统进行优化,通常会自动的把数据拆分成小数据块,例如8K、16K,对于这些小数据块来说主要是顺序读写,尽管整个大的数据块保持了随机读写的特性。在这种环境下,我们需要注意:

  无论对于R26以前或者以后的版本,首先每一个RAID组设置1 或2 LUNs。
  对于R26以前版本
– RAID 1/0 条带化成256 blocks时性能最好(需要在命令行或工程模式下进行)
– 2+2, 4+4 的条带吻合I/O 块大小
– 对齐偏移量! 比小数据块的随机访问环境更关键
– 把数据LUN的读高速缓存关掉-- 基本用不上

  在Release 26及更高版本, CLARiiON支持‘multi-stripe read’
– RAID 1/0 2+2 的配置比较合适,可以让磁盘支持大的数据块读操作(高达512 KB).
– 使用条带化的MetaLUN, 8的倍数来获得更大的分区和分散热点数据
– 支持发送1MB的I/O到成员LUN上, 每个磁盘的处理I/O高达512 KB。
 
随机访问性能调优规则总结

  最后我们总结一下在随机访问的时候获得最高性能的一些规则。

  首先是缓存:

  把缓存页面设置成主导I/O的大小,在混合环境中建议使用8KB大小。但需要注意的是,改变缓存页面大小必须关闭高速缓存,须预先计划影响

  如果系统的写操作响应时间较长,把缓存水平线的阀值降低。这样做的好处包括:简单,无需中断;在高速缓存中预留更大的空间,以应付写操作的高峰。但需要注意的是,水平线的高值应该比低值高20%。

  此外我们可以关闭随机访问的LUN上的预读功能,因为一些文件系统对数据的存取导致大量的预读操作,但是并没有帮助,而且这样做简单,无需中断。

  对一些有随机特征的顺序操作(常见于媒体应用),应该增加预读的功能。中央视频监控是一种典型的例子,而且这样做同样简单并无需中断。

  此外,对磁盘数量大小的设定也对性能有明显的影响,一般来说,单个磁盘臂提供的IOPS决定随机存取的性能。在进行选型之前,我们需要计算计算所需IOPS的性能需求,包括主机产生的压力及RAID算法额外产生的I/O负荷。

  下面提供一些经验数据值,在70%使用率,非常随机的读取目标情况下:
   15K rpm FC/SAS能够提供180 IOPS,10K rpm FC/SAS能够提供140 IOPS,7.2K rpm SATA能够提供80 IOPS。因此用户需要根据根据IOPS的需求决定支持的磁盘数,然后选择相应的阵列,很多用户会用到阵列所支持的最大磁盘数。
阅读(796) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~