出于好奇,我们有一台运行软件 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。如果您不喜欢这样,并且希望将其设置为使用更多资源(代价是让它更多地干扰正常工作),您可以在设置中调整它。