みくにまるのブログ

意識低い系ブロガー、みくにまるが送るブログ。

BtrfsでZstdの圧縮をする際のマウントオプションでcompressにするかcompress-forceどっちにするかの比較

Btrfsでの圧縮オプション、意外と圧縮されていないと思うことありませんか?

Btrfsでは圧縮を有効化する際のマウントオプションにcompressとcompress-forceという二種類のオプションがあり

compressは事前にBtrfsで圧縮が効果的なのかを判定してから圧縮アルゴリズムにデータを渡し
ompress-forceではとりあえず全部圧縮アルゴリズムにデータを渡すという仕組みになっています。

これだけ読むと一見compress-forceは全部圧縮してしまって非効率に思えるのですが
実際にcompress-forceを有効化しても全てのファイルが圧縮される訳ではありません。

どうも調べるとzstdは内部でも圧縮が有効かどうかを判定するアルゴリズム保有して
このアルゴリズムがまたえらい高速なのだとか。
しかも、Btrfs側でも、実際に圧縮の後で実際にサイズが有効なレベルで縮小されているかを確認して
縮小されていなかったら圧縮を取りやめる機能が付与されています。

forceという用語のせいで分かりにくいですが、要は

  • compress
    Btrfsで圧縮可能か判定 → zstdで圧縮可能か判定 → 実際に圧縮後に効果的な圧縮できているか判定

  • compress-force
    zstdで圧縮可能か判定 → 実際に圧縮後に効果的に圧縮できてるか判定

このような解釈。

3段階で判定するか2段階で判定するかというだけですね。

forceというのは、圧縮を強制するというよりは
要は圧縮アルゴリズム側に渡すのを強制するかどうか。

forceにしても効果的でないファイルは圧縮を自動で回避してくれるので
zstdの場合はマウントオプションはforceで良さそうです。