Zstd: ZSTD_c_targetCBlockSize == ZSTD_TARGETCBLOCKSIZE_MAX conduit à une compression improbablement mauvaise

Créé le 28 avr. 2020  ·  3Commentaires  ·  Source: facebook/zstd

L'utilisation de ZSTD_CCtxParams_setParameter(cctxParams, ZSTD_c_targetCBlockSize, ZSTD_TARGETCBLOCKSIZE_MAX) conduit à une compression improbablement mauvaise pour les sources avec de grandes séquences minimales (> 1 Ko).

Utilisation d'une concaténation répétée d'un CSS minifié:
Avec la définition de targetCBlockSize == ZSTD_TARGETBLOCKSIZE_MAX:
bootstrap.min.css : 97.31% (13862462 => 13488900 bytes, bootstrap.min.css.zst)
Sans définir targetCBlockSize:
bootstrap.min.css : 0.15% (13862462 => 20476 bytes, bootstrap.min.css.zst)

Remarque supplémentaire: j'ai rencontré cela en essayant de réduire la taille du bloc lors de la décompression concernant # 2093. Si au lieu de définir TargetCompressedBlockSize, ZSTD_BLOCKSIZEMAX lui-même est réduit, ce qui entraîne également une réduction de la taille de bloc maximale, cela a un impact beaucoup plus faible sur la compression.


La source utilisée a été obtenue via la séquence suivante:
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

Commentaire le plus utile

@dciliske J'ai reproduit le problème au niveau 22. Il n'est pas présent dans zstd-1.4.4, donc il n'en a jamais fait une version. Il semble que je l'ai présenté dans https://github.com/facebook/zstd/pull/1947. Je vais le réparer bientôt.

Tous les 3 commentaires

Je vais poser une question ici concernant l'architecture: targetCBlockSize fait-il supposer au compresseur qu'il va être introduit dans un décompresseur qui n'aura aucune connaissance en dehors du bloc qu'il reçoit? c'est-à-dire qu'il s'agit d'un décompresseur de streaming entièrement sans tampon?

targetCBlockSize est "destiné" à être utilisé dans des scénarios de streaming où vous souhaitez réduire le temps de décompression du premier octet. Donc, si la taille de votre paquet est de 4 Ko, vous pouvez définir la taille de votre bloc cible sur 4 Ko et tenter de rendre chaque paquet décompressible, au lieu d'avoir à attendre 128 Ko avant de décompresser le premier octet.

Je ne suis pas sûr de ce qui se passe dans ce scénario, mais avec l'entrée, il devrait être facile à reproduire et à corriger. Je l'examinerai bientôt. Merci encore pour le rapport et les instructions de repro détaillées!

@dciliske J'ai reproduit le problème au niveau 22. Il n'est pas présent dans zstd-1.4.4, donc il n'en a jamais fait une version. Il semble que je l'ai présenté dans https://github.com/facebook/zstd/pull/1947. Je vais le réparer bientôt.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

ghost picture ghost  ·  4Commentaires

sergeevabc picture sergeevabc  ·  3Commentaires

AbdulrahmanAltabba picture AbdulrahmanAltabba  ·  3Commentaires

scherepanov picture scherepanov  ·  3Commentaires

pjebs picture pjebs  ·  3Commentaires