3.1.3存储性能指标

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3.1.3存储性能指标
3.1.3 存储性能指标
3.1.3.1 存储性能指标:IOPS和带宽(throughput)
SAN和NAS存储一般都具备两个评价指标:IOPS和带宽(throughput),两个指标互相独立又相互关联。

体现存储系统性能的最主要指标是IOPS。

IOPS(I/Os per second):每秒输入输出次数。

指的是系统在单位时间内能处理的最大的I/O频度。

一般,联机事务处理(OLTP)应用涉及更多的频繁读写,更多地考虑IOPS。

IOPS测试结果与很多测试参数和存储系统的具体配置有关。

IOPS 还可以细分为100%顺序读(Sequential Read)IOPS、100%顺序写IOPS、100%随机读IOPS、100%随机写IOPS等,在同等情况下这4种IOPS中100%顺序读的 IOPS最高。

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

较权威的存储性能基准测试有SPC和SPC-1 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?。

可靠性:MTTFarray=MTTFdisk / 实际采购存储系统的磁盘数。

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

带宽决定于整个阵列系统,与所配置的磁盘个数也有一定关系;而IOPS则基本由阵列控制器决定。

在Web、E-mail、数据库等小文件频繁读写的环境下,性能主要由IOPS决定。

在视频、测绘等大文件连续读写的环境下,性能主要由带宽决定。

可见,在不同的应用方式中,需要考察的侧重点也不同。

对 NAS产品来说,主要性能指数也是两个,OPS和ORT,分别代表每秒可响应的并发请求数和每个请求的平均反应时间。

对磁带存储设备来说,单个磁带驱动器的读写速度是最重要的性能指标。

3.1.3.2 硬盘性能指标与高效I/O
转速:当前的服务器硬盘一般都是15000 r/min。

平均延时:平均延时就是磁道上的某段数据转到磁头下面需要的时间,这直接由转速决定。

比如15000 r/min的硬盘,也就是每秒250 r,每转一圈需要4ms,因此平均延时就是转半圈的时间,等于2ms。

平均寻道时间:服务器硬盘一般平均寻道时间是4ms。

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

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

不同I/O的数据传输效率见表3-2。

表3-2 I/O大小与数据传输效率
3.1.4 RAID的I/O特性
3.1.
4.1 同步和异步I/O
通常,使用比较多的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和计算并行处理。

确认操作系统已经设置支持异步I/O后,还需要设置Oracle初始化参数"DISK_ ASYNCH_I/O"为"true"以支持异步I/O。

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

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

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

3.1.
4.2 负载均衡及条带化
当多个进程同时访问一个磁盘时,会出现磁盘冲突。

大多数磁盘系统都对访问次数(每秒的I/O操作)和数据传输率(每秒传输的数据量)有限制。

当达到这些限制时,后面访问磁盘的进程就需要等待,
这时就是所谓的磁盘冲突。

避免磁盘冲突是优化I/O性能的一个目标,这就需要将一个热点磁盘上的I/O访问负载分担到其他可用磁盘上,也就是I/O负载均衡。

在一些成熟的磁盘负载均衡技术出现之前,DBA需要了解/预测各系统的I/O负载量,通过手工配置每个数据到不同存放位置以分担I/O负载来达到负载均衡的目的。

条带化技术就是将数据分成很多小部分并把它们分别存储到不同磁盘上的不同文件中去。

这就能使多个进程同时访问数据的多个不同部分而不会造成磁盘冲突。

很多操作系统、磁盘设备供应商、各种第三方软件都能做到条带化。

通过条带化,DBA可以很轻松地做到I/O 负载均衡,而无须去手工配置。

3.1.
4.3 RAID的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 系统之中,对成员磁盘驱动器的存取方式,可分为以下两种。

并行存取﹝Paralleled Access﹞。

独立存取﹝Independent Access﹞。

RAID 2和RAID 3 是采取并行存取模式,RAID 0、RAID 4、RAID 5及RAID 6则是采用独立存取模式。

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

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

总而言之,要利用并行存取模式,RAID中所有的成员磁盘驱动器,应该使用同一厂牌、相同型号的磁盘驱动器。

2.并行存取的基本工作原理
假设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性能就大打折扣。

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

影像、视讯文件服务器。

数据仓储系统。

多媒体数据库。

电子图书馆。

印前或底片输出文件服务器。

其他大型且连续性文件服务器。

由于并行存取RAID架构之特性,RAID 控制器一次只能处理一个I/O要求,无法执行重叠的多任务,因此非常不适合应用在I/O次数频繁、数据随机存取、每笔数据传输量小的环境。

同时,因为并行存取无法执行重叠的多任务,因此没有办法"隐藏"磁盘驱动器搜寻(Seek)的时间,而且在每一个I/O的第一笔数据传输时,都要等待第一个磁盘驱动器的旋转延迟(Rotational Latency),平均为旋转半圈的时间,如果使用一万转的磁盘驱动器,平均就需要等待50 us。

所以机械延迟时间,是并行存取架构的最大问题。

4.独立存取模式
相对于并行存取模式,独立存取模式并不对成员磁盘驱动器做同步转动控制,其对每个磁盘驱动器的存取,都是独立且没有顺序和时间间隔的限制,同时每笔传输的数据量都比较大。

因此,独立存取模式可以尽量地利用重叠多任务、Tagged Command Queuing等高级功能,来"隐藏"上述磁盘驱动器的机械时间延迟﹝Seek 和Rotational Latency﹞。

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

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

在线交易系统或电子商务应用。

多使用者数据库。

ERM及MRP 系统。

小文件之文件服务器。

一般常用的RAID阶层,分别是RAID 0、RAID 1、RAID 3、RAID 4以及RAID 5,再加上二合一型RAID 0+1﹝或称RAID 10﹞。

把这些RAID级别的优、缺点做个比较,见表3-3。

表3-3 各种RAID优缺点比较
接下来,分别针对RAID 5以及RAID 0+1/RAID 10作深入的讨论。

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

RAID 01则是先做条带,然后再做镜像。

以6个盘为例,RAID 10就是先将盘分成3组镜像,然后再对这3个RAID 1做条带。

RAID0 1则是先利用3块盘做RAID 0,然后将另外3块盘作为RAID 0的镜像。

下面以4块盘为例来介绍安全性方面的差别。

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

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

1.安全性方面的比较
其实在安全性方面,勿须质疑,肯定是RAID 10的安全性高于RAID 5。

也可以从简单的分析得出此结论。

当盘1损坏时,对于RAID 10,只有当盘1对应的镜象盘也损坏,才导致RAID失效。

但是对于RAID 5,剩下的3块盘中,任何一块盘故障,都将导致RAID失效。

在恢复的时候,RAID 10恢复的速度也快于RAID 5。

2.空间利用率的比较
RAID 10的利用率是50%,RAID 5的利用率是75%。

硬盘数量越多,RAID 5的空间利用率越高。

3.读写性能方面的比较
主要分析如下3个过程:读、连续写、离散写。

在介绍这3个过程之前,先介绍一个特别重要的概念:缓存(cache)。

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

cache的主要作用是什么呢?体现在读与写两个不同的方面。

如果作为写,一般存储阵列只要求写到cache就算完成了写操作,所以,阵列的写是非常快速的,在写cache的数据积累到一定程度时,阵列才把数据刷到磁盘,实现批量的写入,至于cache数据的保护,一般都依赖于镜像与电池(或者是 UPS)。

cache的读一样不可忽视,因为如果读能在cache中命中的话,将会减少磁盘的寻道,因为磁盘从寻道开始到找到数据,一般都在6ms以上,而这个时间,对于那些密集型I/O的应用可能不是太理想。

但是,如果cache能命中,一般响应时间则可以在1ms以内,两者应该相差3个数量级(1000 倍)。

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

(2)连续写方面的性能差异
在连续写操作过程中,如果有写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在连续写的情况下,从缓存到磁盘的写操作速度会有较小的区别。

不过,如果不是连续性的强连续写,只要不达到磁盘的写极限,差别并不是太大。

(3)离散写方面的性能差异
例如Oracle 数据库每写一个数据块的数据,如8KB,由于每次写入的量不是很大,而且写入的次数非常频繁,因此联机日志看起来像是连续写。

但是因为不保证能够添满 RAID 5的一个条带,比如32KB (保证每张盘都能写入),所以很多时候更加偏向于离散写入(写入到已存在数据的条带中)。

假定要把一个数字2变成数字4,那么对于RAID 5,实际发生了4次I/O。

先读出2与校验6,可能发生读命中,然后在cache中计算新的校验,写入新的数字4与新的校验8。

同样的单个操作,最终RAID 10只需要2个I/O,而RAID 5需要4个I/O。

这里忽略了RAID 5在那两个读操作的时候,可能会发生读命中操作的情况。

也就是说,如果需要读取的数据已经在cache中,可能是不需要4个I/O的。

这也证明了 cache对 RAID 5
的重要性,不仅是计算校验需要,对性能的提升也尤为重要。

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

(4)磁盘的IOPS对比
假定一个业务(case)的IOPS是10000,读cache命中率是30%,读IOPS为60%,写IOPS为40%,磁盘个数为120,那么分别计算在RAID 5与RAID 10的情况下,每个磁盘的IOPS为多少。

RAID 5:
单块盘的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,因为每一个写,在RAID 5中,实际发生了4个I/O,所以写的IOPS为16000个。

为了考虑RAID 5在写操作的时候,那两个读操作也可能发生命中,所以更精确的计算为:
单块盘的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个,基本达到磁盘极限。

RAID 10:
单块盘的IOPS = (10000×(1-0.3)×0.6 + 2 × (10000×0.4))/120 = (4200 + 8000)/120
= 102
可以看到,因为RAID 10对于一个写操作,只发生两次I/O,所以,同样的压力、同样的磁盘,每个盘的IOPS只有102个,还远低于磁盘的极限IOPS。

4.小结
所以要求较高的空间利用率、对安全性要求不是特别高、大文件存储的系统采用RAID 5比较好。

相反,安全性要求很高、不计成本、小数据量频繁写入的系统采用RAID 10的方式比较好。

2.RAID 01的情况
这种情况下,仍然假设DISK 0损坏,这时左边的条带将无法读取。

在剩下的3块盘中,只要DISK 2、DISK 3两个盘中任何一个损坏,都会导致整个RAID失效,可简单计算故障率为2/3。

因此RAID 10比RAID 01在安全性方面要强。

从数据存储的逻辑位置来看,在正常的情况下,RAID 01和RAID 10是完全一样的,而且每一个读写操作所产生的I/O数量也是一样的,所以在读写性能上两者没什么区别。

而当有磁盘出现故障时,比如前面假设的DISK0 损坏时,这两种情况下,在读的性能上面也将不同,RAID 10的读性能将优于RAID 01。

相关文档
最新文档