「どのような技術で重複排除をやっているか」を見ることはとても重要

前回のエントリでは、米国IT市場にて重複排除技術が急速に浸透しつつあることを説明しました。
本日のエントリでは、重複排除の技術面を少し紹介してみたいと思います。一口に重複排除と言っても様々な技術があり、その差異を知ることは重要なポイントの一つです。

重複排除技術には様々なバリエーションがある

重複排除技術を一文で説明するとしたら、「データ内に存在するムダな重複部分を排除して一つにまとめてしまう技術」と言うことができると思います。

しかし、その具体的な実現方法を見ていくと、そこには多くのバリエーションがあります。例えば、以下の様な基本的な点についてだけ考えても、色々な方法が存在します。

  • 1.重複検出の単位: ファイル、ブロック、などなど
  • 2.重複判定の方法: ハッシュ値を計算して比較、データをつき合わせて比較、などなど

これらのうち、どの方法が使われているかによって、重複排除効果や性能特性は大きく異なってきます。

ストレージベンダーの製品リリースなどでは「重複排除機能が追加された」とだけ記述されていることがありますが、実は、これだけでは効果や特性を知るには不十分です。そこから一歩深く入って「どのような技術で重複排除をやっているか」という点を見ることが非常に重要になります。

バックアップでは、ブロック単位での重複検出が必須

「どのような技術で重複排除をやっているか」を見ることがなぜそんなに重要なのか、例を挙げて説明してみたいと思います。重複排除技術が最も適用されているのはバックアップですから、「重複排除機能を持ったストレージにバックアップソフトウェアがデータを書く」というケースを考えてみます。

バックアップソフトは、一般的に、tarの様なアーカイブコマンドで小さなファイル群を大きなファイルにまとめ、それからストレージに書き込みます。その方が書き込み性能を向上できるためです。

この様なケースで、上記の「1.重複検出の単位」がどのような意味を持つかを考えてみます。

もし検出単位がファイルだと、「アーカイブコマンドで固められたファイル」という単位で、重複の検出が行われることになります。少し考えて頂くとわかると思いますが、これだと、バックアップを繰り返し行った際に、重複排除がほとんど効きません。アーカイブコマンドで固められたファイル群の全てが一致し、かつ、その順番が一緒の場合でしか、固められたファイルが一致しないためです。

つまり、バックアップにはファイル単位の重複検出は向いていないのです。固められたファイルの中に存在する重複を感知できる、ブロック単位での重複検出が必要になるのです。

"可変長"ブロックであることが重要

検出単位でもう一つ大事な話をします。それはブロックが固定長か可変長かという話です。

初めて聞く方にとっては、可変長?何それ?という感じかもしれません。普通、OSにおいてブロックは固定長ですから、可変長というのは耳慣れない方が多いのではないかと思います。

しかし、バックアップ向けに重複排除を行う場合、ブロックは可変長であることが非常に重要なのです。

バックアップでは、上記に書いたように、tar等で小さなファイルを大きなファイルにまとめてしまうことが一般的に行われています。この大きなファイルを固定長ブロックで切ってしまうと、その内部の重複を検出することが非常に困難になるのです。

まとめられる小さなファイルのうち、一つでもサイズが変わってしまうと、固定長ブロックはそのサイズ変更を感知できず、前回と微妙にずれたポイントでファイルをブロックに切断してしまうことになります。そうすると、そのずれのせいで、それ以降の部分では重複排除が全く効かなくなってしまうのです。

つまり、バックアップ向け重複排除の世界では、可変長ブロックという単位で重複検出が為されることがとても重要なのです。

    • -

以上、「どのような技術で重複排除をやっているか」を見ることがなぜ重要なのかを、例を用いて簡単に説明してみました。参考にして頂ければ幸いです。

なお、下記の私の講演資料には、上記以外のポイントの説明も含んでおりますので、ご興味がある方は参照頂けると幸いです。