サーバーで遊ぶ: その4 freenas 8 RAID-Z2 では、何台のHDDが良いのだろう? | どんぐりトトログ

どんぐりトトログ

日記と言うより、お人形劇 … ですね。 (;・∀・)

さて、何とか中身を救い出せたサーバー 3号機くん。

巷では認識したり、されなかったりの ASRock SATA3 カードも、2枚挿して合計8台のHDD
 まで動かしてみたが、実際のところ何台の構成が3号機くんに合っているのだろうか。

データを、まだ戻していないので、こう言うのを試すなら今がチャンスだわね。

もし8台未満だったら、余ったHDDは、今回の様な時に備えて、予備にできるしね。


どなたかの web page で、同じ zfs RAID-Z2 でも、freenas と BSD では、zfs のバージョンが
異なる為なのか、5台構成が良かったり6台構成が良かったりと様々だったので、自分の
環境では、どんなものなのだろうか調べて見ることにした。


お約束ですが、ここでの内容は、私が色々、試行錯誤した経緯を備忘も兼ねて残したもので、
特に途中の設定については、後でひっくり返したりしているので、間違いも多々あります。
ですので、あくまで読み物として留めてください。

なお、私自身、unix を始めとし、linux も free bsd も freenas も、精通しているわけでは
ありません。
何と言っても、freenas のGUI簡単設定に惹かれて試行し始めたぐらいですからね。


今回の実験は、以下の条件で行なってみた。

サーバーの主な構成
■ freenas のバージョン  8.04-BETA2-x64 (途中から 8.04-RC1-x64
zfs filesystem ver4
zfs storage pool version 15
■ MB Intel DG43GT
■ CPU Core2DUO E7500 2.93GHz
■ Memory 8GByte
■ SATA カード ASRock SATA3
■ HDD  HGST 2TByte 7200rpm
■ 共有方法は、CIFS

クライアントの主な構成
■ windows 7 Pro 64bit
■ CPU Core2Quad Q9550 2.83GHz
■ Memory 4GByte
■ MB ASUS P5K
■ CrystalDiskMark 3.0.1 x64 にて測定

・HDDの接続台数などを変更する度に、zfsボリュームを新規に作る。
・「サーバーで遊ぶ: その3」で助けてもらった、zfs RAID-z2 を採用する。
・ネットワークを介しての測定なので、測定結果は変動する。
 測定は最低2回行い、あまりにも大きく変動した際は、3回以上実施。
・途中で色々アクシデントが発生し、いくつか設定を見直したりしている。
 設定の違いは、測定の条件として、出来るだけ明確にしておく。

と、まあ、この実験を通じて、自分が理解したことを色々やってみているが、
必ずしも正しい設定になっているとは言えない。
(まあ、趣味の内容なので、こんなもんでしょう)


実験1 台数を変えて測定

実験条件1


まずはHDDの台数と、また、オンボードの SATA I/F と ASRock で違いが出るかどうか
試してみた。 また、参考までに RAID-Z2 と RAID-Z に差が生じているかどうか
を組み合わせてみた。

生のデータを見ても判り難いので、グラフ化を行った。

実験結果1

実験条件1-2

まず最初に思ったのは、全体的にあんまり速度が出ていないな、と言うこと。
4台構成で ASRock だけの場合、Seq WR が大きく下がっている。
(とは言え、5台以上の場合、ASRockも使わなければならないので、あくまで参考)
6台構成の際、他に比べて Seq RD/WR ともに遅い。


「6台構成を除くと、台数が増えても劇的に性能が向上する訳ではない?」
と言えそうである。

これは、ちょっと予想外。
この結果を鵜呑みにすると、台数は総容量を増やしたいだけ? となる。

そう言えば、どなたかの web page に 「従来のRAIDと異なり、RAID-Z の場合は
台数によってIOPSが高まる訳ではない。」 と言った記述があった気がする。
その時 「なんじゃ IOPS って」って言うのを思った記憶があるから…


補足:
IOPS とは、
I/O per Second の略で、一秒間にどんだけ入出力できるか?


が、多分、他にボトルネックがあって、台数による性能向上が阻害されている、
と、ここは見るべきかな。


何がボトルネックになるのか色々調べているうちに、どうも、CIFSが遅い、と言うことが
解ってきた。
初代3号機の時に、iSCSI を試してみたが、認識が間違っていなければ、iSCSI は
確かに早いが、情報を共有する目的では無く、あたかもサーバー上に自分のローカル
ディスクを設ける、と言う感じで、今回の趣旨である、色々な部屋の色々な再生機器で
視聴したい、と言う目的にはむかなそうだ、と言う理解だった。


そうこうしているうちに、どうも CIFS の SMB(Server Message Block) が遅いようだ、
と言う記述を発見。 SMB2で改善されており、freenas 8 でも表立っての設定項目は
無いが、CIFS 設定画面内の「補助パラメータ」欄に呪文を書くことで使うことが出来るとの事。


早速、「補助パラメータ」欄に

max protocol = SMB2

と言う記述を追加してみた。


         ■HDD8台 SMB                     ■HDD8台 SMB2
SMB SMB2
グラフ化はしていないが、何これ?
と思えるぐらい性能差が歴然と出た。

SMBでHDDの台数を変えて測定したのは何だったの、と思いつつも、これだけの性能が
出るなら、これからは SMB2 の時代だな、などと一人納得するのでありました。


測定している間に freenas 8 の RC1 がリリースされたので、どうせならベータ版でなく
RC1にして常用するかな、と思い、一応、同条件で測定してみた。

RC1

zfs filesystem ver4  zfs storage pool version 15 なので、基本的にはベータ版と
ほぼ同じような性能が出てるのを確認したので、もう、この設定のままバックアップした
データを戻し始めた。


すると、どうでしょう、散々ベンチマークで読み書きしていたのに、データを戻し始めた途端、
ネットワーク・エラーが多発するではないですか。
これはもしかして、SMB2って安定してない?


と考え、仕方が無いので、例の呪文を外して SMB にてデータを戻し始めた。


ネットワーク・エラーも出なくなり、順調に戻せると思いきや、



な、な、な、なんと
カーネル パニック ???  しゅ~りょう~

パニック


勘弁してよぉ。 こっちがパニックになっちゃうわな。


ベータ版の方は散々テストしてきたので、RC1を諦めてベータ版を再度インストール。
データを戻し始めると、やはり、上図の panic を吐いて終了…  


これは、とっても困った事になった。

「kmem_map too small」で google 先生に尋ねたところ、いくつかヒットするではないですか。
(英文だけど…)

そうかぁ、この現象って、私だけでないんだー と少しだけ安心。


色々調べてみると、最初は下図の左の様に使われているんだろう、と勝手に思っていたのだが、
どうやら真ん中のように使われるらしい。 んで、今回、右の様に、zfs の使う領域が
kernel の領域を突き抜けることで、panic に至ることが判明。


メモリーマップ


んで、その設定はどこにあるのかと言うと、


\boot 以下にある loader.conf 内に

kernel の使用エリアの上限(緑色)は、  変数 vm.kmem_size に
zfs の使用エリアの上限(黄色)は、    変数 vfs.zfs.arc_max に

設定することが解った。


デフォルトだと、
vfs.zfs.arc_max は 1073741824、
vm.kmem_size は 1024M
と書かれていて1024M が 1024000000 だとしたら、そりゃあ突き抜けるよね、って事になる。

それにしても、片方は10桁表記で、もう片方はメガ表記なんじゃろう…


以下は、freenas 8 のメモリーのリポート

メモリー使用状況

な~んか、zfs やら RAID-Z はメモリーを使う、使う、って言ってる割に、ほとんど
使ってないじゃない、って思っていたのだが、ここにきて漸く、解ったのでした。

1024M ってことは、1G しか使ってない訳で、上のグラフを見ても、その通りだったのだ。
てっきり、空きエリアは動的に使われるのだろうと思い込んでいた。
いやぁ、勉強になるなぁ。


んじゃ、kernel 使用エリア以外は、何に使われるのかと言うと、アプリケーションなのだそうな。
しかし freenas のアプリケーションって何 ???

各種サービスとか、そう言うのかしらん。
でも、数Gの単位は使わないよね。
そうですかぁ、残りの 7G は今まで、全く有効活用されていなかったのですかぁ。
なんと勿体無い…


freenas を使うと、GUI で楽々設定できるので、こんなコンフィグレーション・ファイルを
直接操作する必要は無いと思っていたのだが、甘かった。
よくよく考えると Windows だって、DOS の設定などを知らないとダメな場合があるしね。


ちなみに、vm.kmem_size よりも vfs.zfs.arc_max を小さく設定しなければいけない理由は
解ったけれど、実メモリーが 8G で nas 用途だったら、いくつが良い、と言う指標が
無いのですわな。


google 先生に聞いても、「一概に言えない」 とか 「vfs.zfs.arc_max は、vm.kmem_size の
1/4ぐらいが良さそうだ」 と言うアバウトな答えしか判らず…


もし、vm.kmem_size 以上のエリアがアプリケーション用だ、と言うのが正しければ、
freenas の場合(と言うか家の使い方なら)、ほとんどいらないんでね? ってことになる。
実際、レポート グラフを見ても使われている気配が無い。


後は、vfs.zfs.arc_max を、どの程度割り当てるのが良いのか ?

折角なので実験してみるしかないかな。


つづく。