*[PC]HDL4-GのRAID再構築速度制限

先日の日記にも書いたことだがUPSがらみのトラブル調査で
今年に入って数え切れないくらいRAID再構築を行っている。

WD10シリーズx4で構成したRAID5なので再構築はほぼ丸一日。
その間はUPSを外して下手なことをしないよう静かに待つしかないのだが
この程度なら大した負荷でもないだろとTELNETで入って
各種perlスクリプトを読んで調べるなんてことを繰り返していた。

そんな中で知ったのがhotplug。
そこからsysctlまでたどり着いた。

もともとはhotplugがらみでsysctlにkernel.hotplugが
定義されていることからなのだがsysctlにraid関連の
項目があるに気がついた。
試しに sysctl -a | grep raid を叩いてみると
dev.raid.speed_limit_max = 200000
dev.raid.speed_limit_min = 1000
調べるとRAID再構築時のディスクスピード最大値と最低値らしい。

じゃ実際の再構築速度はと cat /proc/mdstat を叩いてみると
speed=12531K/sec


なんつーか一桁間違ってないか?と言う値。orz


内部処理でこの速度なんだからGbEとは言えLAN経由の
アクセスでこれ以上のスピードが出ることはないだろうな。
やっぱHDL4-Gは遅いわ。

ちなみにこのときのCPU使用率は90%以上。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2487 root 20 4 0 0 0 R 55.8 0.0 137:24.12 md10_raid5
3344 root 29 4 0 0 0 R 41.0 0.0 96:37.60 md10_resync


じゃmax価を下げたらどうなるか?

sysctl -w dev.raid.speed_limit_max=1000
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2487 root 20 4 0 0 0 R 35.7 0.0 154:50.59 md10_raid5
3344 root 20 4 0 0 0 R 27.5 0.0 108:55.25 md10_resync

sysctl -w dev.raid.speed_limit_max=5000
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2487 root 20 4 0 0 0 R 44.0 0.0 155:12.43 md10_raid5
3344 root 20 4 0 0 0 R 30.2 0.0 109:10.27 md10_resync


max値200,000の時はずっとCPU使用率が90%以上だったが、1,000、5,000に
制限した際には時折CPU値が上がるがしばらくアイドルが続くという間欠泉
みたいな感じだった。


不思議なのが/proc/sysctl.cofには dev.raid.speed_limit_min = 50000の
記述があるのに dev.raid.speed_limit_min = 1000 になっていること。

/usr/local/binを対象に適当なワードでgrepかけたら
/usr/local/bin/auto/HDLsystem/__set_raid_bandwidth.alで変更していた。

しかもweb管理画面のcgi毎にいちいちmax=2000。min=0にし
デストラクタで戻すと言う制御をやっていた。


RAID再構築終了後に __set_raid_bandwidth.al の該当箇所を
コメントアウト。HDL4-Gを再起動すると
dev.raid.speed_limit_max = 200000
dev.raid.speed_limit_min = 50000


再構築中はweb管理画面が開けなくなってしまうのだが、
http://d.hatena.ne.jp/nakapon/20110211
この辺りうまく制御できればRAID再構築中でもweb管理画面が
使えるかも知れない。

ただ当然maxで制限をかければ再構築所要時間は増加するわけで。
4TB RAID5で一日、8TB RAID5で二日かかるのがさらに遅くなるのはイヤだし。
再構築速度を取るか利便性を取るか悩むところ。