服务器阵列磁盘IO评估方法

2017年5月11日 4 条评论 7.31k 次阅读 0 人点赞

磁盘IO评估

磁盘的I/O,顾名思义就是磁盘的输入输出。输入指的是对磁盘写入数据,输出指的是从磁盘读出数据。我们常见的磁盘类型有 ATA、SATA、FC、SCSI、SAS、SSD,这几种磁盘中,服务器常用的是SAS、FC和SSD磁盘,每一种磁盘的性能是不一样的。

磁盘阵列的瓶颈分析主要体现在2个方面:IOPS与吞吐量。

IOPS(Input/Output Per Second)即每秒进行读写(I/O)操作的次数,是衡量磁盘性能的主要指标之一,多用于数据库等场合,衡量随机读写的性能。

另一个重要指标是数据吞吐量(Throughput),指单位时间内可以成功传输的数据数量。对于大量顺序读写的应用,如VOD(VideoOn Demand),则更关注吞吐量指标。

简而言之:

磁盘的IOPS,也就是在一秒内,磁盘进行多少次I/O读写。

磁盘的吞吐量,也就是每秒磁盘I/O的流量,即磁盘写入加上读出的数据的大小。

IOPS 与吞吐量的关系:

每秒I/O吞吐量=IOPS*平均I/O size。

从公式可以看出:I/O SIZE 越大,IOPS越高,那么每秒I/O的吞吐量就越高。因此,我们会认为 IOPS 和吞吐量的数值越高越好。实际上,对于一个磁盘来讲,这两个参数均有其最大值,而且这两个参数也存在着一定的关系。 

  • 吞吐量

吞吐量主要取决于阵列的架构,光纤通道的大小以及硬盘的个数。

  • 阵列的架构与每个阵列不同,但也都存在内部带宽,不过在一般情况下,内部带宽都设计的很充足,不是瓶颈所在。
  • 其次是光纤通道对数据流量的影响。比如为了达到1GB/s的数据流量要求,必须使用1GB*8=8GB的光纤卡,或4块2GB的光纤卡。
  • 最后说一下硬盘的限制,当前面的瓶颈不再存在的时候,就要看硬盘的个数了,因为不同的硬盘所能支撑的流量大小也不一样。

假设为了满足1GB/s的数据流量要求,除了需要8块1GB的光纤卡,同时所必须的磁盘个数为:

磁盘转速规格 10K RPM 15K RPM ATA
数据传输率 10MB/s 13MB/s 8MB/s
所需磁盘个数 100块 80块 125块

 

  • IOPS

决定IOPS的主要取决于阵列的算法、Cache命中率以及磁盘个数。

  • Cache命中率取决于数据的分布、Cache Size的大小、数据的访问规则,以及Cache的算法。
  • 磁盘的限制,每个磁盘能处理的IOPS是有限制的,通常情况下每个磁盘的最大IOPS是确定的。比如IDE和SATA硬盘的IOPS大致在100以内,而且IOPS的测试结果与测试方式(例如随机读写和顺序读写、读和写的比例、传输数据库尺寸的大小、磁盘的数量)有很大关系。尽管如此,磁盘的IOPS指标还是对我们评估磁盘的压力和是否能够满足系统的性能需求有着一定的指导意义。

 

决定IOPS 具体分析
阵列的算法 同样的读写,在不同的阵列所产生的IOPS是不同的:

RAID 0 :IOPS =  Read IOPS + 1*Write IOPS

RAID 1 :IOPS =  Read IOPS + 2*Write IOPS

RADI 3 :IOPS =  Read IOPS + 4*Write IOPS

RAID 5 :IOPS =  Read IOPS + 4*Write IOPS

RADI 6 :IOPS =  Read IOPS + 6*Write IOPS

RAID 10:IOPS =  Read IOPS + 2*Write IOPS

Cache命中率 取决于数据的分布、Cache大小、数据访问规则、Cache算法。

Cache算法越高效,则Cache的命中率越高,加速效果越明显;

Cache容量越大,可以存储的信息量越大,相对的命中率越高;

当Cache的容量一定时,读数据的块大小对命中率的影响非常敏感

磁盘因素 磁盘IOPS瓶颈:单个物理磁盘能够处理的的最大IOPS是有限制的

SAS 15k rpm   IOPS:150^180

SAS 10k rpm   IOPS:130^150

SATA 7.2k rpm  IOPS:70^90

SATA 5.4k rpm  IOPS:30^50

SSD       IOPS:5K^15K

磁盘容量:相同转速,容量越小,所需的寻址之间越短,IOPS相对越高

测试方式 随机读写、顺序读写、读写比例、传输数据的大小

 

备注:

  1. 同样的读写,不同RAID的读操作所产生的IOPS相差无几,而对IOPS影响最大的是写操作.写操作效率RAID 0最高,RAID 1和10次之.
  2. 读Cache的命中率越高越好
  3. 磁盘接口简述:
  • 小型计算机系统接口(SCSI)
  • 集成设备电子学(IDE)
  • 串行高级技术附件(SATA)
  • 串行SCSI(SAS)
  • 光纤通道(FC)
  • 固态硬盘(SSD)或闪存盘

 

读操作 1个写操作 每个磁盘的IOPS 每个磁盘的IOPS

(考虑命中率+读写比例)

RAID0 读次数*(1-Cahe命中率) 实际1次IO (读+写)/磁盘个数 [读*读比例*(1-Cache命中率)+(1*写*写比例)]/磁盘个数
RAID1 读次数*(1-Cahe命中率) 实际2次IO [读+(2*写)]/2

RAID1只能配置2块盘

[读*读比例*(1-Cahe命中率)+(2*写*写比例)]/2
RAID5 读次数*(1-Cahe命中率) 实际4次IO [读+(4*写)]/磁盘个数 [读*读比例*(1-Cahe命中率)+(4*写*写比例)]/磁盘个数
RAID10 读次数*(1-Cahe命中率) 实际2次IO [读+(2*写)]/磁盘个数 [读*读比例*(1-Cahe命中率)+(2*写*写比例)]/磁盘个数

 

  • 需求计算

场景一:假定业务需求10000 IOPS,120块硬盘,读Cache命中率30%,读IOPS为60%,写IOPS为40%,分别计算RAID1、5、10的情况下,每个磁盘要求的IOPS为多少?

  • RAID1:

每块硬盘的IOPS = (10000*0.6*(1-0.3) + 2 * (10000*0.4))/2 = (4200 + 8000)/2 = 6000

这里,10000*(1-0.3)*0.6表示是读的IOPS,比例是0.6,除掉Cache命中,实际只有4200个IOPS;

请注意:在RAID1中,1个写操作实际发生了2个IO,所以写的IOPS为8000。且RAID1的RAID系数为2,所以增加硬盘对提升IOPS有限

  • RAID5:

每块硬盘的IOPS = (10000*0.6*(1-0.3) + 4 * (10000*0.4))/120 = (4200 + 16000)/120 = 168

而4 * (10000*0.4) 表示写的IOPS,因为每一个写,在RAID5中,实际发生了4个IO,所以写的IOPS为16000个;

  • RAID10:

每块硬盘的IOPS = (10000*0.6*(1-0.3) + 2 * (10000*0.4))/120 = (4200 + 8000)/120= 102

因为RAID10对于一个写操作,只发生2次IO,所以,同样的压力+同样的磁盘,每个盘的IOPS只有102个,远远低于磁盘的极限IOPS。

  • 吞吐率:

此外当吞吐率超过85%时,单个磁盘IOPS计算规则为:

((10000 *读比例*(1-Cache命中率))+10000*写比例*RAID系数)/磁盘数/0.85

Cache比例 Cache 20% Cache 40%
读写比例 读80%,写20% 读60%,写40% 读80%,写20% 读60%,写40%
RAID 0 82 86 67 75
RAID 1 6118 7529 5176 6824
RAID 5 141 204 125 192
RAID 10 102 125 86 114

 

即每块磁盘的IOPS大约在200左右即可满足RAID0、RAID5、RAID10的要求。

 

场景二:一个由5块450G 10K RPM硬盘组成的RAID 5,读写比为2:1,Cache命中率为80%,求该RAID支持的最大IOPS以及能够给业务提供的IOPS?

首先10K RPM的FC硬盘,单盘的IOPS为140,5块盘最大IOPS值为700;

能够提供给业务的IOPS为:[X*(2/3)*(1-0.8) + X*(1/3)*4]/5 = 140,计算出X = 477

案例分析

在一个实际的case中,一个恢复压力很大的standby(这里主要是写,而且是小IO的写),采用了RAID5的方案,发现性能很差,通过分析,每个磁盘的IOPS在高峰时期达到了200,导致响应速度巨慢无比。后来改造成RAID10,就避免了这个性能问题,每个磁盘的IOPS降到100左右。

 

纳米计算机

单身狗一枚,IBM/DELL/HP/HUAWEI/EMC/服务器存储硬件工程师,算是吧?嗯...应该是的!

文章评论(4)

  • xing1982

    不错不错!内容感觉好极了!

    2018年2月4日
  • 屌炸天

    新春佳节到。祝好!祝好!

    2018年2月5日
  • 趣头条

    鸟儿叫,花儿笑,一年一季春来到!

    2018年2月8日
  • 增大

    受益匪浅,感触良多!

    2018年3月24日