2007.04.01 ZFSメンテナンスの日々 #2 ZFS のストレージプールについて考えてみます。ZFS は RAID1, RAID5, RAID6 相当のストレージ管理機能を持っています。これがハードウェア で実現しているものとの違いについて, あるいは得失について検討して みます。 1. ミラーリング いわゆる RAID1 ですが, ZFS のミラーリングは, チェックサムとの 比較を行い, 異常があればもう一方から読み取って, 壊れたブロック の書き戻しを行うという, かなり至れり尽くせりな機能を提供してい ます(セルフヒーリング)。また, 書き戻しに失敗すれば, そのディス クは使えないというステータス(DEGRADED)になります。寿命に絡んで くる話ですが, 物理的な故障よりも前に HDD を交換できるチャンス があると思えばありがたいことです。 これはハードウェアで実現している類の RAID1 には無い機能(超ハイ エンドな機種では対応してるかも:-)と言えます。 HDD 単体との比較ではありますが, RAID1 には読み込み速度が増速し た上, 書き込み速度が劣化しないという特徴を有しています。これは 読み込み時にプリフェッチ処理を, 書き込み時には並列書き込みを行 うことで実現しています。 ハードウェアの場合は, このあたりのさじ加減を専用 ASIC で行うわ けですが, ソフトウェアの場合, I/O スケジューリングつまり CPU を使って行います。 このあたりソフトウェア RAID1 であるところの ZFS では性能, それも CPU 負荷的に対する点で不利なところではあ りますが, multiplex が進んだ今時のハードウェア周辺事情 (共有バ ス→専有バス), さらにシリアル化による P2P 特性を考えると, ハー ドウェアの支援が得られなくても十分性能が出せると言えます:-)。 というわけで, セルフヒーリングの分だけ ZFS の勝利と(爆)。 2. RAIDZ1/RAIDZ2 いわゆる RAID5/RAID6 ですが, ZFS の(ry。とりあえずセルフヒーリ ングネタは先に出したので省略するとして, いわゆる RAID5 あるい は RAID6 とは違った点としては, 可変幅ストライプの採用によると ころが大きいようです。 ていうか, 論理の飛躍が激しくて SUN で宣 伝している内容の意味がわかりません:-)。 とりあえず分かった点と しては(間違ってるかもしれないけど) a. 可変幅ストライプによる「書き込みホール」問題の解消 b. 可変幅ストライプにより自由にデータを配置可能 c. 可変幅ストライプのおかげで, 動的なストレージ容量の変更 あたりかな。と。 ストライプサイズをファイルシステムのメタデー タで管理することで自由度を得たようです。まぁこれだけで RAID5, RAID6 をぶっちぎってる気がしないでも(後述)ないのですが:-)。 さて, RAID5(RAID6)といえばパリティの計算。 書き込みのためには, 変更に関わらないストライプとパリティの読み取りを行った後, 書き 込み分を更新した結果に基づいて, パリティの計算を行い, 変更分と パリティを書き戻すという, いわゆる「ライトペナルティ」という宿 命があります。 これは 3 台の HDD で構成された A, B というデータがあった場合, A を C に変える場合(下記表含め, 表現が独特で申し訳ない), | HDD1 | HDD2 | HDD3 | ---+-------+-------+----------+--- 変更前 | A | B | P(A, B) | ↓ ---+-------+-------+----------+--- 読み取り | - | Br | P(A, B) | ※rはread ↓ ---+-------+-------+----------+--- パリティ計算 | C | B | P(C, B) | ↓ ---+-------+-------+----------+--- 書き込み | Cw | B | P(C, B)w | ※wはwrite ---+-------+-------+----------+--- 上記のような手順が発生します。 このあたり RAID5(RAID6)の書き込 みが遅いと言われるゆえんではありますが, これが可変幅ストライプ を採用することで, 色々とメリットが生じるであろうことは予測がつ きます。 例えば, ある程度台数が多い場合でも, ストライプを短めに運用する ことで, アクセスを局所化(2〜3 台ですませるなど)することで, 書 き込み遅延をコントロールするなどです(ほんとか? :D)。たぶんこれ が「書き込みホール問題」の解消なのでしょう。これにセルフヒーリ ングと組み合わせで…という要素があるかもしれませんが。 それはそれとして:-), (例えば RAID5 の場合) 2 台壊れたら全ての データがお釈迦になるものですが, ZFS の場合影響を受けないファイ ルが存在しうる可能性がありえます。 また, ストライプ長を後から変えられるため, 容易に増強ができるこ とがわかります。これは従来の RAID5(RAID6) には見られない特徴と いえます。 というわけで, 問答無用で ZFS の勝利:-)。 3. 投稿しなかったサイレントマジョリティの意見を考慮して(謎) ハードウェア RAID(1, 5, 6) は本当に不要と言えるのでしょうか。 おそらくは数台の HDD 相手には不要と言い切れるでしょう。しかし, 台数が増えて来た場合(おそらく数十台以上の規模), ハードウェア RAID による支援無しには運用できないと思われます。 というのも, CPU, 特にメモリから HDD につながるまでのバス帯域が 限られている上, 後から増強するということができません (マザーボ ード固有値)。台数が多くなり, ストレートに I/O 帯域が増加する場 合, そのうち帯域が飽和するのが予想されます。 よって I/O 帯域の飽和を抑えるために, 複数台の HDD をグループ化 した上で上位(ZPOOL層)に見せればよいということがわかります。こ のあたりの匙加減は, 例えば SATA300 で実際の HDD の帯域とメモリ, バス(PCIe等)を考慮すれば, 理論的にどれだけの台数の HDD で飽和す るかといった計算は不可能ではないと思われます。 参考文献 http://docs.sun.com/app/docs/doc/819-6260 http://docs.sun.com/app/docs/doc/819-6260/6n89n6c9o?a=view http://docs.sun.com/app/docs/doc/819-6260/6n89n6c9o?a=view http://solaris-user.com/zfs/raid-z.html http://ja.wikipedia.org/wiki/Zettabyte_File_System http://jp.sun.com/communities/users/0612/feature01.html http://jp.sun.com/products/software/solaris/10/ds/zfs.html Written by 重村法克