少し地味な話題ですが、今回は格納データの圧縮について取り上げてみます。
最近のストレージ業界では、格納データの削減と言いますと重複排除機能に注目が
集まっています、FOBAS CSC もオブジェクト(クラウド)ストレージに格納する
データの重複排除を行っていますが、これはまた別の機会に取り上げたいと思います。
データの圧縮はご存じの通り古くからある技術ですが、圧縮・復元に比較的多くの
CPU リソースと処理時間を要するため、かつてはパフォーマンスへの影響が懸念されて
ストレージ I/O のインラインで処理される事は稀でした。
最近は、CPU 性能の向上や、圧縮アルゴリズムの改善、圧縮・復元専用のプロセッサ、
大容量の書き込みキャッシュなどの恩恵により、I/O のインラインで圧縮・復元する
事のパフォーマンスデメリットよりも、データが圧縮される事でディスクデバイスとの
データ転送時間を短縮できるメリットが上回るようになり、多くのストレージシステム
で圧縮処理がサポートされるようになってきています。
FOBAS CSC でも、ユーザが格納したデータをオブジェクト(クラウド)ストレージに
格納する際に圧縮を行っています。FOBAS CSC の場合は、I/O のインライン処理という
よりは、キャッシュ上ではそのままの形で保持されており、クラウドに格納する非同期
タスクの中で圧縮処理を行っています。
さて、世の中で扱われる非構造化データ(ファイル)は、圧縮の効果はどれくらい
あるのでしょうか。かつての非構造化データはアプリケーションがそのまま利用できる
形で格納されており、その結果として圧縮によりデータを非常にコンパクトにできました。
ここ最近では、アプリケーションデータの多くは高度に圧縮された形で格納されて
います。例としては、画像・映像データや、Officeドキュメントなどは、既に圧縮
された形でファイルになっています。
一方、ログデータなどに代表されるテキストデータは、非常に圧縮効果の高いデータ
です。これらを圧縮せずにストレージに格納してしまうのは、リソースの有効活用の
点で望ましいものではありません。
つまり、世の中の非構造化データは、圧縮効果が高いものとほとんど無いものが混在
しているという点に注意が必要です。
ブロックレベル圧縮とオブジェクトレベル圧縮の違い
世の中の一般的なストレージシステムは、ディスクブロックレベルで圧縮を行います。
また、FOBAS CSC や Windows Server などは、オブジェクト(ファイル)レベルで
圧縮を行っています。
一見どちらでも良さそうですが、圧縮に必要な CPU リソースという点では、大きく差が
出ます。
先述のとおり、ディスクに格納されるデータには、圧縮の効果が高いものとそうでない
ものが含まれています。あるストレージベンダの圧縮機能では、特定のブロックを圧縮
して、25%以上の圧縮効果が無いブロックは圧縮せずにそのまま格納するそうです。
これは、圧縮による I/O 転送時間短縮のメリットよりも、復元にかかるCPUコストや
レイテンシ増加のデメリットが上回ってしまう事による境界線なのだと思われます。
ブロックレベル圧縮では、25% 以上の圧縮ができるか否かは、圧縮してみるまで分かり
ません。これは全ての格納データを一度は圧縮処理をしているという事になります。
オブジェクト(ファイル)レベルでの圧縮の場合、ファイルの種類(マジックナンバー)
を調べる事で、特定のファイルについては圧縮済みでこれ以上の圧縮効果が期待できない
事がファイルを圧縮しなくても判断できます。
ユーザによって格納するファイルタイプは異なりますので、一概には言えませんが
一般的なオフィスドキュメントを中心に扱うファイルサーバにおいては、ほぼ半数の
ファイルの圧縮が不要であり、そのほとんどはマジックナンバーで判別できるものです。
FOBAS CSC では、オブジェクトベースでの圧縮を採用する事で、無駄な圧縮処理に
CPU リソースを浪費する事なく、全体の性能とリソース使用量の最適化を図っています。
今回は、ストレージ格納データの圧縮について取り上げました。