15 Aug, 2020

1 commit

  • This patch replaces all memcpy() calls with LZ4_memcpy() which calls
    __builtin_memcpy() so the compiler can inline it.

    LZ4 relies heavily on memcpy() with a constant size being inlined. In x86
    and i386 pre-boot environments memcpy() cannot be inlined because memcpy()
    doesn't get defined as __builtin_memcpy().

    An equivalent patch has been applied upstream so that the next import
    won't lose this change [1].

    I've measured the kernel decompression speed using QEMU before and after
    this patch for the x86_64 and i386 architectures. The speed-up is about
    10x as shown below.

    Code Arch Kernel Size Time Speed
    v5.8 x86_64 11504832 B 148 ms 79 MB/s
    patch x86_64 11503872 B 13 ms 885 MB/s
    v5.8 i386 9621216 B 91 ms 106 MB/s
    patch i386 9620224 B 10 ms 962 MB/s

    I also measured the time to decompress the initramfs on x86_64, i386, and
    arm. All three show the same decompression speed before and after, as
    expected.

    [1] https://github.com/lz4/lz4/pull/890

    Signed-off-by: Nick Terrell
    Signed-off-by: Andrew Morton
    Cc: Yann Collet
    Cc: Gao Xiang
    Cc: Sven Schmidt
    Cc: Greg Kroah-Hartman
    Cc: Ingo Molnar
    Cc: Arvind Sankar
    Link: http://lkml.kernel.org/r/20200803194022.2966806-1-nickrterrell@gmail.com
    Signed-off-by: Linus Torvalds

    Nick Terrell
     

25 Feb, 2017

2 commits

  • Remove the functions introduced as wrappers for providing backwards
    compatibility to the prior LZ4 version. They're not needed anymore
    since there's no callers left.

    Link: http://lkml.kernel.org/r/1486321748-19085-6-git-send-email-4sschmid@informatik.uni-hamburg.de
    Signed-off-by: Sven Schmidt
    Cc: Bongkyu Kim
    Cc: Rui Salvaterra
    Cc: Sergey Senozhatsky
    Cc: Greg Kroah-Hartman
    Cc: Herbert Xu
    Cc: David S. Miller
    Cc: Anton Vorontsov
    Cc: Colin Cross
    Cc: Kees Cook
    Cc: Tony Luck
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sven Schmidt
     
  • Patch series "Update LZ4 compressor module", v7.

    This patchset updates the LZ4 compression module to a version based on
    LZ4 v1.7.3 allowing to use the fast compression algorithm aka LZ4 fast
    which provides an "acceleration" parameter as a tradeoff between high
    compression ratio and high compression speed.

    We want to use LZ4 fast in order to support compression in lustre and
    (mostly, based on that) investigate data reduction techniques in behalf
    of storage systems.

    Also, it will be useful for other users of LZ4 compression, as with LZ4
    fast it is possible to enable applications to use fast and/or high
    compression depending on the usecase. For instance, ZRAM is offering a
    LZ4 backend and could benefit from an updated LZ4 in the kernel.

    LZ4 homepage: http://www.lz4.org/
    LZ4 source repository: https://github.com/lz4/lz4 Source version: 1.7.3

    Benchmark (taken from [1], Core i5-4300U @1.9GHz):
    ----------------|--------------|----------------|----------
    Compressor | Compression | Decompression | Ratio
    ----------------|--------------|----------------|----------
    memcpy | 4200 MB/s | 4200 MB/s | 1.000
    LZ4 fast 50 | 1080 MB/s | 2650 MB/s | 1.375
    LZ4 fast 17 | 680 MB/s | 2220 MB/s | 1.607
    LZ4 fast 5 | 475 MB/s | 1920 MB/s | 1.886
    LZ4 default | 385 MB/s | 1850 MB/s | 2.101

    [1] http://fastcompression.blogspot.de/2015/04/sampling-or-faster-lz4.html

    [PATCH 1/5] lib: Update LZ4 compressor module
    [PATCH 2/5] lib/decompress_unlz4: Change module to work with new LZ4 module version
    [PATCH 3/5] crypto: Change LZ4 modules to work with new LZ4 module version
    [PATCH 4/5] fs/pstore: fs/squashfs: Change usage of LZ4 to work with new LZ4 version
    [PATCH 5/5] lib/lz4: Remove back-compat wrappers

    This patch (of 5):

    Update the LZ4 kernel module to LZ4 v1.7.3 by Yann Collet. The kernel
    module is inspired by the previous work by Chanho Min. The updated LZ4
    module will not break existing code since the patchset contains
    appropriate changes.

    API changes:

    New method LZ4_compress_fast which differs from the variant available in
    kernel by the new acceleration parameter, allowing to trade compression
    ratio for more compression speed and vice versa.

    LZ4_decompress_fast is the respective decompression method, featuring a
    very fast decoder (multiple GB/s per core), able to reach RAM speed in
    multi-core systems. The decompressor allows to decompress data
    compressed with LZ4 fast as well as the LZ4 HC (high compression)
    algorithm.

    Also the useful functions LZ4_decompress_safe_partial and
    LZ4_compress_destsize were added. The latter reverses the logic by
    trying to compress as much data as possible from source to dest while
    the former aims to decompress partial blocks of data.

    A bunch of streaming functions were also added which allow
    compressig/decompressing data in multiple steps (so called "streaming
    mode").

    The methods lz4_compress and lz4_decompress_unknownoutputsize are now
    known as LZ4_compress_default respectivley LZ4_decompress_safe. The old
    methods will be removed since there's no callers left in the code.

    [arnd@arndb.de: fix KERNEL_LZ4 support]
    Link: http://lkml.kernel.org/r/20170208211946.2839649-1-arnd@arndb.de
    [akpm@linux-foundation.org: simplify]
    [akpm@linux-foundation.org: fix the simplification]
    [4sschmid@informatik.uni-hamburg.de: fix performance regressions]
    Link: http://lkml.kernel.org/r/1486898178-17125-2-git-send-email-4sschmid@informatik.uni-hamburg.de
    [4sschmid@informatik.uni-hamburg.de: v8]
    Link: http://lkml.kernel.org/r/1487182598-15351-2-git-send-email-4sschmid@informatik.uni-hamburg.de
    Link: http://lkml.kernel.org/r/1486321748-19085-2-git-send-email-4sschmid@informatik.uni-hamburg.de
    Signed-off-by: Sven Schmidt
    Signed-off-by: Arnd Bergmann
    Cc: Bongkyu Kim
    Cc: Rui Salvaterra
    Cc: Sergey Senozhatsky
    Cc: Greg Kroah-Hartman
    Cc: Herbert Xu
    Cc: David S. Miller
    Cc: Anton Vorontsov
    Cc: Colin Cross
    Cc: Kees Cook
    Cc: Tony Luck
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sven Schmidt
     

24 Aug, 2013

1 commit

  • The LZ4 code is listed as using the "BSD 2-Clause License".

    Signed-off-by: Richard Laager
    Acked-by: Kyungsik Lee
    Cc: Chanho Min
    Cc: Richard Yao
    Signed-off-by: Andrew Morton
    [ The 2-clause BSD can be just converted into GPL, but that's rude and
    pointless, so don't do it - Linus ]
    Signed-off-by: Linus Torvalds

    Richard Laager
     

10 Jul, 2013

1 commit

  • This patchset is for supporting LZ4 compression and the crypto API using
    it.

    As shown below, the size of data is a little bit bigger but compressing
    speed is faster under the enabled unaligned memory access. We can use
    lz4 de/compression through crypto API as well. Also, It will be useful
    for another potential user of lz4 compression.

    lz4 Compression Benchmark:
    Compiler: ARM gcc 4.6.4
    ARMv7, 1 GHz based board
    Kernel: linux 3.4
    Uncompressed data Size: 101 MB
    Compressed Size compression Speed
    LZO 72.1MB 32.1MB/s, 33.0MB/s(UA)
    LZ4 75.1MB 30.4MB/s, 35.9MB/s(UA)
    LZ4HC 59.8MB 2.4MB/s, 2.5MB/s(UA)
    - UA: Unaligned memory Access support
    - Latest patch set for LZO applied

    This patch:

    Add support for LZ4 compression in the Linux Kernel. LZ4 Compression APIs
    for kernel are based on LZ4 implementation by Yann Collet and were changed
    for kernel coding style.

    LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html
    LZ4 source repository : http://code.google.com/p/lz4/
    svn revision : r90

    Two APIs are added:

    lz4_compress() support basic lz4 compression whereas lz4hc_compress()
    support high compression or CPU performance get lower but compression
    ratio get higher. Also, we require the pre-allocated working memory with
    the defined size and destination buffer must be allocated with the size of
    lz4_compressbound.

    [akpm@linux-foundation.org: make lz4_compresshcctx() static]
    Signed-off-by: Chanho Min
    Cc: "Darrick J. Wong"
    Cc: Bob Pearson
    Cc: Richard Weinberger
    Cc: Herbert Xu
    Cc: Yann Collet
    Cc: Kyungsik Lee
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Chanho Min