文档密级1谈谈IOPS文档密级21、IOPS详解磁盘性能指标--IOPS理论机械硬盘的连续读写性很好,但随机读写性能很差。这是因为磁头移动至正确的磁道上需要时间,随机读写时,磁头不停的移动,时间都花在了磁头寻道上,所以性能不高。如下图:IOPS(Input/OutputPerSecond)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求。随机读写频繁的应用-----IOPS是关键衡量指标如小文件存储(图片)、OLTP数据库、邮件服务器,关注随机读写性能。读取10000个1KB文件,用时10秒Throught(吞吐量)=1MB/s,IOPS=1000追求IOPS顺序读写频繁的应用-----数据吞吐量是关键衡量指标传输大量连续数据,如电视台的视频编辑,视频点播VOD(VideoOnDemand),关注连续读写性能。读取1个10MB文件,用时0.2秒Throught(吞吐量)=50MB/s,IOPS=5追求吞吐量磁盘服务时间传统磁盘本质上一种机械装置,如FC,SAS,SATA磁盘,转速通常为5400/7200/10K/15K文档密级3rpm不等。影响磁盘的关键因素是磁盘服务时间,即磁盘完成一个I/O请求所花费的时间,它由寻道时间、旋转延迟和数据传输时间三部分构成。寻道时间Tseek是指将读写磁头移动至正确的磁道上所需要的时间。寻道时间越短,I/O操作越快,目前磁盘的平均寻道时间一般在3-15ms。常见磁盘平均物理寻道时间为:7200转/分的STAT硬盘平均物理寻道时间是10.5ms10000转/分的STAT硬盘平均物理寻道时间是7ms15000转/分的SAS硬盘平均物理寻道时间是5ms旋转延迟Trotation是指盘片旋转将请求数据所在扇区移至读写磁头下方所需要的时间。旋转延迟取决于磁盘转速,通常使用磁盘旋转一周所需时间的1/2表示。常见硬盘的旋转延迟时间:7200rpm的磁盘平均旋转延迟大约为60*1000/7200/2=4.17ms10000rpm的磁盘平均旋转延迟大约为60*1000/10000/2=3ms,15000rpm的磁盘其平均旋转延迟约为60*1000/15000/2=2ms。数据传输时间Ttransfer是指完成传输所请求的数据所需要的时间,它取决于数据传输率,其值等于数据大小除以数据传输率。常见硬盘接口的数据传输率IDE/ATA能达到133MB/sSATAII可达到300MB/sSAS在300-600MB/s之间数据传输时间通常远小于前两部分消耗时间。简单计算时可忽略。最大IOPS的理论计算方法:IOPS=1000ms/(寻道时间+旋转延迟)。可以忽略数据传输时间。7200rpm的磁盘IOPS=1000/(10.5+4.17)=68IOPS10000rpm的磁盘IOPS=1000/(7+3)=100IOPS15000rpm的磁盘IOPS=1000/(5+2)=142IOPS文档密级42、吞吐量与IOPS进行分析1、吞吐量(throughput)吞吐量主要取决于阵列的构架,光纤(FCSAN)或网络(IPSAN)通道的大小以及硬盘的个数。阵列的构架与每个阵列不同而不同,他们也都存在内部带宽(类似于pc的系统总线),不过一般情况下,内部带宽都设计的很充足,不是瓶颈的所在。光纤通道的影响还是比较大的,如数据仓库环境中,对数据的流量要求很大,而一块2Gb的光纤卡,所能支撑的最大流量应当是2Gb/8(小B)=250MB/s(大B)的实际流量,需要4块光纤卡才能达到1GB/s的实际流量,所以数据仓库环境可以考虑换4Gb的光纤卡。最后说一下硬盘的限制,这里是最重要的,当前面的瓶颈不再存在的时候,就要看硬盘的个数了,我下面列一下不同的硬盘所能支撑的流量大小(数据取自硬盘厂商的标准参数):硬盘类型SASATA转速规格10K15K流量10M/s13M/s8M/s那么,假定一套存储有120块15Krpm的光纤硬盘,那么该存储可以支撑的最大流量为120*13=1560MB/s,如果是2Gb的光纤卡,可能需要6块才能够,而4Gb的光纤卡,3-4块就够了。2、IOPS(Input/OutputOperationsPerSecond)决定IOPS的主要取决与阵列的算法,cache命中率,以及磁盘个数。阵列的算法因为不同的阵列不同而不同。cache的命中率取决于数据的分布,cachesize的大小,数据访问的规则,以及cache的算法,如果一个阵列,读cache的命中率越高越好,一般表示它可以支持更多的IOPS,为什么这么说呢?这个就与我们下面要讨论的硬盘IOPS有关系了。硬盘类型SASATA转速规格10K15KIOPS10015050同样,如果一个阵列有120块15Krpm的SAS硬盘,那么,它能撑的最大IOPS为120*150=18000,这个为硬件限制的理论值,如果超过这个值,硬盘的响应可能会变的非常缓慢而不能正常提供业务。文档密级53、Cache以及命中率Cache:高速缓冲存储器,一种特殊的存储器子系统;主要作用:复制了频繁使用的数据以利于快速访问。是把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。Cache命中率与容量的关系Cache的命中率随它的容量的增加而提高,它们之间的关系曲线如图5.34所示。在Cache容量比较小的时候,命中率的提高得非常快,随着Cache容量的增加,命中率提高的速度逐渐降低。当Cache容量增加到无穷大时,命中率可望达到100%,但是,这在实际上是做不到的。下图是cache命中率的关系。Cache命中率与块大小的关系在采用组相联映象方式的Cache中,当Cache的容量一定时,块的大小对命中率的影响非常敏感。图5.35表示随着Cache块的由小到大的变化,命中率上升和下降的情况。图5.35Cache命中率与块大小的关系文档密级6开始时,块大小很小,例如只有一个存储单元,这时的命中率H很低。随着块大小的增加,由于程序的空间局部性起作用,同一块中数据的利用率比较高,因此,Cache的命中率增加。这种增加趋势在某一个最佳块大小处达到最大值。在这一点以后,命中率随着块大小的增加反而减小。实际上,当块大小非常大时,进入Cache中的许多数据可能根本用不上。而且,随着块大小的增加,程序时间局部性的作用就会逐渐减弱。最后,当块大小等于整个Cache的容量时,命中率将趋近于零。Cache命中率与组数的关系当Cache的容量一定时,在采用组相联映象和变换方式的Cache中,分组的数目对于Cache命中率的影响是很明显的。随着组数的增加,Cache的命中率要降低。当分组的数目增加时,主存中的某一块可以映象到Cache中的块数就将减少,从而导致命中率下降。文档密级74、浅谈RAID写惩罚(WritePenalty)与IOPS计算通常在讨论不同RAID保护类型的性能的时候,结论都会是RAID-1提供比较好的读写性能,RAID-5读性能不错,但是写入性能就不如RAID-1,RAID-6保护级别更高,但写性能相对更加差,RAID10是提供最好的性能和数据保护,不过成本最高等等。其实决定这些性能考虑的因素很简单,它就是RAIDWritePenalty(写惩罚)。本文从原理上解释了不同RAID保护级别的写惩罚,以及通过写惩罚计算可用IOPS的方法。存储方案规划的过程中,最基本的考虑因素有两个,性能和容量。性能上的计算看可以分为IOPS和带宽需求。计算IOPS,抛开存储阵列的缓存和前端口不谈。计算后端物理磁盘的IOPS不能简单的把物理磁盘的最大IOPS相加而获得。原因是,对于不同的RAID级别,为了保证当有物理磁盘损坏的情况下可以恢复数据,数据写入的过程中都需要有一些特别的计算。比如对于RAID-5,条带上的任意磁盘上的数据改变,都会重新计算校验位。如下图所示,一个7+1的RAID-5的条带中,七个磁盘存储数据,最后一个磁盘存储校验位。对于一个数据的写入,我们假设在第五个磁盘上写入的数据为1111,如下图所示。那么整个RAID-5需要完成写入的过程分为以下几步:文档密级81.读取原数据0110,然后与新的数据1111做XOR操作:0110XOR1111=10012.读取原有的校验位00103.用第一步算出的数值与原校验位再做一次XOR操作:0010XOR1001=10114.然后将1111新数据写入到数据磁盘,将第三步计算出来的新的校验位写入校验盘。由上述几个步骤可见,对于任何一次写入,在存储端,需要分别进行两次读+两次写,所以说RAID-5的WritePenalty的值是4不同RAID级别的WritePenalty:RAID-0:直接的条带,数据每次写入对应物理磁盘上的一次写入RAID-1和10:RAID-1和RAID-10的写惩罚很简单理解,因为数据的镜像存在的,所以一次写入会有两次。RAID-5:RAID-5由于要计算校验位的机制存在,需要读数据、读校验位、写数据、写校验位四个步骤,所以RAID-5的写惩罚值是4。RAID-6:RAID-6由于有两个校验位的存在,与RAID-5相比,需要读取两次校验位和写入两次校验位,所以RAID-6的写惩罚值是6。RAIDLevelWriteCost011or1025466文档密级95、计算IOPS根据上文的描述,在实际存储方案设计的过程中,计算实际可用IOPS的过程中必须纳入RAID的写惩罚计算。计算的公式如下:物理磁盘总的IOPS=物理磁盘的IOPS×磁盘数目可用的IOPS=(物理磁盘总的IOPS×写百分比÷RAID写惩罚)+(物理磁盘总的IOPS×读百分比)假设组成RAID-5的物理磁盘总共可以提供500IOPS,使用该存储的应用程序读写比例是50%/50%,那么对于前端主机而言,实际可用的IOPS是:(500×50%÷4)+(500*50%)=312.5IOPS影响测试的因素实际测量中,IOPS数值会受到很多因素的影响,包括I/O负载特征(读写比例,顺序和随机,工作线程数,队列深度,数据记录大小)、系统配置、操作系统、磁盘驱动等等。因此对比测量磁盘IOPS时,必须在同样的测试基准下进行,即便如此也会产生一定的随机不确定性。文档密级106、案例分析业务的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=16810000*(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。一个恢复压力很大的standby(这里主要是写,而且是小i