3.1.3 存储性能指标

文学网 时间:2018-09-09 22:56:14

  SAN和NAS存储一般都具备两个评价指标:IOPS和带宽(throughput),两个指标互相又相互关联。体现存储系统性能的最主要指标是IOPS。

  IOPS(I/Os per second):每秒输入输出次数。指的是系统在单位时间内能处理的最大的I/O频度。一般,联机事务处理(OLTP)应用涉及更多的频繁读写,更多地考虑IOPS。

  厂商公布的经常是100%顺序读的IOPS指标,但多数用户实际使用的既有顺序读写也有随机读写操作,传输数据块尺寸大小都有,所以产品在用户实际使用中的性能自然就比标注的指标差。

  SPC(Storage Performance Council)即存储性能理事会。SPC的SPC-1基准测试主要是针对随机I/O应用的,SPC-2基准测试主要是针对顺序I/O应用的。 SPC-1基准测试很好地模拟了OLTP、数据库和E-mail等真实应用,使SPC-1基准测试结果具有很高权威性和可比性。

  SPC-1基准测试虽然了严格的顺序和随机读写比例和数据块尺寸以及在何种磁盘负载情况下取值,但没有被测存储产品使用多少个磁盘,也没有被测存储产品设置何种RAID级别。好在存储性能理事会(SPC)要求测试报告必须详细地列出被测存储系统的配置和价格。

  SPC网站()上公布了大多数存储厂商存储产品的SPC-1基准测试报告,通过查询这些报告中的SPC-1 IOPS?值和测试报告中所描述的被测存储产品的磁盘总数,用户就可以根据下列公式快速估算所采购配置的某一存储产品实际性能和可靠性。

  实际性能(实际SPC-1 IOPS?)= [实际采购存储系统的磁盘数 / 测试报告中被测系统的磁盘数]×测试报告的SPC-1 IOPS?。

  throughput:指的是单位时间内最大的I/O流量;访问一些大量的顺序文件,例如流,更多的考虑throughput指标。

  带宽决定于整个阵列系统,与所配置的磁盘个数也有一定关系;而IOPS则基本由阵列控制器决定。在Web、E-mail、数据库等小文件频繁读写的 下,性能主要由IOPS决定。在视频、测绘等大文件连续读写的下,性能主要由带宽决定。可见,在不同的应用方式中,需要考察的侧重点也不同。对 NAS产品来说,主要性能指数也是两个,OPS和ORT,分别代表每秒可响应的并发请求数和每个请求的平均反应时间。对磁带存储设备来说,单个磁带驱动器 的读写速度是最重要的性能指标。

  平均延时:平均延时就是磁道上的某段数据转到磁头下面需要的时间,这直接由转速决定。比如15000 r/min的硬盘,也就是每秒250 r,每转一圈需要4ms,因此平均延时就是转半圈的时间,等于2ms。

  持续传输速率:服务器硬盘一般在80MB/s,也就是80KB/s(为了方便计算,单位都 用ms)。

  因此,读取一次数据需要的时间等于定位时间(平均延时2ms+寻道4ms)+数据传送时间(要读的数据/80k×ms)。

  通常,使用比较多的I/O模型是同步I/O(Synchronous I/O)。在这种模式下,当请求发出之后,应用程序就会阻塞,直到请求满足为止。这种模式最大好处就是调用应用程序在等待 I/O 请求完成时不需要使用CPU资源。但是,对于一些强调高响应速度的程序(如DB)来说,希望这种等待时间越短越好,这时就可以考虑采用异步 I/O(Asynchronous I/O)模式。异步I/O模式下,进程发出I/O请求后无须等待I/O完成,就可以去处理其他事情;I/O请求被放入一个队列中,一旦I/O完成,系统会 发出信号通知进程。

  异步I/O可以使需要大量写的Oracle进程(如DBWn进程)将I/O请求队列化,以充分利用硬件的I/O带宽,从而使它们能最大程度实现并行 处理。异步I/O还可以使那些需要进行大量计算的操作(如排序)在它们发出I/O请求前预先从磁盘取出数据,以使I/O和计算并行处理。

  准则:数据传送时间 > 5*定位时间;换而言之,数据传输效率大于80%,否则大部分时间都用在寻道定位上显然是不合算的。

  (回想一下十年前的硬盘技术:容量大约是1.2GB;转速大约在5400 r/min;持续传输速率大约在10bps;平均寻道时间大约在15ms)。

  硬盘的技术进步带给持续传输速率好处要远大于平均寻道时间的好处,因此越高级的硬盘,I/O大小要设定的越大才好。

  当多个进程同时访问一个磁盘时,会出现磁盘冲突。大多数磁盘系统都对访问次数(每秒的I/O操作)和数据传输率(每秒传输的数据量)有。当达到这些时,后面访问磁盘的进程就需要等待,这时就是所谓的磁盘冲突。

  避免磁盘冲突是优化I/O性能的一个目标,这就需要将一个热点磁盘上的I/O访问负载分担到其他可用磁盘上,也就是I/O负载均衡。在一些成熟的磁 盘负载均衡技术出现之前,DBA需要了解/预测各系统的I/O负载量,通过手工配置每个数据到不同存放以分担I/O负载来达到负载均衡的目的。

  RAID在市场上的应用,已经不是新鲜的事儿了,很多人都大略了解RAID的基本观念以及各个不同RAID LEVEL的区分。但是在实际应用时,很多使用者仍然无法很确切地选择一个合适的RAID LEVEL,尤其是对于RAID 0+1(10),RAID 3,RAID 5之间的选择取舍,更是举棋不定。

  针对RAID 0+1/10以及RAID 5的工作原理和特性,做一些分析和比较,以列出这些不同RAID阶层所适合的应用,希望对各位能有原则性的帮助。

  在使用数据条切﹝Data Stripping﹞ 的RAID 系统之中,对磁盘驱动器的存取方式,可分为以下两种。

  并行存取模式是把所有磁盘驱动器的主轴马达做精密的控制,使每个磁盘的都彼此同步,然后对每一个磁盘驱动器作一个很短的I/O数据传送,因此,从主机来的每一个I/O 指令,都平均分布到每一个磁盘驱动器。

  为了达到并行存取的功能,RAID中的每一个磁盘驱动器,都必须具备几乎完全相同的规格,转速必须一样、磁头搜寻速度﹝Access Time﹞必须相同、缓冲区(Buffer)或缓存(Cache)的容量和存取速度要一致、CPU处理指令的速度要相同、I/O信道(Channel)的 速度也要一样。总而言之,要利用并行存取模式,RAID中所有的磁盘驱动器,应该使用同一厂牌、相同型号的磁盘驱动器。

  假设RAID有4部相同规格的磁盘驱动器,分别为磁盘驱动器A、B、C和D,再把时间轴略分为T0、T1、T2、T3和T4。

  T0:RAID控制器将第一笔数据传送到A的缓冲区(Buffer),磁盘驱动器B、C和D的Buffer都是空的,在等待中;

  T1:RAID控制器将第二笔数据传送到B的Buffer,A开始把Buffer中的数据写入扇区,磁盘驱动器C和D的Buffer都是空的,在等待中;

  T2:RAID控制器将第三笔数据传送到C的Buffer,B开始把Buffer中的数据写入扇区,A已经完成写入动作,磁盘驱动器D和A的Buffer都是空的,在等待中;

  T3:RAID控制器将第四笔数据传送到D的Buffer,C开始把Buffer中的数据写入扇区,B已经完成写入动作,磁盘驱动器A和B的Buffer都是空的,在等待中;

  T4:RAID控制器将第五笔数据传送到A的Buffer,D开始把Buffer中的数据写入扇区,C已经完成写入动作,磁盘驱动器B和C的Buffer都是空的,在等待中。

  如此循环,一直到把从主机来的这个I/O 指令处理完毕,RAID控制器才会接受处理下一个I/O 指令。重点是在任何一个磁盘驱动器准备好把数据写入扇区时,该目的扇区必须刚好转到磁头下。同时RAID控制器每依次传给一个磁盘驱动器的数据长度,也必 须刚好,配合磁盘驱动器的转速,否则一旦发生失误,RAID性能就大打折扣。

  并行存取RAID之架构,以其精细的马达控制和分布数据传输,将数组中每一个磁盘驱动器的性能发挥到最大,同时充分利用Storage Bus的频宽,因此特别适合应用在以下几种大型、数据连续的档案存取中。

  由于并行存取RAID架构之特性,RAID 控制器一次只能处理一个I/O要求,无法执行重叠的多任务,因此非常不适合应用在I/O次数频繁、数据随机存取、每笔数据传输量小的。同时,因为并行 存取无法执行重叠的多任务,因此没有办法 隐藏磁盘驱动器搜寻(Seek)的时间,而且在每一个I/O的第一笔数据传输时,都要等待第一个磁盘驱动器的旋转延迟(Rotational Latency),平均为旋转半圈的时间,如果使用一万转的磁盘驱动器,平均就需要等待50 us。所以机械延迟时间,是并行存取架构的最大问题。

  相对于并行存取模式,存取模式并不对磁盘驱动器做同步转动控制,其对每个磁盘驱动器的存取,都是且没有顺序和时间间隔的,同时每笔 传输的数据量都比较大。因此,存取模式可以尽量地利用重叠多任务、Tagged Command Queuing等高级功能,来隐藏上述磁盘驱动器的机械时间延迟﹝Seek 和Rotational Latency﹞。

  由于存取模式可以做重叠多任务,而且可以同时处理来自多个主机不同的I/O请求(Requests),在多主机﹝如集群(Clustering)﹞,更可发挥最大的性能。

  由于存取模式可以同时接受多个I/O Requests,因此特别适合应用在以下几种数据存取频繁、每笔数据量较小的系统。

  RAID 10和RAID 01的比较:RAID 10是先做镜像,然后再做条带。RAID 01则是先做条带,然后再做镜像。

  以6个盘为例,RAID 10就是先将盘分成3组镜像,然后再对这3个RAID 1做条带。RAID0 1则是先利用3块盘做RAID 0,然后将另外3块盘作为RAID 0的镜像。

  这种情况中,假设当DISK 0损坏,在剩下的3块盘中,只有当DISK 1一个盘发生故障时,才会导致整个RAID失效,可简单计算故障率为1/3。

  为了方便对比,拿同样多驱动器的磁盘来做对比,RAID 5选择3D+1P的RAID方案,RAID 10选择2D+2D的RAID方案。

  其实在安全性方面,勿须质疑,肯定是RAID 10的安全性高于RAID 5。也可以从简单的分析得出此结论。当盘1损坏时,对于RAID 10,只有当盘1对应的镜象盘也损坏,才导致RAID失效。但是对于RAID 5,剩下的3块盘中,任何一块盘故障,都将导致RAID失效。在恢复的时候,RAID 10恢复的速度也快于RAID 5。

  RAID 10的利用率是50%,RAID 5的利用率是75%。硬盘数量越多,RAID 5的空间利用率越高。

  cache是整个存储的核心所在,即使是中低端存储,也有很大的cache存在,包括最简单的raid卡,一般都包含有几十甚至几百MB的raid cache。

  cache的主要作用是什么呢?体现在读与写两个不同的方面。如果作为写,一般存储阵列只要求写到cache就算完成了写操作,所以,阵列的写 常快速的,在写cache的数据积累到一定程度时,阵列才把数据刷到磁盘,实现批量的写入,至于cache数据的,一般都依赖于镜像与电池(或者是 UPS)。

  cache的读一样不可忽视,因为如果读能在cache中命中的话,将会减少磁盘的寻道,因为磁盘从寻道开始到找到数据,一般都在6ms以上,而这 个时间,对于那些密集型I/O的应用可能不是太理想。但是,如果cache能命中,一般响应时间则可以在1ms以内,两者应该相差3个数量级(1000 倍)。

  RAID 10可供读取有效数据的磁盘个数为4,RAID 5可供读取有效数据的磁盘个数也 为4(校验信息分布在所有的盘上),所以两者的读的性能应该是基本一致的。

  在连续写操作过程中,如果有写cache存在,并且算法没有问题的话,RAID 5比RAID 10甚至会更好一些。(这里要假定存储有一定大小足够写cache,而且计算校验的CPU不会出现瓶颈)。因为此时RAID校验是在cache中完成,如 4块盘的RAID 5,可以先在内存中计算好校验,同时写入3个数据+1个校验。而RAID 10只能同时写入2个数据+2个镜像。

  如图3-4所示,4块盘的RAID 5可以在同时间写入1、2、3到cache,并且在cache计算好校验之后,这里假定是6,同时把3个数据写到磁盘。而4块盘的RAID 10不管cache是否存在,写的时候,都是同时写两个数据与两个镜像。

  根据前面对缓存原理的介绍,写cache是可以缓存写操作的,等到缓存写数据积累到一定时期再写到磁盘。但是,写到磁盘阵列的过程是迟早也要发生 的,所以RAID 5与RAID 10在连续写的情况下,从缓存到磁盘的写操作速度会有较小的区别。不过,如果不是连续性的强连续写,只要不达到磁盘的写极限,差别并不是太大。

  例如Oracle 数据库每写一个数据块的数据,如8KB,由于每次写入的量不是很大,而且写入的次数非常频繁,因此联机日志看起来像是连续写。但是因为不能够添满 RAID 5的一个条带,比如32KB(每张盘都能写入),所以很多时候更加偏向于离散写入(写入到已存在数据的条带中)。

  假定要把一个数字2变成数字4,那么对于RAID 5,实际发生了4次I/O。先读出2与校验6,可能发生读命中,然后在cache中计算新的校验,写入新的数字4与新的校验8。

  这里忽略了RAID 5在那两个读操作的时候,可能会发生读命中操作的情况。也就是说,如果需要读取的数据已经在cache中,可能是不需要4个I/O的。这也证明了 cache对 RAID 5 的重要性,不仅是计算校验需要,对性能的提升也尤为重要。

  当然,并不是说cache对RAID 10就不重要了,因为写缓冲、读命中等,都是提高速度的关键所在,只不过RAID 10对cache的依赖性没有RAID 5那么明显而已。

  可以看到,因为RAID 10对于一个写操作,只发生两次I/O,所以,同样的压力、同样的磁盘,每个盘的IOPS只有102个,还远低于磁盘的极限IOPS。

  这种情况下,仍然假设DISK 0损坏,这时左边的条带将无法读取。在剩下的3块盘中,只要DISK 2、DISK 3两个盘中任何一个损坏,都会导致整个RAID失效,可简单计算故障率为2/3。

  从数据存储的逻辑来看,在正常的情况下,RAID 01和RAID 10是完全一样的,而且每一个读写操作所产生的I/O数量也是一样的,所以在读写性能上两者没什么区别。而当有磁盘出现故障时,比如前面假设的DISK0 损坏时,这两种情况下,在读的性能也将不同,RAID 10的读性能将优于RAID 01。

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如果有侵权请立即联系:1214199132@qq.com,我们立即下架或删除。

热门文章