Zstd: ZSTD_c_targetCBlockSize == ZSTD_TARGETCBLOCKSIZE_MAXは、おそらく悪い圧縮につながります

作成日 2020年04月28日  ·  3コメント  ·  ソース: facebook/zstd

ZSTD_CCtxParams_setParameter(cctxParams, ZSTD_c_targetCBlockSize, ZSTD_TARGETCBLOCKSIZE_MAX)を使用すると、最小シーケンスが大きい(> 1kB)ソースの圧縮がおそらく悪くなります。

縮小されたCSSの繰り返し連結を使用する:
targetCBlockSize == ZSTD_TARGETBLOCKSIZE_MAXを設定すると:
bootstrap.min.css : 97.31% (13862462 => 13488900 bytes, bootstrap.min.css.zst)
targetCBlockSizeを設定しない場合:
bootstrap.min.css : 0.15% (13862462 => 20476 bytes, bootstrap.min.css.zst)

さらに注意:#2093に関して解凍時にブロックサイズを縮小しようとした結果、これが発生しました。 TargetCompressedBlockSizeを設定する代わりに、ZSTD_BLOCKSIZEMAX自体が縮小され、最大ブロックサイズも縮小される場合、圧縮への影響ははるかに小さくなります。


使用したソースは、次のシーケンスで取得しました。
rm bootstrap.min.css; wget https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css && for i in {1..5}; do cat bootstrap.min.css >> bootstrap_2.min.css; cat bootstrap_2.min.css >> bootstrap.min.css; done && rm bootstrap_2.min.css

bug release-blocking

最も参考になるコメント

@dciliskeレベル22で問題を再現しました。zstd-1.4.4には存在しないため、リリースにはなりませんでした。 https://github.com/facebook/zstd/pull/1947で紹介したよう

全てのコメント3件

ここでアーキテクチャに関して質問します。targetCBlockSizeにより、コンプレッサーは、受け取ったブロックの外部に知識がないデコンプレッサーに供給されると想定しますか? つまり、完全にバッファレスのストリーミングデコンプレッサですか?

targetCBlockSizeは、最初のバイトを解凍する時間を短縮したいストリーミングシナリオで使用する「意味のある」ものです。 したがって、パケットサイズが4KBの場合、最初のバイトを解凍する前に完全な128KBを待つ必要はなく、ターゲットブロックサイズを4KBに設定して、各パケットを解凍可能にしようとすることができます。

このシナリオで何が起こっているのかわかりませんが、入力を使用すると、簡単に再現して修正できるはずです。 すぐに調べます。 レポートと詳細な再現手順をありがとうございました!

@dciliskeレベル22で問題を再現しました。zstd-1.4.4には存在しないため、リリースにはなりませんでした。 https://github.com/facebook/zstd/pull/1947で紹介したよう

このページは役に立ちましたか?
0 / 5 - 0 評価