9746 Commits

Author SHA1 Message Date
Nick Terrell
dcc7228de9
[lazy] Use switch instead of indirect function calls. (#3295)
Use a switch statement to select the search function instead of an
indirect function call. This results in a sizable performance win.

This PR is a modification of the approach taken in PR #2828.
When I measured performance for that commit, it was neutral.
However, I now see a performance regression on gcc, but still
neutral on clang. I'm measuring on the same platform, but with
newer compilers. The new approach beats both the current dev
branch and the baseline before PR #2828 was merged.

This PR is necessary for Issue #3275, to update zstd in the kernel.
Without this PR there is a large regression in greedy - btlazy2
compression speed. With this PR it is about neutral.

gcc version: 12.2.0
clang version: 14.0.6
dataset: silesia.tar

| Compiler | Level | Dev Speed (MB/s) | PR Speed (MB/s) | Delta  |
|----------|-------|------------------|-----------------|--------|
| gcc      |     5 |            102.6 |           113.7 | +10.8% |
| gcc      |     7 |             66.6 |            74.8 | +12.3% |
| gcc      |     9 |             51.5 |            58.9 | +14.3% |
| gcc      |    13 |             14.3 |            14.3 |  +0.0% |
| clang    |     5 |            108.1 |           114.8 |  +6.2% |
| clang    |     7 |             68.5 |            72.3 |  +5.5% |
| clang    |     9 |             53.2 |            56.2 |  +5.6% |
| clang    |    13 |             14.3 |            14.7 |  +2.8% |

The binary size stays just about the same for clang and gcc, measured
using the `size` command:

| Compiler | Branch | Text    | Data | BSS | Total   |
|----------|--------|---------|------|-----|---------|
| gcc      | dev    | 1127950 | 3312 | 280 | 1131542 |
| gcc      | PR     | 1123422 | 2512 | 280 | 1126214 |
| clang    | dev    | 1046254 | 3256 | 216 | 1049726 |
| clang    | PR     | 1048198 | 2296 | 216 | 1050710 |
2022-10-21 17:14:02 -07:00
Miguel Ojeda
5c1cdba7dd
[contrib][linux-kernel] Generate SPDX license identifiers (#3294)
Add a `--spdx` option to the freestanding script to prefix
files with a line like (for `.c` files):

    // SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause

or (for `.h` and `.S` files):

    /* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */

Given the style of the line to be used depends on the extension,
a simple `sed` insert command would not work.

It also skips the file if an existing SPDX line is there,
as well as raising an error if an unexpected SPDX line appears
anywhere else in the file, as well as for unexpected
file extensions.

I double-checked that all currently generated files appear
to be license as expected with:

    grep -LRF 'This source code is licensed under both the BSD-style license (found in the'  linux/lib/zstd
    grep -LRF 'LICENSE file in the root directory of this source tree) and the GPLv2 (found' linux/lib/zstd

but somebody knowledgable on the licensing of the project should
double-check this is the intended case.

Fixes: https://github.com/facebook/zstd/issues/3293
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>

Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
2022-10-18 16:35:44 -07:00
Felix Handte
99d239de32
Merge pull request #3290 from felixhandte/ddict-dict-id-from-ddict
Make ZSTD_getDictID_fromDDict() Read DictID from DDict
2022-10-18 13:33:32 -04:00
daniellerozenblit
0d5d571080
Merge pull request #3285 from daniellerozenblit/optimal-huff-depth
Optimal huf depth
2022-10-18 10:31:44 -04:00
Daniel Kutenin
1d153c923c
Make fuzzing work without ZSTD_MULTITHREAD (#3291) 2022-10-17 14:31:47 -07:00
Danielle Rozenblit
a910489ff5 No longer pass srcSize to minTableLog 2022-10-17 08:03:44 -07:00
Danielle Rozenblit
b34729018c Minor simplication: no longer need to check src size if using cardinality for minTableLog 2022-10-17 07:55:07 -07:00
Yann Collet
e0df910d58
Merge pull request #3288 from facebook/cleanThreadPool
Cleaner threadPool initialization
2022-10-14 23:59:03 -07:00
W. Felix Handte
d7841d150b Make ZSTD_getDictID_fromDDict() Read DictID from DDict
Currently this function actually reads the dict ID from the dictionary's
header, via `ZSTD_getDictID_fromDict()`. But during decompression the decomp-
ressor actually compares the dict ID in the frame header with the dict ID in
the DDict. Now of course the dict ID in the dictionary contents and the dict
ID in the DDict struct *should* be the same. But in cases of memory corrupt-
ion, where they can drift out of sync, it's misleading for this function to
read it again from the dict buffer rather then return the dict ID that will
actually be used.

Also doing it this way avoids rechecking the magic and so on and so it is a
tiny bit more efficient.
2022-10-14 22:53:03 -04:00
Danielle Rozenblit
75cd42afd7 Update regression results and better variable naming for HUF_cardinality 2022-10-14 13:37:19 -07:00
Danielle Rozenblit
c4853e1553 Update threshold to use optimal depth 2022-10-14 11:29:32 -07:00
Danielle Rozenblit
e60cae33cf Additional ratio optimizations 2022-10-14 10:37:35 -07:00
Yann Collet
b7d55cfa0d fix issue #3119
fix segfault error when running zstreamtest with MALLOC_PERTURB_
2022-10-12 23:04:23 -07:00
Danielle Rozenblit
117fddcd81 Update regression results 2022-10-12 13:49:44 -07:00
Yann Collet
9abecfbb7e replaced Zstandard by zstd in man page
identified by @paulmenzel in #3286
2022-10-11 23:32:18 -07:00
Danielle Rozenblit
5978627ac1 Merge branch 'optimal-huff-depth' of github.com:daniellerozenblit/zstd into optimal-huff-depth 2022-10-11 14:45:50 -07:00
Danielle Rozenblit
fa7d9c1139 Set threshold to use optimal table log 2022-10-11 14:33:25 -07:00
daniellerozenblit
d880960335
Merge branch 'facebook:dev' into optimal-huff-depth 2022-10-11 16:15:23 -04:00
Danielle Rozenblit
8888a2ddcc CI failure fixes 2022-10-11 13:12:19 -07:00
Yann Collet
b63854b237
Merge pull request #3281 from ilyakurdyukov/patch-1
fixed zstd-pgo target for GCC
2022-10-07 22:56:45 -07:00
Ilya Kurdyukov
2bd70eff06
zstd-pgo: also clean zstd binary from objects
Just a precaution, because it works anyway.
2022-10-06 00:38:23 +07:00
Ilya Kurdyukov
2ffcb2d6a8
fixed zstd-pgo target for GCC
Since your Makefile uses obj/$(HASH_DIR) for object files, this code does not work correctly for GCC. Because profiles are saved in one directory, and are expected in another when reading.

`$(RM) zstd *.o` - this line doesn't delete object files.

Clang stores profiles in the current directory, so the problem doesn't appear when compiling with Clang.

Also this code will work if BUILD_DIR is set.
2022-10-05 17:32:16 +07:00
Felix Handte
33273e1b9c
Merge pull request #3277 from felixhandte/ossf-scorecard
Enable OpenSSF Scorecard Action
2022-10-03 14:33:21 -04:00
W. Felix Handte
de9a450c00 Restrict from Running on Forks 2022-10-03 11:23:29 -04:00
Felix Handte
79729f8a2d Create scorecards.yml
Addresses #3269.
2022-09-30 14:30:22 -04:00
Yann Collet
096dccbc2d
Merge pull request #3273 from MaskRay/deprecated
Move ZSTD_DEPRECATED before ZSTDLIB_API/ZSTDLIB_STATIC_API
2022-09-28 10:30:22 -07:00
Fangrui Song
5635827ede Move ZSTD_DEPRECATED before ZSTDLIB_API/ZSTDLIB_STATIC_API
Clang doesn't allow [[deprecated(...)]] attribute after __attribute__.
Move [[deprecated(...)]] before __attribute__ to fix C++14/C++17 uses
with Clang.

Fix #3250
2022-09-22 12:30:44 -07:00
Yann Collet
43962d72e6
Merge pull request #3267 from Tachi107/pkg-config-ci
ci: test pkg-config file
2022-09-22 12:00:06 -07:00
Yann Collet
e007d65ea4
Merge pull request #3274 from facebook/copycctx
[minor] refactor publication of ZSTD_copyCCtx()
2022-09-22 11:50:53 -07:00
Yann Collet
434ffe979c minor: refactor publication of ZSTD_copyCCtx()
for improved clarity
2022-09-22 11:14:21 -07:00
Yonatan Komornik
21bd8c3b3c
Removed unused variable (#3272) 2022-09-22 08:20:46 -07:00
ctkhanhly
358787764f
Fix for zstd CLI accepts bogus values for numeric parameters (#3268)
* add checks to mal-formed numeric values for memory and memlimit parameters

Signed-off-by: Ly Cao <lycao@fb.com>

* changed errorMsg to a literal string instead of static string in main

* moved bogus numeric error to NEXT_UINT32 + add macro NEXT_TSIZE

Signed-off-by: Ly Cao <lycao@fb.com>

Signed-off-by: Ly Cao <lycao@fb.com>
Co-authored-by: Ly Cao <lycao@fb.com>
2022-09-21 13:20:01 -07:00
Andrea Pappacoda
966ac9d200
ci: test pkg-config file
As mentioned in
https://github.com/facebook/zstd/pull/3252#issuecomment-1251733791 ,
this patch adds a CI job that builds and installs libzstd on the job
runner, and then compiles a sample binary linking against the installed
library; the needed build flags are passed by invoking pkg-config.
2022-09-20 22:23:03 +02:00
Yann Collet
1c04514b31
Merge pull request #3252 from Tachi107/build-cmake-pkg-config-always
build(cmake): improve pkg-config generation
2022-09-20 11:31:15 -07:00
Yann Collet
369d63b7cb
Merge pull request #3265 from DimitriPapadopoulos/actions
Update GitHub Actions
2022-09-20 11:30:26 -07:00
Dimitri Papadopoulos
b1b1e3aa53
Update GitHub Actions 2022-09-20 09:17:29 +02:00
Yann Collet
97c23cf615
Merge pull request #3199 from JunHe77/comp
compress:check more bytes to reduce ZSTD_count call
2022-09-19 10:49:10 -07:00
Yann Collet
e9e88753d5
Merge pull request #3245 from haampie/fix/SED_ERE_OPT
drop -E flag in sed
2022-09-19 10:48:11 -07:00
Yann Collet
f7251f88b9
Merge pull request #3247 from haampie/fix/grep
Fix make variable
2022-09-19 10:47:38 -07:00
Yann Collet
ad13c4aec9
Merge pull request #3264 from sashashura/patch-1
GitHub Workflows security hardening
2022-09-19 10:47:00 -07:00
Alex
091917a4a1 build: harden GitHub Workflow permissions
Signed-off-by: Alex Low <aleksandrosansan@gmail.com>
2022-09-19 17:51:59 +02:00
Jun He
ce52acd7dc compress:check more bytes to reduce ZSTD_count call
Comparing 4B instead of comparing 1B in ZSTD_noDict
mode, thus it can avoid cases like match in match[ml]
but mismatch in match[ml-3]..match[ml-1]. So the call
count of ZSTD_count can be reduced.

Signed-off-by: Jun He <jun.he@arm.com>
Change-Id: I3449ea423d5c8e8344f75341f19a2d1643c703f6
2022-09-18 14:45:41 +08:00
daniellerozenblit
cb6dc32635
Merge pull request #3263 from daniellerozenblit/null-buffer-decompress
ZSTD_decompressStream() fuzz fix
2022-09-13 10:07:35 -04:00
Danielle Rozenblit
8bb833bb5a Merge branch 'null-buffer-decompress' of github.com:daniellerozenblit/zstd into null-buffer-decompress 2022-09-12 18:57:53 -07:00
Danielle Rozenblit
e46b12e1b4 fix indentation 2022-09-12 18:56:59 -07:00
Yann Collet
484b9d67c6
Merge pull request #3256 from facebook/clean
streamline `make clean` list maintenance
2022-09-12 13:23:34 -07:00
Yann Collet
5129b4ab10 simplify clean target maintenance within programs/ 2022-09-12 12:19:35 -07:00
daniellerozenblit
f59f797aa8
Merge branch 'facebook:dev' into null-buffer-decompress 2022-09-12 14:54:36 -04:00
Danielle Rozenblit
a1d89424c2 fuzzer error fix 2022-09-12 11:53:37 -07:00
Yann Collet
361b7bd1d0 Merge branch 'dev' into clean 2022-09-12 10:56:00 -07:00