nkjmkzk.net

powered by Kazuki Nakajima

ZFSのDeduplication実装について

ZFSのリードデベロッパー、Jeff Bonwick氏は11月2日に投稿した「ZFS Deduplication」のBlogエントリでZFSに重複排除機能を実装したことをアナウンスしました。重複排除はストレージ界隈では熱い注目を集めている機能で、オープンソースであるZFSがそれを搭載したということで多くのエンジニアの好奇心を刺激しています。重複排除技術に関しては最近ではNetAppとEMCが、DataDomainという重複排除機能をウリにしたストレージを販売する会社の買収合戦を繰り広げたことが記憶に新しいところです。

*結局DataDomainはEMCに買収されています

ということで各ストレージベンダーはこの技術を自社製品に実装し、差別化を計ることに躍起になっていると見受けられます。

ほとんどBonwick氏のBlogエントリの訳みたいになってしまいますが、このZFSの重複排除機能について少し私見を交えてまとめておきます。まず、ZFSの重複排除実装について重要な仕様を2つ列挙しておきます。

  • 重複判定単位:ブロックレベル
  • 重複判定時期:リアルタイム

この2点について以下で論じていきます。

この重複排除技術、何がいいのかというとつまるところ必要なストレージ容量を削減できる、という点です。例えばあるファイルの容量が100Mbyteであったとるすると、そのファイルを2つ格納すれば通常は必要ストレージ容量は200Mybteです。これに重複排除機構を適用すると、これまで別々のディスク領域を確保して格納されていた2つのファイルは同じデータであるとストレージが認識し、実体を一つにまとめることで必要ストレージ容量は100Mybteに圧縮できます。ただしこれは単純な「ファイルレベル」の重複排除であり、他にはブロックレベルの重複排除、バイトレベルの重複排除があります。ファイルレベルの重複排除ではストレージ側が同じファイルであると認識すればディスク上に格納される実体は一つにすることで必要容量をセーブすることができます。しかしファイルレベルの場合たとえ1byteでも違うと別のファイルと見なされるので、一方のファイルを少し編集してしまうと途端に必要ストレージ容量は100Mbyte -> 200Mbyteに膨らんでしまいます。ブロックレベルであればあくまでもブロック単位での重複判定となるため、編集した部分のブロックだけを別途確保すればこと足ります。ただし、ブロックレベルではこの重複判定をファイルレベルとは比較にならない程行う必要がでてくるので、その分処理性能に関してオーバーヘッドが見込まれます。ブロックレベルの重複排除は処理に幾分かオーバーヘッドが見込まれるものの、結果としてファイルレベルの重複排除よりも多くの容量をセーブできます。

そしてZFSの重複排除機能はブロックレベルで実装されています。これはストレージ側で実装する重複排除としてはブロックレベルが最も効率的ということと、ZFSというファイルシステムの設計思想として、より現代的なマルチコアで同時実行性能の高いH/Wや、そのマルチコアをうまく扱うことができるマルチスレッドOSを稼働環境の前提としていることが設計根拠に挙げられます。つまりCPUをより積極的に利用すべき、というスタンスです。

もう一つ、Deduplication機構の実装として注目すべきなのはいつ重複判定を行うのか、です。これはデータをディスクに書き出す前に行うリアルタイム型と、定期的にディスク上のデータをスキャンして一括して重複判定を行うバッチ型があります。ZFSでは前者のリアルタイム型を採用しています。当然リアルタイムに重複判定処理を行うとディスクI/Oのレスポンスに対するインパクトが懸念されます。これがどの程度のインパクトになるかは環境に大きく依存するところなので一概には言えないものの次のように考えることができます。現在のI/Aサーバでは頭でっかち(CPU性能:高)尻つぼみ(Disk I/O性能:低)なバランスとなっています。性能に余裕が見られがちなCPUリソースをより活用し、より精度の高い重複排除を行えばディスクに転送しなければならないI/Oを削減することができ、結果的によりバランスのとれたリソース稼働を実現できる可能性があります。こうなるとディスクの容量削減だけではなく、I/O帯域の削減につながってくるため、環境によってはボトルネックが解消されて全体的な性能が向上する可能性すらあります。なのでリアルタイム型の重複排除は理にかなっている、と考えることができます。

ここまででZFSの重複排除機構について最も重要な仕様については理解することができますが、同時に次のような疑問も湧いてきます。

「これまでも容量を削減する機構として圧縮やスナップショットがあったけどそれとはどう違うのか?」

この疑問について次のエントリでまとめようと思います。

with one comment

Written by 中嶋 一樹

11月 8th, 2009 at 1:33 pm

Posted in Uncategorized

Tagged with ,

One Response to 'ZFSのDeduplication実装について'

Subscribe to comments with RSS or TrackBack to 'ZFSのDeduplication実装について'.

  1. [...] 前のエントリで予告したDeduplication, 圧縮, スナップショットの違いについて簡潔にまとめておきます。 [...]

Leave a Reply