ZFS-特にRAIDZにおけるZILの役割と有用性について

ZILなんていらないじゃんというブログ記事にしっかりと突っ込みをもらいました。 役割と構成を考えれば安全性UPはもちろんZILでパフォーマンスがあがる事もあるよというお話。
ZFS
6
Takeshi HASEGAWA @hasegaw

いい加減なこと書けないという恐怖に襲われた

2010-06-07 22:06:35
sawanoboly @sawanoboly

すいません、興味深いお話しだっのでtogetterさせていただきました。 RT @hasegaw: まさかのtogetterられ http://togetter.com/li/27526

2010-06-07 22:16:35
Takeshi HASEGAWA @hasegaw

@sawanoboly まとまりなくてすみません。ZILの件は答えにたどり着きましたか

2010-06-07 22:18:48
sawanoboly @sawanoboly

@hasegaw 実はあまりわかってないのです。。 > ZIL効果。 ZFSのデバイスがNFSの先にあれば効果あるのでしょうが、そういうことではないんですよね? 普通にraidz + sharenfs で使った時に効果大、と解釈してますが。

2010-06-07 22:28:22
Takeshi HASEGAWA @hasegaw

@sawanoboly NFSの場合に効果が出やすいのは、たとえばtarでNFS領域にファイルを展開するときtcpdumpで眺めてみるとわかりますがNFSクライアントがファイル一つ一つクローズする際に静止化完了まで待つFSYNCフラグを建てるのです。

2010-06-07 22:32:17
Takeshi HASEGAWA @hasegaw

@sawanoboly 結果的に、たとえば数キロバイトのファイルを書き込むたびにディスクへのトランザクションを完了させないといけないわけです。ZFSをNFSエクスポートしてそこにapacheのtarballなり展開するとそのへん体感できるかと。

2010-06-07 22:34:12
Takeshi HASEGAWA @hasegaw

@sawanoboly RAID-Zを組むと、それらのデータを各ディスクにストライプするわけですが、そこで5kbのファイル書くたびにトランザクションをコミットするとなると、RAID-Zを構成するディスク全てにその証を書き込みにいくことになるわけですね。これは負荷が高い。

2010-06-07 22:35:42
sawanoboly @sawanoboly

@hasegaw この場合はLOGに個別の十分に早いデバイスを指定している、という前提で良いのでしょうか、DATA用といっしょくたでなく。

2010-06-07 22:36:23
Takeshi HASEGAWA @hasegaw

@sawanoboly そこでZILがあると何がおきるか。ZILがある場合は、まずZILに「これからやること」を記録して、それが完了した時点で書き込み完了の返事を返すので、ディスク全てにコミットするよりもコストが低いわけです。

2010-06-07 22:37:43
Takeshi HASEGAWA @hasegaw

@sawanoboly ZIL上に溜まったデータは後でまとめてプールに反映されます。仮にここで電源断があってもZILが残っているのでトランザクションは再生可能です。

2010-06-07 22:39:16
Takeshi HASEGAWA @hasegaw

@sawanoboly 手元の評価ベースだと 7200rpm 3.5inch HDDのZILなしRAID-Zより、それに7200rpm 2.5inch HDDの一部をZILとして加えたほうがパフォーマンスは明らかに上でした。

2010-06-07 22:40:35
Takeshi HASEGAWA @hasegaw

@sawanoboly 結論から言えばRAID-Zの場合、ZILは独立したブロックデバイスであれば、同じディスク上だとしても分けて作ったほうがマシかもしれません。その構成は試してないので。

2010-06-07 22:43:55
sawanoboly @sawanoboly

@hasegaw なるほど! ライトキャッシュと同様の効果ですね。

2010-06-07 22:44:13
Takeshi HASEGAWA @hasegaw

手元のZFSストレージはBaraccuda ES.2 7200rpm 1GB ×3、ZIL用に利用したのはHITACHI IBMの2.5inch 7200rpm

2010-06-07 22:45:04
Takeshi HASEGAWA @hasegaw

@sawanoboly RAID-5などで必要となるキャッシュ+BBUに性格は似ています。

2010-06-07 22:46:08
sawanoboly @sawanoboly

@hasegaw LOG独立前のパフォーマンス低下する印象が残っていたのですが、ZILの役割を十分に研究していなかった。ありがとうございます。

2010-06-07 22:47:14
Takeshi HASEGAWA @hasegaw

ソフトウェアベースのRAID-5を使うぐらいならZFSのトランザクション保護されたRAID-Zのほうがよい。

2010-06-07 22:47:22
sawanoboly @sawanoboly

@hasegaw ちなみにZILを独立させないと、やっぱりRAIDZ上のすべてのデバイスにストライピングするのでしょうか。

2010-06-07 22:49:13
sawanoboly @sawanoboly

SSDをZILに使えば、ZFSミラーの環境でもパフォーマンスがあがりそうだ

2010-06-07 22:50:12
Takeshi HASEGAWA @hasegaw

@sawanoboly SPARCマシンって必ずしもRAIDカードやBBキャッシュないですからね。そこでSVMを使ってRAIDを組むと最低3つのレプリカをもって多数決しながらRAIDするわけです。ZFSはRAIDカードのBBキャッシュのかわりにNVRAMをZILとして使う発想。

2010-06-07 22:50:34
Takeshi HASEGAWA @hasegaw

@sawanoboly おそらく全てのディスクにストライピングするか、それに近い状態になります。プールの先頭と最後(!!)に2個ずつメタデータ領域があり、そこ全てに最終的なトランザクション番号を書き込むことによってコミット完了とするはずなので。つまりヘッドを2回ふりまわす必要も

2010-06-07 22:52:40
Takeshi HASEGAWA @hasegaw

@sawanoboly コード解析などではなく私の経験・理解ベースでの話なので、必要であればOpenSolaris界隈の人に相談してください。

2010-06-07 22:53:53
sawanoboly @sawanoboly

@hasegaw どうもありがとうございます! 環境はあるのでためしてみます。 ところでこちら折角なので再度Toggeterさせていただいても?

2010-06-07 22:58:05