Skip to content

Strategy for compression levels 8 and 9 #56

@fintelia

Description

@fintelia

What compression speed would we be OK for levels 8 and 9?

If we targeted around 15-20 MB/s and 5-10 MB/s respectively, then we could use (the slightly inaccurately named) optimal parsing strategy to get significantly better compression ratios. In my very preliminary experiments I've been able to hit:

fdeflate-opt:  19.0 MiB/s    22.62%
fdeflate-opt:   9.2 MiB/s    22.33%

I think I may be able to improve compression ratio further by adopting libdeflate's block splitting strategy, but their code is extremely well optimized, so replicating it isn't necessarily going to get as good speed


For reference, these are the current compression speeds on my system for qoibench:

fdeflate0:    17052.1 MiB/s   100.02%
fdeflate1:      390.2 MiB/s    24.41%
fdeflate2:      275.2 MiB/s    23.79%
fdeflate3:      223.2 MiB/s    23.77%
fdeflate4:      150.5 MiB/s    23.67%
fdeflate5:      105.6 MiB/s    23.66%
fdeflate6:       79.3 MiB/s    23.37%
fdeflate7:       60.6 MiB/s    23.23%

miniz_oxide:

miniz_oxide7:    32.6 MiB/s    23.44%
miniz_oxide8:    25.2 MiB/s    23.36%
miniz_oxide9:    21.6 MiB/s    23.31%

zlib-rs:

zlib-rs7:        64.0 MiB/s    23.28%
zlib-rs8:        37.5 MiB/s    23.04%
zlib-rs9:        24.6 MiB/s    22.86%

libdeflate:

libdeflate7:     95.5 MiB/s    23.36%
libdeflate8:     58.7 MiB/s    23.10%
libdeflate9:     46.6 MiB/s    23.04%
libdeflate10:    19.0 MiB/s    22.16%
libdeflate11:    11.4 MiB/s    21.88%
libdeflate12:     7.2 MiB/s    21.70%

zopfli:

zopfli[iter=1]:   0.6 MiB/s    21.78%
zopfli[default]: 0.27 MiB/s    21.47% 

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions