Skip to content
Snippets Groups Projects
  1. Oct 24, 2022
    • Nick Terrell's avatar
      zstd: import usptream v1.5.2 · 2aa14b1a
      Nick Terrell authored
      
      Updates the kernel's zstd library to v1.5.2, the latest zstd release.
      The upstream tag it is updated to is `v1.5.2-kernel`, which contains
      several cherry-picked commits on top of the v1.5.2 release which are
      required for the kernel update. I will create this tag once the PR is
      ready to merge, until then reference the temporary upstream branch
      `v1.5.2-kernel-cherrypicks`.
      
      I plan to submit this patch as part of the v6.2 merge window.
      
      I've done basic build testing & testing on x86-64, i386, and aarch64.
      I'm merging these patches into my `zstd-next` branch, which is pulled
      into `linux-next` for further testing.
      
      I've benchmarked BtrFS with zstd compression on a x86-64 machine, and
      saw these results. Decompression speed is a small win across the board.
      The lower compression levels 1-4 see both compression speed and
      compression ratio wins. The higher compression levels see a small
      compression speed loss and about neutral ratio. I expect the lower
      compression levels to be used much more heavily than the high
      compression levels, so this should be a net win.
      
      Level	CTime	DTime	Ratio
      1	-2.95%	-1.1%	-0.7%
      3	-3.5%	-1.2%	-0.5%
      5	+3.7%	-1.0%	+0.0%
      7	+3.2%	-0.9%	+0.0%
      9	-4.3%	-0.8%	+0.1%
      
      Signed-off-by: default avatarNick Terrell <terrelln@fb.com>
      2aa14b1a
    • Nick Terrell's avatar
      zstd: Move zstd-common module exports to zstd_common_module.c · 4782c725
      Nick Terrell authored
      
      The zstd codebase is imported from the upstream zstd repo, and is over-written on
      every update. Upstream keeps the kernel specific code separate from the main
      library. So the module definition is moved into the zstd_common_module.c file.
      This matches the pattern followed by the zstd-compress and zstd-decompress files.
      
      I've done build and boot testing on x86-64, i386, and aarch64. I've
      verified that zstd built both as modules and built-in build and boot.
      
      Signed-off-by: default avatarNick Terrell <terrelln@fb.com>
      4782c725
    • Xin Gao's avatar
      lib: zstd: Fix comment typo · 19d7df98
      Xin Gao authored
      
      The double `when' is duplicated in line 999, remove one.
      
      Signed-off-by: default avatarXin Gao <gaoxin@cdjrlc.com>
      Signed-off-by: default avatarNick Terrell <terrelln@fb.com>
      19d7df98
    • Jilin Yuan's avatar
      lib: zstd: fix repeated words in comments · 7486f5c6
      Jilin Yuan authored
      
      Delete the redundant word 'the'.
      
      Signed-off-by: default avatarJilin Yuan <yuanjilin@cdjrlc.com>
      Signed-off-by: default avatarNick Terrell <terrelln@fb.com>
      7486f5c6
  2. Oct 02, 2022
  3. Nov 18, 2021
  4. Nov 09, 2021
    • Nathan Chancellor's avatar
      lib: zstd: Add cast to silence clang's -Wbitwise-instead-of-logical · 0a8ea235
      Nathan Chancellor authored
      A new warning in clang warns that there is an instance where boolean
      expressions are being used with bitwise operators instead of logical
      ones:
      
      lib/zstd/decompress/huf_decompress.c:890:25: warning: use of bitwise '&' with boolean operands [-Wbitwise-instead-of-logical]
                             (BIT_reloadDStreamFast(&bitD1) == BIT_DStream_unfinished)
                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      
      zstd does this frequently to help with performance, as logical operators
      have branches whereas bitwise ones do not.
      
      To fix this warning in other cases, the expressions were placed on
      separate lines with the '&=' operator; however, this particular instance
      was moved away from that so that it could be surrounded by LIKELY, which
      is a macro for __builtin_expect(), to help with a performance
      regression, according to upstream zstd pull #1973.
      
      Aside from switching to logical operators, which is likely undesirable
      in this instance, or disabling the warning outright, the solution is
      casting one of the expressions to an integer type to make it clear to
      clang that the author knows what they are doing. Add a cast to U32 to
      silence the warning. The first U32 cast is to silence an instance of
      -Wshorten-64-to-32 because __builtin_expect() returns long so it cannot
      be moved.
      
      Link: https://github.com/ClangBuiltLinux/linux/issues/1486
      Link: https://github.com/facebook/zstd/pull/1973
      
      
      Reported-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Signed-off-by: default avatarNathan Chancellor <nathan@kernel.org>
      Signed-off-by: default avatarNick Terrell <terrelln@fb.com>
      0a8ea235
    • Nick Terrell's avatar
      lib: zstd: Upgrade to latest upstream zstd version 1.4.10 · e0c1b49f
      Nick Terrell authored
      Upgrade to the latest upstream zstd version 1.4.10.
      
      This patch is 100% generated from upstream zstd commit 20821a46f412 [0].
      
      This patch is very large because it is transitioning from the custom
      kernel zstd to using upstream directly. The new zstd follows upstreams
      file structure which is different. Future update patches will be much
      smaller because they will only contain the changes from one upstream
      zstd release.
      
      As an aid for review I've created a commit [1] that shows the diff
      between upstream zstd as-is (which doesn't compile), and the zstd
      code imported in this patch. The verion of zstd in this patch is
      generated from upstream with changes applied by automation to replace
      upstreams libc dependencies, remove unnecessary portability macros,
      replace `/**` comments with `/*` comments, and use the kernel's xxhash
      instead of bundling it.
      
      The benefits of this patch are as follows:
      1. Using upstream directly with automated script to generate kernel
         code. This allows us to update the kernel every upstream release, so
         the kernel gets the latest bug fixes and performance improvements,
         and doesn't get 3 years out of date again. The automation and the
         translated code are tested every upstream commit to ensure it
         continues to work.
      2. Upgrades from a custom zstd based on 1.3.1 to 1.4.10, getting 3 years
         of performance improvements and bug fixes. On x86_64 I've measured
         15% faster BtrFS and SquashFS decompression+read speeds, 35% faster
         kernel decompression, and 30% faster ZRAM decompression+read speeds.
      3. Zstd-1.4.10 supports negative compression levels, which allow zstd to
         match or subsume lzo's performance.
      4. Maintains the same kernel-specific wrapper API, so no callers have to
         be modified with zstd version updates.
      
      One concern that was brought up was stack usage. Upstream zstd had
      already removed most of its heavy stack usage functions, but I just
      removed the last functions that allocate arrays on the stack. I've
      measured the high water mark for both compression and decompression
      before and after this patch. Decompression is approximately neutral,
      using about 1.2KB of stack space. Compression levels up to 3 regressed
      from 1.4KB -> 1.6KB, and higher compression levels regressed from 1.5KB
      -> 2KB. We've added unit tests upstream to prevent further regression.
      I believe that this is a reasonable increase, and if it does end up
      causing problems, this commit can be cleanly reverted, because it only
      touches zstd.
      
      I chose the bulk update instead of replaying upstream commits because
      there have been ~3500 upstream commits since the 1.3.1 release, zstd
      wasn't ready to be used in the kernel as-is before a month ago, and not
      all upstream zstd commits build. The bulk update preserves bisectablity
      because bugs can be bisected to the zstd version update. At that point
      the update can be reverted, and we can work with upstream to find and
      fix the bug.
      
      Note that upstream zstd release 1.4.10 doesn't exist yet. I have cut a
      staging branch at 20821a46f412 [0] and will apply any changes requested
      to the staging branch. Once we're ready to merge this update I will cut
      a zstd release at the commit we merge, so we have a known zstd release
      in the kernel.
      
      The implementation of the kernel API is contained in
      zstd_compress_module.c and zstd_decompress_module.c.
      
      [0] https://github.com/facebook/zstd/commit/20821a46f4122f9abd7c7b245d28162dde8129c9
      [1] https://github.com/terrelln/linux/commit/e0fa481d0e3df26918da0a13749740a1f6777574
      
      
      
      Signed-off-by: default avatarNick Terrell <terrelln@fb.com>
      Tested By: Paul Jones <paul@pauljones.id.au>
      Tested-by: default avatarOleksandr Natalenko <oleksandr@natalenko.name>
      Tested-by: Sedat Dilek <sedat.dilek@gmail.com> # LLVM/Clang v13.0.0 on x86-64
      Tested-by: default avatarJean-Denis Girard <jd.girard@sysnux.pf>
      e0c1b49f
    • Nick Terrell's avatar
      lib: zstd: Add decompress_sources.h for decompress_unzstd · 2479b523
      Nick Terrell authored
      
      Adds decompress_sources.h which includes every .c file necessary for
      zstd decompression. This is used in decompress_unzstd.c so the internal
      structure of the library isn't exposed.
      
      This allows us to upgrade the zstd library version without modifying any
      callers. Instead we just need to update decompress_sources.h.
      
      Signed-off-by: default avatarNick Terrell <terrelln@fb.com>
      Tested By: Paul Jones <paul@pauljones.id.au>
      Tested-by: default avatarOleksandr Natalenko <oleksandr@natalenko.name>
      Tested-by: Sedat Dilek <sedat.dilek@gmail.com> # LLVM/Clang v13.0.0 on x86-64
      Tested-by: default avatarJean-Denis Girard <jd.girard@sysnux.pf>
      2479b523
    • Nick Terrell's avatar
      lib: zstd: Add kernel-specific API · cf30f6a5
      Nick Terrell authored
      
      This patch:
      - Moves `include/linux/zstd.h` -> `include/linux/zstd_lib.h`
      - Updates modified zstd headers to yearless copyright
      - Adds a new API in `include/linux/zstd.h` that is functionally
        equivalent to the in-use subset of the current API. Functions are
        renamed to avoid symbol collisions with zstd, to make it clear it is
        not the upstream zstd API, and to follow the kernel style guide.
      - Updates all callers to use the new API.
      
      There are no functional changes in this patch. Since there are no
      functional change, I felt it was okay to update all the callers in a
      single patch. Once the API is approved, the callers are mechanically
      changed.
      
      This patch is preparing for the 3rd patch in this series, which updates
      zstd to version 1.4.10. Since the upstream zstd API is no longer exposed
      to callers, the update can happen transparently.
      
      Signed-off-by: default avatarNick Terrell <terrelln@fb.com>
      Tested By: Paul Jones <paul@pauljones.id.au>
      Tested-by: default avatarOleksandr Natalenko <oleksandr@natalenko.name>
      Tested-by: Sedat Dilek <sedat.dilek@gmail.com> # LLVM/Clang v13.0.0 on x86-64
      Tested-by: default avatarJean-Denis Girard <jd.girard@sysnux.pf>
      cf30f6a5
  5. Jul 01, 2021
  6. Nov 19, 2020
  7. Nov 18, 2020
  8. Aug 24, 2020
    • Gustavo A. R. Silva's avatar
      lib: Revert use of fallthrough pseudo-keyword in lib/ · 6a9dc5fd
      Gustavo A. R. Silva authored
      
      The following build error for powerpc64 was reported by Nathan Chancellor:
      
        "$ scripts/config --file arch/powerpc/configs/powernv_defconfig -e KERNEL_XZ
      
         $ make -skj"$(nproc)" ARCH=powerpc CROSS_COMPILE=powerpc64le-linux- distclean powernv_defconfig zImage
         ...
         In file included from arch/powerpc/boot/../../../lib/decompress_unxz.c:234,
                          from arch/powerpc/boot/decompress.c:38:
         arch/powerpc/boot/../../../lib/xz/xz_dec_stream.c: In function 'dec_main':
         arch/powerpc/boot/../../../lib/xz/xz_dec_stream.c:586:4: error: 'fallthrough' undeclared (first use in this function)
           586 |    fallthrough;
               |    ^~~~~~~~~~~
      
         This will end up affecting distribution configurations such as Debian
         and OpenSUSE according to my testing. I am not sure what the solution
         is, the PowerPC wrapper does not set -D__KERNEL__ so I am not sure
         that compiler_attributes.h can be safely included."
      
      In order to avoid these sort of problems, it seems that the best
      solution is to use /* fall through */ comments instead of the
      fallthrough pseudo-keyword macro in lib/, for now.
      
      Reported-by: default avatarNathan Chancellor <natechancellor@gmail.com>
      Fixes: df561f66 ("treewide: Use fallthrough pseudo-keyword")
      Signed-off-by: default avatarGustavo A. R. Silva <gustavoars@kernel.org>
      Reviewed-and-tested-by: default avatarNathan Chancellor <natechancellor@gmail.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      6a9dc5fd
  9. Aug 23, 2020
  10. Aug 09, 2020
    • Masahiro Yamada's avatar
      kbuild: trace functions in subdirectories of lib/ · b16838c6
      Masahiro Yamada authored
      
      ccflags-remove-$(CONFIG_FUNCTION_TRACER) += $(CC_FLAGS_FTRACE)
      
      exists here in sub-directories of lib/ to keep the behavior of
      commit 2464a609 ("ftrace: do not trace library functions").
      
      Since that commit, not only the objects in lib/ but also the ones in
      the sub-directories are excluded from ftrace (although the commit
      description did not explicitly mention this).
      
      However, most of library functions in sub-directories are not so hot.
      Re-add them to ftrace.
      
      Going forward, only the objects right under lib/ will be excluded.
      
      Cc: Ingo Molnar <mingo@kernel.org>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      Acked-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      b16838c6
    • Masahiro Yamada's avatar
      kbuild: introduce ccflags-remove-y and asflags-remove-y · 15d5761a
      Masahiro Yamada authored
      
      CFLAGS_REMOVE_<file>.o filters out flags when compiling a particular
      object, but there is no convenient way to do that for every object in
      a directory.
      
      Add ccflags-remove-y and asflags-remove-y to make it easily.
      
      Use ccflags-remove-y to clean up some Makefiles.
      
      The add/remove order works as follows:
      
       [1] KBUILD_CFLAGS specifies compiler flags used globally
      
       [2] ccflags-y adds compiler flags for all objects in the
           current Makefile
      
       [3] ccflags-remove-y removes compiler flags for all objects in the
           current Makefile (New feature)
      
       [4] CFLAGS_<file> adds compiler flags per file.
      
       [5] CFLAGS_REMOVE_<file> removes compiler flags per file.
      
      Having [3] before [4] allows us to remove flags from most (but not all)
      objects in the current Makefile.
      
      For example, kernel/trace/Makefile removes $(CC_FLAGS_FTRACE)
      from all objects in the directory, then adds it back to
      trace_selftest_dynamic.o and CFLAGS_trace_kprobe_selftest.o
      
      The same applies to lib/livepatch/Makefile.
      
      Please note ccflags-remove-y has no effect to the sub-directories.
      In contrast, the previous notation got rid of compiler flags also from
      all the sub-directories.
      
      The following are not affected because they have no sub-directories:
      
        arch/arm/boot/compressed/
        arch/powerpc/xmon/
        arch/sh/
        kernel/trace/
      
      However, lib/ has several sub-directories.
      
      To keep the behavior, I added ccflags-remove-y to all Makefiles
      in subdirectories of lib/, except the following:
      
        lib/vdso/Makefile        - Kbuild does not descend into this Makefile
        lib/raid/test/Makefile   - This is not used for the kernel build
      
      I think commit 2464a609 ("ftrace: do not trace library functions")
      excluded too much. In the next commit, I will remove ccflags-remove-y
      from the sub-directories of lib/.
      
      Suggested-by: default avatarSami Tolvanen <samitolvanen@google.com>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      Acked-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Acked-by: Michael Ellerman <mpe@ellerman.id.au> (powerpc)
      Acked-by: Brendan Higgins <brendanhiggins@google.com> (KUnit)
      Tested-by: default avatarAnders Roxell <anders.roxell@linaro.org>
      15d5761a
  11. Jul 31, 2020
  12. Sep 15, 2019
    • Rasmus Villemoes's avatar
      lib/zstd/mem.h: replace __inline by inline · 4bd92428
      Rasmus Villemoes authored
      
      Currently, compiler_types.h #defines __inline as inline (and further
      #defines inline to automatically attach some attributes), so this does
      not change functionality. It serves as preparation for removing the
      #define of __inline.
      
      While at it, also remove the __attribute__((unused)) - it's already
      included in the definition of the inline macro, and "open-coded"
      __attribute__(()) should be avoided.
      
      Since commit a95b37e2 (kbuild: get <linux/compiler_types.h> out of
      <linux/kconfig.h>), compiler_types.h is automatically included by all
      kernel C code - i.e., the definition of inline including the unused
      attribute is guaranteed to be in effect whenever ZSTD_STATIC is
      expanded.
      
      Signed-off-by: default avatarRasmus Villemoes <linux@rasmusvillemoes.dk>
      Signed-off-by: default avatarMiguel Ojeda <miguel.ojeda.sandonis@gmail.com>
      4bd92428
  13. May 21, 2019
  14. Apr 08, 2019
    • Gustavo A. R. Silva's avatar
      lib: zstd: Mark expected switch fall-throughs · 224b44d4
      Gustavo A. R. Silva authored
      
      In preparation to enabling -Wimplicit-fallthrough, mark switch
      cases where we are expecting to fall through.
      
      This patch fixes the following warnings:
      
      lib/zstd/bitstream.h:261:30: warning: this statement may fall through [-Wimplicit-fallthrough=]
      lib/zstd/bitstream.h:262:30: warning: this statement may fall through [-Wimplicit-fallthrough=]
      lib/zstd/bitstream.h:263:30: warning: this statement may fall through [-Wimplicit-fallthrough=]
      lib/zstd/bitstream.h:264:30: warning: this statement may fall through [-Wimplicit-fallthrough=]
      lib/zstd/bitstream.h:265:30: warning: this statement may fall through [-Wimplicit-fallthrough=]
      lib/zstd/compress.c:3183:16: warning: this statement may fall through [-Wimplicit-fallthrough=]
      lib/zstd/decompress.c:1770:18: warning: this statement may fall through [-Wimplicit-fallthrough=]
      lib/zstd/decompress.c:2376:15: warning: this statement may fall through [-Wimplicit-fallthrough=]
      lib/zstd/decompress.c:2404:15: warning: this statement may fall through [-Wimplicit-fallthrough=]
      lib/zstd/decompress.c:2435:16: warning: this statement may fall through [-Wimplicit-fallthrough=]
      lib/zstd/huf_compress.c: In function ‘HUF_compress1X_usingCTable’:
      lib/zstd/huf_compress.c:535:5: warning: this statement may fall through [-Wimplicit-fallthrough=]
        if (sizeof((stream)->bitContainer) * 8 < HUF_TABLELOG_MAX * 4 + 7) \
           ^
      lib/zstd/huf_compress.c:558:54: note: in expansion of macro ‘HUF_FLUSHBITS_2’
        case 3: HUF_encodeSymbol(&bitC, ip[n + 2], CTable); HUF_FLUSHBITS_2(&bitC);
                                                            ^~~~~~~~~~~~~~~
      lib/zstd/huf_compress.c:559:2: note: here
        case 2: HUF_encodeSymbol(&bitC, ip[n + 1], CTable); HUF_FLUSHBITS_1(&bitC);
        ^~~~
      lib/zstd/huf_compress.c:531:5: warning: this statement may fall through [-Wimplicit-fallthrough=]
        if (sizeof((stream)->bitContainer) * 8 < HUF_TABLELOG_MAX * 2 + 7) \
           ^
      lib/zstd/huf_compress.c:559:54: note: in expansion of macro ‘HUF_FLUSHBITS_1’
        case 2: HUF_encodeSymbol(&bitC, ip[n + 1], CTable); HUF_FLUSHBITS_1(&bitC);
                                                            ^~~~~~~~~~~~~~~
      lib/zstd/huf_compress.c:560:2: note: here
        case 1: HUF_encodeSymbol(&bitC, ip[n + 0], CTable); HUF_FLUSHBITS(&bitC);
        ^~~~
        AR      lib/zstd//built-in.a
      
      Warning level 3 was used: -Wimplicit-fallthrough=3
      
      This patch is part of the ongoing efforts to enabling -Wimplicit-fallthrough.
      
      Reviewed-by: default avatarKees Cook <keescook@chromium.org>
      Signed-off-by: default avatarGustavo A. R. Silva <gustavo@embeddedor.com>
      224b44d4
  15. Mar 25, 2018
  16. Aug 15, 2017
    • Nick Terrell's avatar
      lib: Add zstd modules · 73f3d1b4
      Nick Terrell authored
      Add zstd compression and decompression kernel modules.
      zstd offers a wide varity of compression speed and quality trade-offs.
      It can compress at speeds approaching lz4, and quality approaching lzma.
      zstd decompressions at speeds more than twice as fast as zlib, and
      decompression speed remains roughly the same across all compression levels.
      
      The code was ported from the upstream zstd source repository. The
      `linux/zstd.h` header was modified to match linux kernel style.
      The cross-platform and allocation code was stripped out. Instead zstd
      requires the caller to pass a preallocated workspace. The source files
      were clang-formatted [1] to match the Linux Kernel style as much as
      possible. Otherwise, the code was unmodified. We would like to avoid
      as much further manual modification to the source code as possible, so it
      will be easier to keep the kernel zstd up to date.
      
      I benchmarked zstd compression as a special character device. I ran zstd
      and zlib compression at several levels, as well as performing no
      compression, which measure the time spent copying the data to kernel space.
      Data is passed to the compresser 4096 B at a time. The benchmark file is
      located in the upstream zstd source repository under
      `contrib/linux-kernel/zstd_compress_test.c` [2].
      
      I ran the benchmarks on a Ubuntu 14.04 VM with 2 cores and 4 GiB of RAM.
      The VM is running on a MacBook Pro with a 3.1 GHz Intel Core i7 processor,
      16 GB of RAM, and a SSD. I benchmarked using `silesia.tar` [3], which is
      211,988,480 B large. Run the following commands for the benchmark:
      
          sudo modprobe zstd_compress_test
          sudo mknod zstd_compress_test c 245 0
          sudo cp silesia.tar zstd_compress_test
      
      The time is reported by the time of the userland `cp`.
      The MB/s is computed with
      
          1,536,217,008 B / time(buffer size, hash)
      
      which includes the time to copy from userland.
      The Adjusted MB/s is computed with
      
          1,536,217,088 B / (time(buffer size, hash) - time(buffer size, none)).
      
      The memory reported is the amount of memory the compressor requests.
      
      | Method   | Size (B) | Time (s) | Ratio | MB/s    | Adj MB/s | Mem (MB) |
      |----------|----------|----------|-------|---------|----------|----------|
      | none     | 11988480 |    0.100 |     1 | 2119.88 |        - |        - |
      | zstd -1  | 73645762 |    1.044 | 2.878 |  203.05 |   224.56 |     1.23 |
      | zstd -3  | 66988878 |    1.761 | 3.165 |  120.38 |   127.63 |     2.47 |
      | zstd -5  | 65001259 |    2.563 | 3.261 |   82.71 |    86.07 |     2.86 |
      | zstd -10 | 60165346 |   13.242 | 3.523 |   16.01 |    16.13 |    13.22 |
      | zstd -15 | 58009756 |   47.601 | 3.654 |    4.45 |     4.46 |    21.61 |
      | zstd -19 | 54014593 |  102.835 | 3.925 |    2.06 |     2.06 |    60.15 |
      | zlib -1  | 77260026 |    2.895 | 2.744 |   73.23 |    75.85 |     0.27 |
      | zlib -3  | 72972206 |    4.116 | 2.905 |   51.50 |    52.79 |     0.27 |
      | zlib -6  | 68190360 |    9.633 | 3.109 |   22.01 |    22.24 |     0.27 |
      | zlib -9  | 67613382 |   22.554 | 3.135 |    9.40 |     9.44 |     0.27 |
      
      I benchmarked zstd decompression using the same method on the same machine.
      The benchmark file is located in the upstream zstd repo under
      `contrib/linux-kernel/zstd_decompress_test.c` [4]. The memory reported is
      the amount of memory required to decompress data compressed with the given
      compression level. If you know the maximum size of your input, you can
      reduce the memory usage of decompression irrespective of the compression
      level.
      
      | Method   | Time (s) | MB/s    | Adjusted MB/s | Memory (MB) |
      |----------|----------|---------|---------------|-------------|
      | none     |    0.025 | 8479.54 |             - |           - |
      | zstd -1  |    0.358 |  592.15 |        636.60 |        0.84 |
      | zstd -3  |    0.396 |  535.32 |        571.40 |        1.46 |
      | zstd -5  |    0.396 |  535.32 |        571.40 |        1.46 |
      | zstd -10 |    0.374 |  566.81 |        607.42 |        2.51 |
      | zstd -15 |    0.379 |  559.34 |        598.84 |        4.61 |
      | zstd -19 |    0.412 |  514.54 |        547.77 |        8.80 |
      | zlib -1  |    0.940 |  225.52 |        231.68 |        0.04 |
      | zlib -3  |    0.883 |  240.08 |        247.07 |        0.04 |
      | zlib -6  |    0.844 |  251.17 |        258.84 |        0.04 |
      | zlib -9  |    0.837 |  253.27 |        287.64 |        0.04 |
      
      Tested in userland using the test-suite in the zstd repo under
      `contrib/linux-kernel/test/UserlandTest.cpp` [5] by mocking the kernel
      functions. Fuzz tested using libfuzzer [6] with the fuzz harnesses under
      `contrib/linux-kernel/test/{RoundTripCrash.c,DecompressCrash.c}` [7] [8]
      with ASAN, UBSAN, and MSAN. Additionaly, it was tested while testing the
      BtrFS and SquashFS patches coming next.
      
      [1] https://clang.llvm.org/docs/ClangFormat.html
      [2] https://github.com/facebook/zstd/blob/dev/contrib/linux-kernel/zstd_compress_test.c
      [3] http://sun.aei.polsl.pl/~sdeor/index.php?page=silesia
      [4] https://github.com/facebook/zstd/blob/dev/contrib/linux-kernel/zstd_decompress_test.c
      [5] https://github.com/facebook/zstd/blob/dev/contrib/linux-kernel/test/UserlandTest.cpp
      [6] http://llvm.org/docs/LibFuzzer.html
      [7] https://github.com/facebook/zstd/blob/dev/contrib/linux-kernel/test/RoundTripCrash.c
      [8] https://github.com/facebook/zstd/blob/dev/contrib/linux-kernel/test/DecompressCrash.c
      
      zstd source repository: https://github.com/facebook/zstd
      
      
      
      Signed-off-by: default avatarNick Terrell <terrelln@fb.com>
      Signed-off-by: default avatarChris Mason <clm@fb.com>
      73f3d1b4
Loading