Redhat
為什麼 raid-check 使用這麼少的 io 頻寬?
出於好奇,我們有一個執行軟體 RAID 的 RHEL 伺服器。有一個 cronjob 每隔一段時間就會啟動一次 raid 數據檢查以檢查陣列的一致性。據我了解,數據檢查將利用空閒的IO頻寬,以免干擾伺服器的正常執行。
從下面的 iostat 輸出可以看出,伺服器實際上是空閒的。為什麼raid數據檢查只使用6M/sec的IO頻寬?在最初的 RAID 建構過程中,我看到這些機器達到了 320M/sec+。為什麼數據檢查沒有使用 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
這已經回答了很多次……它可以設置為:
echo 50000 > /proc/sys/dev/raid/speed_limit_min
和
echo 50000 > /proc/sys/dev/raid/speed_limit_max
查看 /etc/sysconfig/raid-check。這使您可以為此檢查設置 ionice 和 nice 參數。預設值為低,它降低了 5 並設置了 ionice。如果您不喜歡該設置並希望將其設置為使用更多資源,則可以在設置中進行調整(以使其乾擾正常工作為代價)。