Skip to content

Commit

Permalink
Merge tag 'zstd-for-linus-5.16-rc1' of git://github.com/terrelln/linux
Browse files Browse the repository at this point in the history
Pull zstd fixes from Nick Terrell:
 "Fix stack usage on parisc & improve code size bloat

  This contains three commits:

   1. Fixes a minor unused variable warning reported by Kernel test
      robot [0].

   2. Improves the reported code bloat (-88KB / 374KB) [1] by outlining
      some functions that are unlikely to be used in performance
      sensitive workloads.

   3. Fixes the reported excess stack usage on parisc [2] by removing
      -O3 from zstd's compilation flags. -O3 triggered bugs in the
      hppa-linux-gnu gcc-8 compiler. -O2 performance is acceptable:
      neutral compression, about -1% decompression speed. We also reduce
      code bloat (-105KB / 374KB).

  After this our code bloat is cut from 374KB to 105KB with gcc-11. If
  we wanted to cut the remaining 105KB we'd likely have to trade
  signicant performance, so I want to say that this is enough for now.

  We should be able to get further gains without sacrificing speed, but
  that will take some significant optimization effort, and isn't
  suitable for a quick fix. I've opened an upstream issue [3] to track
  the code size, and try to avoid future regressions, and improve it in
  the long term"

Link: https://lore.kernel.org/linux-mm/[email protected]/T/ [0]
Link: https://lkml.org/lkml/2021/11/15/710 [1]
Link: https://lkml.org/lkml/2021/11/14/189 [2]
Link: facebook/zstd#2867 [3]
Link: https://lore.kernel.org/r/[email protected]/
Link: https://lore.kernel.org/r/[email protected]/

* tag 'zstd-for-linus-5.16-rc1' of git://github.com/terrelln/linux:
  lib: zstd: Don't add -O3 to cflags
  lib: zstd: Don't inline functions in zstd_opt.c
  lib: zstd: Fix unused variable warning
  • Loading branch information
torvalds committed Nov 19, 2021
2 parents e26dd97 + 7416cdc commit 4c388a8
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 2 deletions.
2 changes: 0 additions & 2 deletions lib/zstd/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@
obj-$(CONFIG_ZSTD_COMPRESS) += zstd_compress.o
obj-$(CONFIG_ZSTD_DECOMPRESS) += zstd_decompress.o

ccflags-y += -O3

zstd_compress-y := \
zstd_compress_module.o \
common/debug.o \
Expand Down
7 changes: 7 additions & 0 deletions lib/zstd/common/compiler.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*********************************************************/
/* force inlining */

#if !defined(ZSTD_NO_INLINE)
#if (defined(__GNUC__) && !defined(__STRICT_ANSI__)) || defined(__cplusplus) || defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
# define INLINE_KEYWORD inline
#else
Expand All @@ -24,6 +25,12 @@

#define FORCE_INLINE_ATTR __attribute__((always_inline))

#else

#define INLINE_KEYWORD
#define FORCE_INLINE_ATTR

#endif

/*
On MSVC qsort requires that functions passed into it use the __cdecl calling conversion(CC).
Expand Down
2 changes: 2 additions & 0 deletions lib/zstd/compress/zstd_compress_superblock.c
Original file line number Diff line number Diff line change
Expand Up @@ -411,6 +411,8 @@ static size_t ZSTD_seqDecompressedSize(seqStore_t const* seqStore, const seqDef*
const seqDef* sp = sstart;
size_t matchLengthSum = 0;
size_t litLengthSum = 0;
/* Only used by assert(), suppress unused variable warnings in production. */
(void)litLengthSum;
while (send-sp > 0) {
ZSTD_sequenceLength const seqLen = ZSTD_getSequenceLength(seqStore, sp);
litLengthSum += seqLen.litLength;
Expand Down
12 changes: 12 additions & 0 deletions lib/zstd/compress/zstd_opt.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,18 @@
* You may select, at your option, one of the above-listed licenses.
*/

/*
* Disable inlining for the optimal parser for the kernel build.
* It is unlikely to be used in the kernel, and where it is used
* latency shouldn't matter because it is very slow to begin with.
* We prefer a ~180KB binary size win over faster optimal parsing.
*
* TODO(https://github.com/facebook/zstd/issues/2862):
* Improve the code size of the optimal parser in general, so we
* don't need this hack for the kernel build.
*/
#define ZSTD_NO_INLINE 1

#include "zstd_compress_internal.h"
#include "hist.h"
#include "zstd_opt.h"
Expand Down

0 comments on commit 4c388a8

Please sign in to comment.