磁盘Disk IO评估
磁盘的I/O,顾名思义就是磁盘的输入输出。输入指的是对磁盘写入数据,输出指的是从磁盘读出数据。常见的磁盘类型有 ATA、SATA、FC、SCSI、SAS、SSD,这几种磁盘中,服务器常用的是SAS、FC和SSD磁盘,每一种磁盘的性能是不一样的。
[TOC]
概述
磁盘阵列的瓶颈分析主要体现在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 |
---|---|---|---|
数据传输率 | 10 MB/s | 13 MB/s | 8 MB/s |
所需磁盘个数 | 100块 | 80块 | 125块 |
IOPS
决定IOPS的主要取决于阵列的算法、cache命中率以及磁盘个数。
通常情况下每个磁盘的最大IOPS是有限制的,比如IDE和SATA硬盘的IOPS大致在100以内,而且IOPS的测试结果与测试方式(例如随机读写和顺序读写、读和写的比例、传输数据库尺寸的大小、磁盘的数量)有很大关系。尽管如此,磁盘的IOPS指标还是对我们评估磁盘的压力和是否能够满足系统的性能需求有着一定的指导意义。
决定IOPS的因素 | 具体分析 |
---|---|
阵列的算法 | 同样的读写,在不同的阵列所产生的iops是不同的: RAID 0 :IOPS = Read IOPS + 1 x Write IOPS RAID 1 :IOPS = Read IOPS + 2 x Write IOPS RADI 3 :IOPS = Read IOPS + 4 x Write IOPS RAID 5 :IOPS = Read IOPS + 4 x Write IOPS RADI 6 :IOPS = Read IOPS + 6 x Write IOPS RAID 10:IOPS = Read IOPS + 2 x Write IOPS |
cache命中率 | 取决于数据的分布、Cache大小、数据访问规则、Cache算法: cache算法越高效,则cache的命中率越高,加速效果越明显; cache容量越大,可以存储的信息量越大,相对的命中率越高; 当cache的容量一定时,读数据的块大小对命中率的影响非常敏感; |
磁盘因素 | 磁盘IOPS瓶颈:单个物理磁盘能够处理的的最大IOPS是有限制的 SATA 5.4k rpm 的 IOPS:30^50 SATA 7.2k rpm 的 IOPS:70^90 SAS 10k rpm 的 IOPS:130^150 SAS 15k rpm 的 IOPS:150^180 SSD 的 IOPS:5K^15K 磁盘容量:相同转速,容量越小,所需的寻址之间越短,IOPS相对越高 |
测试方式 | 随机读写、顺序读写、读写比例、传输数据的大小 |
备注:
- 1.同样的读写,不同RAID的读操作所产生的IOPS相差无几,而对IOPS影响最大的是写操作。写操作效率RAID 0最高、RAID 1和10次之。
- 2.读cache的命中率越高越好
- 3.磁盘接口简述:
小型计算机系统接口(SCSI) 集成设备电子学(IDE) 串行高级技术附件(SATA) 串行SCSI(SAS) 光纤通道(FC) 固态硬盘(SSD)或闪存盘
单个磁盘的IOPS计算方法:
raid方式 | 读操作 | 1个写操作 | 每个磁盘的IOPS | 每个磁盘的IOPS(考虑命中率+读写比例) |
---|---|---|---|---|
RAID 0 | 读次数 x (1-Cahe命中率) | 实际1次io | (读+写) / 磁盘个数 RAID0最少1块盘 |
[读 x 读比例 x (1-Cache命中率)+(1 x 写 x 写比例)] / 磁盘个数 |
RAID 1 | 读次数 x (1-Cahe命中率) | 实际2次io | [读+(2 x 写)] / 2 RAID1只能配置2块盘 |
[读 x 读比例 x (1-Cahe命中率)+(2 x 写 x 写比例)] / 2 |
RAID 5 | 读次数 x (1-Cahe命中率) | 实际4次io | [读+(4 x 写)] / 磁盘个数 RAID5最少3块盘 |
[读 x 读比例 x (1-Cahe命中率)+(4 x 写 x 写比例)] / 磁盘个数 |
RAID 10 | 读次数 x (1-Cahe命中率) | 实际2次io | [读+(2 x 写)] / 磁盘个数 RAID10最少4块盘 |
[读 x 读比例 x (1-Cahe命中率)+(2 x 写 x 写比例)] / 磁盘个数 |
需求计算
场景一:
假定某业务需要 10000 IOPS,若 120块硬盘、读cache命中率30%、读iops为60%、写iops为40%,分别计算raid1、5、10的情况下,每个磁盘要求的iops为多少?
raid 1:
- 每块硬盘要求的iops = [10000 x 0.6 x (1-0.3) + 2 x (10000 x 0.4)] / 2 = [4200 + 8000] / 2 = 6000
- 这里,10000 x (1-0.3) x 0.6表示是读的iops,比例是0.6,除掉cache命中,实际只有4200个iops;
- 请注意:在raid1中,1个写操作实际发生了2个io,所以写的iops为8000。且raid1的RAID系数为2,所以增加硬盘对提升IOPS有限。
raid5:
- 每块硬盘要求的的iops = [10000 x 0.6 x (1-0.3) + 4 x (10000 x 0.4)] / 120 = [4200 + 16000] / 120 = 168
- 而 4 x (10000 x 0.4) 表示写的iops,因为每一个写,在raid5中,实际发生了4个io(这也是为什么RAID5的写性能较差的原因),所以写的iops为16000个;
raid10:
- 每块硬盘要求的的iops = [10000 x 0.6 x (1-0.3) + 2 x (10000 x 0.4)] / 120 = [4200 + 8000] / 120 = 102
- 因为raid10对于一个写操作,只发生2次io,所以,同样的压力+同样的磁盘,每个盘的iops只有102个,远远低于磁盘的极限iops。
吞吐率:
此外,假设当吞吐率超过85%时,单个磁盘IOPS计算规则为:[(10000 x 读比例 x (1-Cache命中率)) + 10000 x 写比例 x 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为:[ A x (2/3) x (1-0.8) + A x (1/3) x 4] / 5 = 140 得出 A = 477
案例分析
在一个实际的case中,一个恢复压力很大的standby(这里主要是写,而且是小io的写),采用了raid5的方案,发现性能很差,通过分析,每个磁盘的iops在高峰时期达到了200(注:SAS 15K rpm盘的IOPS约150^180),导致响应速度巨慢无比。后来改造成raid10,就避免了这个性能问题,每个磁盘的iops降到100左右。