为什么 raid-check 使用这么少的 io 带宽?

为什么 raid-check 使用这么少的 io 带宽?

出于好奇,我们有一台运行软件 RAID 的 RHEL 服务器。有一个 cronjob 会不时启动 raid 数据检查来检查阵列的一致性。据我了解,数据检查将利用空闲的 IO 带宽,以免干扰服务器的正常运行。

从下面的 iostat 输出可以看出,服务器实际上处于空闲状态。为什么 RAID 数据检查仅使用 6M/秒的 IO 带宽?在初始 RAID 构建期间,我看到这些机器达到 320M/秒以上。为什么数据检查没有使用内核日志条目中指示的最大带宽 200MB/秒?

以下是上次启动 raid 数据检查时的日志输出:

Apr 28 01:00:01 xxxx kernel: md: data-check of RAID array md1
Apr 28 01:00:01 xxxx kernel: md: minimum _guaranteed_  speed: 1000 KB/sec/disk.
Apr 28 01:00:01 xxxx kernel: md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for data-check.
Apr 28 01:00:01 xxxx kernel: md: using 128k window, over a total of 3824596992k.
Apr 28 01:00:07 xxxx kernel: md: delaying data-check of md0 until md1 has finished (they share one or more physical units)

以下是与 md1 相关的 /proc/mdstat 的一些输出:

md1 : active raid10 sdb2[1] sda2[0] sdd2[3] sdg2[6] sdh2[7] sde2[4] sdc2[2] sdf2[5]
      3824596992 blocks super 1.1 512K chunks 2 near-copies [8/8] [UUUUUUUU]
      [==========>..........]  check = 53.4% (2045997824/3824596992) finish=5255.6min speed=5639K/sec
      bitmap: 10/29 pages [40KB], 65536KB chunk

iostat -m 的输出:

[root@xxxx ~]# iostat -m
Linux 2.6.32-358.2.1.el6.x86_64 (xxxx)  05/01/2013  _x86_64_    (32 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.92    0.07    0.83    1.26    0.00   94.92

Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn
sde              35.25         1.26         0.38    1520624     456526
sdf              33.15         1.21         0.38    1461256     456526
sdb              35.49         1.24         0.38    1485991     460191
sda              36.80         1.28         0.38    1542868     460191
sdc              31.64         1.26         0.36    1519241     429095
sdd              30.00         1.21         0.36    1460629     429095
sdh              30.51         1.21         0.35    1460819     424707
sdg              31.90         1.26         0.35    1519924     424707
md0               2.72         0.01         0.01       8465      12014
md1             177.21         0.38         1.34     453189    1607605

答案1

这个问题已经回答过很多次了...可以用以下方式设置:

echo 50000 > /proc/sys/dev/raid/speed_limit_min

echo 50000 > /proc/sys/dev/raid/speed_limit_max

答案2

查看 /etc/sysconfig/raid-check。这允许您为此检查设置 ionice 和 nice 参数。默认值为低,将 nice 值降低 5 并降低 ionice。如果您不喜欢这样,并且希望将其设置为使用更多资源(代价是让它更多地干扰正常工作),您可以在设置中调整它。

相关内容