Skip to content

stream_compress_long default doesn't add --long to command line #615

@HaleTom

Description

@HaleTom

My config:

stream_compress            zstd
stream_compress_level      default
stream_compress_threads    0  # zstd will detect physical CPU cores
stream_compress_long       default
stream_compress_adapt      yes

I don't see --long in the output:

### (dryrun) btrfs send -p '/media/ssd/btrbk/rootfs/rootfs.20250406T1553' '/media/ssd/btrbk/rootfs/rootfs.20250410T0800' | mbuffer -v 1 -m 2
56m | zstd -c -T0 --adapt | ssh -i '/root/.ssh/id_ed25519_nas_btrbk' -o compression=no root@nas 'zstd -d -c -T0 --adapt | mbuffer -v 1 -q -m
 256m | btrfs receive '\''/btrbk/svelte/rootfs/'\'''

The man page says:

       stream_compress_long default|<number>
           Enable long distance matching for the specified <compress_command>.
           Refer to the related man-page for details. Only supported for "zstd".

zstd man page says:

       ○   --long[=#]: enables long distance matching with # windowLog, if  #
           is  not  present it defaults to 27. This increases the window size
           (windowLog) and memory usage for both the  compressor  and  decom‐
           pressor. This setting is designed to improve the compression ratio
           for files with long matches at a large distance.

I would expect to see --long with default and --long=<num> with a number specified.

Work-around

stream_compress_long       27  # Work-around: explicitly set zstd's default == 2^27 == 128MB

Suggestion

Allow default can actually use zstd's default with --long with no argument.

Add no, or alternatively yes:

stream_compress_long no|default|<number>
stream_compress_long yes|default|<number>

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions