IO和IOPS浅析

IO和IOPS浅析

块&IO

块:是存储数据的最小单元;

IO:对块的读写操作,是存储读写动作的最小单元;

IO的大小:取决于IO操作的的块到大小

IO的读写:IO的动作

顺序和随机IO:按照顺序读写或随机读写

存储性能的主要指标

IOPS:每秒的读写次数(几千到几百万)

带宽:每秒数据传输量(单位MB/s,GB/S)

时延:IO的响应时间(ms毫秒/μs微秒),从操作系统内核发出的一个读或者写的IO命令,到操作系统内核接收到IO确认回应的时间。

各个指标之间的关系

同一时刻的带宽=IOPS*IO大小

IO时延=IO队列等待时间+单个IO的读写处理时间

随着系统IOPS接近理论性能,IO响应时间会非线性增长

当系统压力>最大性能的70%时,IO响应时间会剧增

IO读写对性能的影响

硬盘:无论是HDD机械硬盘还是SSD闪存盘,读性能数值都高于写性能

RAID:对于绝大部分RAID级别(5/6/10),写惩罚会明显降低写性能

控制器:存储控制器基于数据可靠性的考虑,需要为写操作执行额外的镜像保护

IO顺序随机对性能的影响

顺序读

顺序读容易预取

通过顺序流识别和预取算法

提前读取磁盘的连续数据到控制器或SSD缓存中

随机IO预取命中率极低

顺序写

顺序写容易合并

顺序IO可以合并后落盘,不会触发RAID写惩罚

随机IO由于落盘位置无法预测,很难进行合并

IO从应用落盘的路径

文件系统:将文件切分为Block,发给HBA

HBA卡:将Block按照传输协议进行切分

SAN交换机:接收HBA的IO,发给存储

存储端口:封装成和HBA发出的一致的IO

存储缓存:从端口接收I0,镜像后返回确认

硬盘:从存储缓存异步接收IO,最终落盘

机械硬盘的数据读写

磁头径向移动到相应磁道,称为寻道时间

马达旋转到相应扇区,称为旋转时间

马达带动盘片旋转,开始连续数据读写

1块硬盘的IOPS如何计算?

以10000转SAS硬盘为例,假设寻道时间3ms

平均旋转时间=60*1000/10000/2=3ms

IOPS=1000/(3+3)=166,忽略传输时间

RAID组的IOPS计算

条件

5块盘的RAID5,含校验数据,不含热备盘

单盘读写IOPS为150,读写比例为6:4,求RAID组总的IOPS

求解

全读的IOPS=1504=600,全写的IOPS=1504/4=150

总IOPS=60060%+15040%=420

利用率=420/(150*5)=56%,只发挥了所有硬盘一半的性能

写惩罚

不同的RAID级别,为了保证当有物理磁盘损坏的情况下可以恢复数据,数据写入的过程中都需要有一些特别的计算。比如对于RAID-5,条带上的任意磁盘上的数据改变,都会重新计算校验位。如下图所示,一个7+1的RAID-5的条带中,七个磁盘存储数据,最后一个磁盘存储校验位。

数据写入RAID的过程

对于一个数据的写入,我们假设在第五个磁盘上写入的数据为111,那么整个RAID-5需要完成写入的过程分为以下几步:

1.读取原数据0110,然后与新的数据1111做XOR操作: 0110 XOR 1111 = 1001

2.读取原有的校验位0010

3.用第一步算出的数值与原校验位再做一次XOR操作: 0010 XOR 1001 = 1011

4.然后将1111新数据写入到数据磁盘,将第三步计算出来的新的校验位写入校验盘。

由上述几个步骤可见,对于任何一次写入,在存储端,需要分别进行两次读+两次写,所以说RAID-5的Write Penalty的值是4。

不同RAID级别的Write Penalty

RAID级别

原理

单盘写惩罚

5

单校验,需要读数据、读校验位、写数据、写校验位

4

6

双校验,,需要读数据、读两次校验位、写数据、写两次校验位

6

10

镜像,!-次写入相同数据到两个硬盘

2

常见存储性能问题

底层硬盘IOPS量超过阈值

常见于FC,NL硬盘;

出现问题以后可以用statpd命令实时检查硬盘当前IOPS值,要求NL硬盘不高于75,FC硬盘不高于150-200;

某硬盘延迟过高成为慢盘,拖慢整个存储

使用statpd命令配合-sortcol参数排序找到响应时间远高于其他的硬盘(几倍);

仅在所有同类硬盘IOPs都在阈值范围内的情况下,某块盘的延迟明显超过其他盘才可以判定为慢盘否则优先处理磁盘IO超限问题;

存储使用DECO(去重和压缩)卷带来性能衰减

Vlun 多路径配置问题,导致单条路径带宽达到瓶颈

使用statvlun 和 statport -host 配合-sortcol等参数检查主机路径●某业务对Vlun读写使用的block size过大;

使用statvlun 配合-sortcol等参数排序block size 一项,确定引发问题主机;

同步模式远程复制中,主备存储配置不一致或复制

链路问题影响主存储链路质量问题,检查SFP及host port和光交porterrshow计数值

物理硬盘的IOPS和延时阈值

前提条件读操作50%、写操作50%、10 size 8~16KB,读写比例悬殊和I0 size增加都会影响IOPS处理能力和响应时间。涉及命令statpd

NL 磁盘75个IOPS 延时30ms

FC 磁盘 150个IOPS 延时25ms

SSD 磁盘 4000个IOPS 延时5ms

尺寸 转速 硬盘类型(数据传输协议) IOPS

-----------------------------------------------------------------

2.5 10000rpm SAS 113

2.5 15000rpm SAS 156

3.5 15000rpm SAS 146

2.5 5400rpm SATA 71

3.5 7200rpm SATA 65

3,5 10000rpm SCSI(U320) 104

3,5 15000rpm SCSI(U320) 141

3.5 10000rpm FC 125

3.5 15000rpm FC 150

3.5 10000rpm FATA 119

同类型物理磁盘IOPS阈值普遍达到100%,通过checkhealth -svc -detail就可以实时检测到告警,但由于节点缓存的作用通常不会出现明显vun延时升高,尤其是在顺序读操作占比较高时;

建议加强监控,避免新业务的添加;

同类型物理磁盘IOPS阈值普遍达到200%,通过checkhealth -svc -detail就可以实时检测到告警,通常会出现明显的延时升高;

建议加强监控,避免新业务的添加,限制主机I避免对核心业务造成进一步影响,不要尝试直接进行大面积的数据和应用迁移;

同类型物理磁盘IOPS阈值普遍达到300%,大部分应用会出现明显的延时升高或是卡顿等;

建议通过statvlun、statport命令确认大批I0的来源,限制对应主机I0,同时关闭不重要的业务缓解对核心业务造成的影响,在保证核心业务的前提下合理评估后续数据向高性能磁盘或是其他存储迁移的操作。

如何计算 RAID 中的 IOPS?

一客户那边出现了跟存储磁盘IOPS相关的问题:应用系统在调用数据库时特别慢,页面打开同样慢。最终一路排查下来,问题还是在存储端。

存储中划给oracleRAC使用的RAID5,使用的是包含EMC存储操作系统在内的5块硬盘。

具体的说:这5块盘,都是FC 10K RPM的450G硬盘(每个盘的IOPS为140),磁盘最大的IOPS为700。假设读写比为2:1,能够提供给前端应用的IOPS只能为:350(RAID5是1读4写)。

这样的IOPS,的确不能满足实际应用的使用需求所导致的情况。这个问题其实也不是碰到一次两次,就借着这次一起整理下关于磁盘IOPS的计算方式:

1、准备工作:

通常当数据库管理员提出需要更多存储空间的时候,他们还会指定必须要达到多少IOPS。首先需要知道I/O中读操作(Read)与写操作(Write)所占的百分比。然后通过下列公式,将主机的IOPS需求转换成硬盘实际IOPS负载:

在计算具体的磁盘IOPS之前,需要对常见的RAID类型的读写比、不同硬盘类型的IOPS值、具体应用的IOPS需求等等有一些了解。

不同RAID类型的IOPS计算公式

RAID类型

公式

RAID5、RAID3

Drive IOPS=Read IOPS + 4*Write IOPS

RAID6

Drive IOPS=Read IOPS+6*Write IOPS

RAID1、RAID10

Drive IOPS=Read IOPS+2*Write IOPS

不同磁盘类型的IOPS

硬盘类型

IOPS

FC 15K RPM

180

FC 10K RPM

140

SAS 15K RPM

180

SAS 10K RPM

150

SATA 10K RPM

290

SATA 7.2K RPM

80

SATA 5.4K RPM

40

Flash drive

2500

2、案例

看两个案例,其中第二个也是在客户现场碰到的实际情况。 IOPS的计算需要结合上述表格中的相应参数值。

20TB 存储空间同时满足 4500 IOPS 、 RAID5 ,从实际使用来说,如何计算不同 RAID 所支持的 IOPS ?RAID5 或者 RAID10 的时候分别需要多少块硬盘?

首先需要知道 I/O 中读操作与写操作所占的百分比。然后通过第 2 章节中的公式,将主机 IOPS 需求转换成硬盘实际 IOPS 负载:

假定 4500 IOPS 中读 / 写比是 2 :1 ,则不同的 RAID 类型 Drive IOPS 分别如下:

RAID10 :( 2/3 ) 4500+2 ( 1/3 ) *4500 = 6000 IOPS

RAID5 :( 2/3 ) 4500+4 ( 1/3 ) *4500 = 9000 IOPS

RAID6 :( 2/3 ) 4500+6 ( 1/3 ) *4500 = 12000 IOPS

再参照第 2 章节中不同硬盘类型的 IOPS 值,换算出需要多少块盘:

RAID10 :6000/180 = 34 块

RAID5 :9000/180 = 50 块

RAID6 :12000/180 = 67 块

客户环境中,存在一个 RAID group ,是由 5 块 450G 10K RPM 的 FC 盘组成,换算出该 RAID 支持的最大 IOPS 以及能够给前端应用提供的 IOPS

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

假设读写比为 2 :1 ,能够提供给前端应用的 IOPS 为:

( 2/3 ) X+4 ( 1/3 ) *X = 700

2*X = 700 X=350 能够提供给前端应用的 IOPS 为 350 。

参考

https://blog.csdn.net/eagle89/article/details/128938949

相关推荐

足球什么叫中柱
365足球打水封号还严重嘛

足球什么叫中柱

📅 07-09 👁️ 4636
cci指标参数设置成多少最准确
365足球打水封号还严重嘛

cci指标参数设置成多少最准确

📅 07-24 👁️ 6083
如何恢复朋友圈功能
beat365官方入口

如何恢复朋友圈功能

📅 07-28 👁️ 9859