{ 2012.1.12 }

RAID5がiowait出まくりで遅いので、stripe_cache_sizeを増やした話

    はてなブックマーク - RAID5がiowait出まくりで遅いので、stripe_cache_sizeを増やした話
    このエントリーをはてなブックマークに追加

    あけましておめでとうございます。
    Fusic 平田です。
    新年気分とは何の関係もない、RAIDのお話です。

    年末にXenサーバのディスクがお亡くなりになったので、ディスク換装してCentOS6.2でKVMサーバを再構築。
    で、ディスク4本なのでどうしようかなーと思いつつRAID5を組んではみたのですが、iowaitが収まらない。
    特に書き込みのほうが苦戦しているようで、仮想サーバがちょっと頑張るたびにロードアベレージが10越えたり。
    これじゃ使い物にならんなあ最悪RAID10で組み直したほうがいいかなあ。。。とか悩んでいる時に以下の記事を発見。
    peterkieser.com/2009/11/29/raid-mdraid-stripe_cache_size-vs-write-transfer/
    ※ 記事中のスクリプトまでは試していません。
    書き込みで苦しんでいるならstripe_cache_size増やすと捗るよ!ってことでやってみました。

    サーバスペック:
    Xeon X3230 (4コア) メモリ8GB HDD1TB*4(RAID5, software raid)

    対象のRAIDアレイ(今回はmd3)に対して

    # echo 8192 > /sys/block/md3/md/stripe_cache_size

    と実行して値を書き換えます。
    resyncがかかってしばらくしたら完了したので、あとはtopでだらだら流して様子見。
    仮想サーバ側で何度か負荷の高い処理をしてみてもロードアベレージがさほど上がらなくなったので、とりあえずはよし。

    あとはOS再起動しても動くように、ruleを追加。

    # cat <<EOS > /etc/udev/rules.d/80-md-stripe-cache.rules
    SUBSYSTEM=="block", KERNEL=="md*", ACTION=="change", TEST=="md/stripe_cache_size", ATTR{md/stripe_cache_size}="8192"
    EOS

    今のところ、これで快適に動作しています。
    問題が起きないか、最大限の関心を持って注視を続けることが当面の隠れ業務です。

    ・・・ていうか、そもそもRAID5使わないとかsoftware raid使わないとか別の方策あった気もします。

    追記:
    8192でも微妙につっかえる場面が見受けられたので、結局32768(最大)まで増やしています。
    ページサイズ(=4KB)×stripe_cache_size×ディスク数分のメモリ使うので、あんまし増やしすぎるのも嫌だなーと思ったんですが。
    メモリで困る前にCPU数で困りそうな気がしたのと、メモリは最悪増設できるしなーってことで、とりあえずはこのままで。

    comments

    1. [...] RAID5がiowait出まくりで遅いので、stripe_cache_sizeを増やした話 | Fusic Developers’ Weblog [...]