Linux之慢盘检测


前面介绍iostat的文章中提到过

  1. iostat工具没有任何一输出项表示的是硬盘设备平均每次IO的时间
  2. 也不能直接通过 /proc/diskstats 提供的统计值来准确地计算 I/O 在磁盘上的耗时

常见的慢盘检测工具

常见的慢盘检测工具例如,ARIES、华为IBMA都是通过周期性读取内核提供的统计信息(/proc/diskstats)来计算磁盘的平均 I/O 服务时间(svctm),并将服务时间划分为不同的3个等级level0/level1/level2,每个等级对应不同的加权值:

  • 轻微(level0): 0ms
  • 一般(level1):100ms
  • 严重(level2):200ms
  1. ARIES 慢盘判断方法:
  • 每1s中采集一次平均I/O服务时间,并判断 svctm 处在的权重区间,对应区间计数;
  • 每30分钟判断一次是否命中慢盘,判断方法:一般次数 * 1 + 严重次数 * 2 > 20% * 1800,则判定为慢盘;
  • 对于命中为慢盘,则标记为本周期内命中慢盘次数+1;
  • 一天24h内,命中慢盘次数超过80%,则直接调用坏盘逻辑。
  1. 华为提供的慢盘判断方法:
  • 每1s中采集一次平均I/O服务时间(svctm),并判断 svctm 处在的权重区间,对应区间计数;
  • 每5分钟判断一次是否命中慢盘,判断方法:一般次数 * 1 + 严重次数 * 2 > 20% * 300,则判定为慢盘;
    两种方法都依赖于计算的 svctm, 实际上这个值在新版本的 iostat 中被废弃,因为它并不能代表实际的 I/O服务时间。

判断方法

尽管如此,还是可以通过iostat中计算svctm的方法来预估每IO的平均服务时间。
(虽然blktrace能够追踪每次 I/O 将 request 提交给驱动到请求完成的耗时,但是 blktrace 会增加I/O 的耗时从而影响性能)

  • 理由如下:
    虽然 svctm 不能准确地表示I/O的服务时间,但是当出现慢盘时,无论传统的 sata hdd 盘还是 nvme ssd,svctm 都会因为单次 I/O 耗时增加而增加,svctm 会增加到几百毫秒,甚至几千毫秒。 所以继续使用 svctm 来判断慢盘。

判断磁盘为慢盘的阈值

磁盘类型level1(ms)level2(ms)
hdd3060
sata ssd2040
nvme ssd1020

说明: 值除了 hdd 的阈值有据可循, 其他两种磁盘都是推算值

  • 普通 sata ssd 读QPS 能达到 五百以上, 所以当 iops 下降到 50, 说明磁盘已经出现慢盘
  • nvme ssd iops 能达到一千到几十万, 当iops 下降到 100, 说明磁盘已经出现慢盘

每 1s 中采集一次 /sys/block/disk name/stat, 并计算svctm,并判断 svctm 处在的权重区间,对应区间计数;

  1. 当本次计算的平均 svctm 超过报警值就将慢盘次数加1,如果平均耗时超过危险值就将慢盘次数加2;
    慢盘次数 = 一般次数 * 1 + 严重次数 * 2
  2. 如果过去一段时间内(默认3分钟)慢盘次数超过统计次数的 20% 则报警慢盘(总数 = 3*60 - 没有请求的秒);
  3. 如果过去一长段时间内(默认30分钟)磁盘被报警慢盘周期(一个周期为3分钟)次数超过 20%(除去没有请求的周期),则报警慢盘
  4. 如果过去一长段时间内(默认180分钟)磁盘被报警慢盘周期次数超过 80%(除去没有请求的周期),磁盘则在保证数据安全的前提下不提供服务
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值