ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 资源供给:IO子系统之七

资源供给:IO子系统之七

原创 Linux操作系统 作者:sunsapollos 时间:2013-11-25 00:11:04 0 删除 编辑

      随机IO:以数据库而言,以单个block size发布的IO为随机IO,比如db_block_size为4k,8k等
      顺序IO:以数据库而言,以大于单个block size发布的IO都为顺序IO

      磁盘系统:对于磁盘系统来说,并没有随机IO和顺序IO的说法。一般来说,我们这样定义磁盘系统的随机IO:本次IO和上次IO的起始扇区和磁道相差比较大,也就是说需要通过旋转和径向运动来完成的IO表述为随机IO。而对于不需要通过旋转和径向运动来完成的前后两次IO表示为顺序IO。

     也就是说随机或者顺序IO是应用层的概念,而不是硬件层的概念。

    Buffer IO:进行文件系统缓存的IO操作
    Direct IO:bypass文件系统缓存的操作
    同步IO:在IO发布之后等待IO返回结果的操作
    AIO:     在IO发布之后继续下一步处理的IO操作
    CIO:     解除了在IO之上的锁定操作,可以支持同步发布IO的操作

   异步IO并不会提高IO的响应速度,单个IO的响应速度应该比较同步IO慢,但是增加了系统的并发性,并且异步IO有可能实现IO合并会进一步提高吞吐量。  
   异步IO对于磁盘系统提供了更高的IO压力,在IO能力有限的系统可能会带来负面的作用。

   CIO是通过解除文件系统锁定或者lv锁定来完成并发性的提高的。

   Lun:   存储系统提供给主机的逻辑磁盘
  lvm: 对于Lun进行进一步的管理以方便使用,以LV的形式提供给用户使用,利用LV可以方便的对于LUN进行访问
   文件系统:文件系统一般以page 4k为单元进行组织
   块设备:   一般以4k为单元进行组织
  字符设备: 需要进行扇区对齐,必须是扇区的整数倍
 
  条带化的目的:
   (1)、增加并行处理能力,每张磁盘只能同时支持一个IO,为了并行必须提供更多的磁盘,条带化使数据均匀的分布在不同的磁盘中增加并发能力。
   (2)、提供吞吐量,每张磁盘的吞吐量是有限的,为了某个目的的吞吐量,必须多张磁盘合并提供。

  条带宽度: 有多少磁盘参与条带化
  条带大小: strip size,每个磁盘上分配的大小

SAME,Oracle推荐的标准配置。Stripe and mirror everywhere。ASM遵循SAME配置。

比如我们假设要访问一张10GB的表格,希望其再1分钟内返回(不考虑其他成本),那么需要提供每秒170M的吞吐量。一般来说,目前的磁盘系统内部数据传输可以达到100M/s的速度,显然无法满足吞吐量的需求。显然两张磁盘就可以满足需求。我们需要提供条带化来使其提供并行能力。

这里我们来看,一般对于lvm有max_io_size限制,对于磁盘系统一般也具有max_io_size,大部分系统在1M,2M或者4M。我们假设为1M。也就是我们系统发布过来的1M的一次IO需要在两块磁盘上得到满足,每个磁盘提供512K的能力。

好的,现在就是条带宽度:=2,条带深度(大小):=512K

当我们需要100GB的数据在1分钟之内返回的时候显然需要跟多的磁盘支持,比如16张。同样是1M的IO,需要的条带大小就是64K。

事实上可以看到如果我们需要高带宽的操作,4M的max_io_size将远远超过1M的max_io_size。


在实践中需要注意,无论是卷管理器还是存储系统都有其擅长条带宽度和条带大小,最好落在该范围之内。


raid 1
raid 1+0
raid 5
一般来说,raid 1,raid 1+0和raid 5为目前流行的配置。对于Netapp的存储可能会配置在raid 6,EMC的存储可能会提供Raid S。

我一直以为ASM提供基于条带话的并行能力,但依据吕海波先生的测试,ASM不提供条带化并行驱动能力。比如ASM缺省的AU size := 1M,stripe width:=8 stripe size:= 128k
Oracle对于单个的1M IO将采取串行读取方式,也就是依次读取128K,读取8次才结束。吕海波的这个测试结果非常意外,这个测试结果意味着ASM无法高带宽的吞吐量,在数据仓库类olap类应用中可能会存在问题,也就是说需要在硬件层次上通过Raid 0来提供条带化并行驱动能力。

基于这个特性,缺省ASM设置可能会对于olap和数据仓库类应用带来问题。更好的方式为:无论是否在硬件层次提供条带化,对于数据仓库类应用提供更高的AU size,比如4M,8M等。 

一直以为卷管理器的Raid 0提供并行处理能力,ASM的测试让我对于vxvm,lvm等raid 0设置是否可以条带并行化产生动摇,需要通过具体测试才可以确定。

按照某个观点,块设备无论是写的数据大小多大,比如256K,也是按照4K大小顺序发送到接口队列中,如果基于这个观点,也许真的所有的卷管理器都无法提供条带化的并行能力,条带化仅仅使提供更高的iops。
 
磁盘阵列的cache:
      磁盘阵列的cache对于存储系统是非常重要的,尤其是Raid 5配置的系统,缺乏cache的支持将导致随机写IO不可忍受的缓慢。
      cache失效是磁盘系统无法承受压力的一个基本表现,cache失效的意思就是存储系统的cache处理无法跟上业务系统的IO压力,导致需要的读数据总是无法在cache中找到,写数据总是无法发现空闲的空间。大家可以发现在cache失效的前提下,有cache的表现会比较没有cache的表现还要差。
     存储系统的cache作为二级cache,一般来说要达到一级cache(Oracle SGA)的命中率一般不太可能,但一般来说也希望可以达到50%以上的命中率,最好可以达到70%以上。

磁盘阵列cache的问题:
    业务是可以快速增长的,但磁盘系统的cache是有限的,cache很有可能无法支撑高峰期的IO压力。
    我们在高吞吐量压力系统几乎总是建议采用Raid 1+0,避免Raid 5系统,配置足够多的磁盘来提供真实IO带宽。

磁盘阵列cache失效的简单判断:
   如果io的响应速度达到了磁盘的一般速度,比如10ms左右,一般认为cache已经完全失效了。对于cache良好的存储系统,一般需要1ms一下,也许3ms是cache问题的一个分界线。
    
   

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/92650/viewspace-777459/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
专注于Oracle,BI,Security,DR &^BCP,Performance tuning

注册时间:2013-10-15

  • 博文量
    68
  • 访问量
    726260