Web更新

UbuntuでZFSを使ってみよう 第33回 OpenZFS2.1 の変更点を確認しよう(2)

今回は前回に引き続き、OpenZFS 2.1の変更点を確認します。

OpenZFS 2.1での変更点

永続的なL2ARC

L2ARCキャッシュデバイス上のデータを、再起動後も持続するようになりました。この機能は、軽量の永続的なメタ構造を実装することにより、再起動後にL2ARCの内容を復元できます。これにより、大規模キャッシュを持つステムにおいて、再起動時の読み込み性能の低減を大幅に防ぎます。

ZStandard 圧縮

ZStandard 圧縮は最新の高性能汎用圧縮アルゴリズムで、gzip と同等かそれ以上の圧縮レベルを提供し、はるかに優れた性能を持ちます。ZStandardは、好ましいパフォーマンスと圧縮のトレードオフを選択できるように、圧縮レベルの多くの選択肢を提供します。

ZFSの圧縮時のアルゴリズムとして、ZStandardを追加したのが、zstdと、zstd-fastです。zfsd-fastは、zstdと逆方向のレベルで圧縮します。

zstdで利用可能な圧縮レベルはzstd-1〜zstd-19です。さらに、zstd-fastでサポートされているより高速なレベルは、1-10、20-100(10刻み)、500、1000で、レベルごとに遅く圧縮率が高くなります。zstd-fast は基本的に zstd の逆方向のレベルであるため、レベルごとに速くなり圧縮率が低くなります。

ZFSのgzip 圧縮では、異なるレベルごとに個別の圧縮タイプを使用するアプローチが採用されています。zstdでは、compression_level という新しい隠しプロパティを追加しました。これは、すべての zstd レベルが zio_compress enum の単一のエントリを使用し、すべてのレベルで同じ関数を使用するからです。また、ブロックがどのレベルで圧縮されているかを知るため、圧縮ヘッダ(非圧縮サイズ)の後に、データと共にインラインでディスクに圧縮レベルが保存されています。

以下は、各圧縮方法での圧縮率と転送速度のグラフ例です。もちろん環境によって、データは異なります。

Speeds are for comparative reference only and will differ based on the system from which the test is ran

Redacted zfs send/receive

Redacted zfs sendと receiveは、ユーザーはデータのサブセットをターゲットシステムに送信できます。この機能の使用例としては、データウェアハウス、テスト/デバッグ、分析環境に機密情報を送信しないことが考えられます。また、zreplのようなバックアップツールで、特定のデータセット内の重要でないデータを複製しないことで、容量を節約できます。

Redacted zfs sendと receiveは、3段階のプロセスで行われます。

  1. ターゲットに送信するスナップショットの(1つ以上の)クローンを作成
    このクローンでは、不要なデータ、または不要なデータがすべて削除または変更されます。
    このクローンは次にスナップショットされ、「redaction snapshot」が作成されます。
  2. 新しく追加されたzfs redactコマンドにより、redaction bookmarkを作成
    redaction bookmarkは、redaction snapshotによって変更されたスナップショット内のブロックのリストを保存します。
  3. redaction bookmark をzfs sendにパラメータとして渡す
    再編集されたスナップショットに送信するとき、redaction bookmarkは、機密または不要な情報を含むブロックをフィルタリングするために使用されます。それらのブロックは、送信ストリームに含まれません。
    redaction bookmarkから送信する場合、redaction bookmarkのcreate_txg以降に変更された宛先スナップショットのブロックに加えて、それを含むブロックが候補ブロックとして考慮されます。
    このステップは、いくつかのブロックが誤って、もしくは不必要に再編集スナップショットで修正された場合、ターゲットがデータを復元可能とするために必要です。

高速な 容量推定を可能にするためのブックマークの変更には、ブックマークへのデッドリストの追加が含まれます。また、これらのデッドリストのライフサイクルを管理するロジックも存在します。

新しいサイズ推定処理は、従来は正確な推定ができなかったケースで動作します。その場合、データブロックを読み込まず送信することで、実行時間を大幅に短縮し、バイト単位の正確なサイズ推定が可能になります。

終わりに

今回は前回に引き続き、OpenZFS 2.1の変更点を確認しました。次回も、OpenZFS 2.1以降の変更点について掘り下げます。次回をお楽しみに。

さて、このコラムを掲載いただいているデジタル・ヒュージ・テクノロジー社は老舗のOSSインテグレーターです。特にLinuxは強く、OSSを活用した業務システムの実績も多いです。興味がある方は以下のページもご覧ください。
DHT OSS導入コンサルティングサービス

関連記事一覧