]>
git.ipfire.org Git - thirdparty/zstd.git/log
Yann Collet [Wed, 21 Feb 2024 07:36:04 +0000 (23:36 -0800)]
fix include order
Yann Collet [Wed, 21 Feb 2024 06:59:58 +0000 (22:59 -0800)]
fix Visual Studio datagen recipe
Yann Collet [Wed, 21 Feb 2024 06:43:22 +0000 (22:43 -0800)]
fix clangbuild
notably -Wconversion and -Wdocumentation
Yann Collet [Wed, 21 Feb 2024 04:20:40 +0000 (20:20 -0800)]
fix cmake build
Yann Collet [Wed, 21 Feb 2024 03:21:01 +0000 (19:21 -0800)]
fix c89 compatibility by removing snprintf()
note that this function has been in the code for a long while,
so why does it only start failing CI tests now ?
Yann Collet [Wed, 21 Feb 2024 02:17:28 +0000 (18:17 -0800)]
fix meson datagen build
Yann Collet [Wed, 21 Feb 2024 02:06:56 +0000 (18:06 -0800)]
fix datagen size control
Yann Collet [Tue, 20 Feb 2024 23:47:09 +0000 (15:47 -0800)]
internal benchmark: can select size of generated synthetic sample
Yann Collet [Tue, 20 Feb 2024 23:24:25 +0000 (15:24 -0800)]
datagen generates lorem ipsum by default
Yann Collet [Tue, 20 Feb 2024 21:27:36 +0000 (13:27 -0800)]
increase word dictionary
for higher variety of messages.
Now, level 5 compresses better than level 4 (by a hair).
Yann Collet [Tue, 20 Feb 2024 20:26:37 +0000 (12:26 -0800)]
runtime weight distribution table
and made small words a bit more common.
Yann Collet [Tue, 20 Feb 2024 08:37:21 +0000 (00:37 -0800)]
add question marks
and (slightly) longer sentences.
Yann Collet [Tue, 20 Feb 2024 08:30:29 +0000 (00:30 -0800)]
enriched vocabulary again
using real latin sentences from Cicero.
Compression ratio lower again, closer to "real" text,
now level 6 is way better than level 4.
level 5 is still lower than level 4,
but at least it's now higher than level 3.
Yann Collet [Tue, 20 Feb 2024 08:12:32 +0000 (00:12 -0800)]
increase vocabulary size
makes compression a bit less good,
hence a bit more comparable with real text (though still too easy to compress).
level 6 is now stronger than level 4, by a hair.
However, there is still a ratio dip at level 5.
Felix Handte [Tue, 13 Feb 2024 17:38:18 +0000 (12:38 -0500)]
Merge pull request #3909 from felixhandte/security-md-notif-list-ad
Advertise Availability of Security Vulnerability Notifications
W. Felix Handte [Tue, 13 Feb 2024 16:51:37 +0000 (11:51 -0500)]
Advertise Availability of Security Vulnerability Notifications
W. Felix Handte [Tue, 13 Feb 2024 16:50:55 +0000 (11:50 -0500)]
Add SECURITY.md File
This just adds a copy of the Meta default SECURITY.md that we can then modify.
Yann Collet [Fri, 9 Feb 2024 21:07:46 +0000 (13:07 -0800)]
Merge pull request #3902 from facebook/fuzz_debuglevel
Fix fuzz issue
5131069967892480
Yann Collet [Fri, 9 Feb 2024 00:38:20 +0000 (16:38 -0800)]
Yann Collet [Fri, 9 Feb 2024 00:14:14 +0000 (16:14 -0800)]
fuzz: control debuglevel from Makefile
and make the compilation faster
Yann Collet [Wed, 7 Feb 2024 20:27:03 +0000 (12:27 -0800)]
Merge pull request #3900 from facebook/fix5921623844651008
fix
5921623844651008
Sergey Andreenko [Tue, 6 Feb 2024 23:01:15 +0000 (18:01 -0500)]
Merge pull request #3899 from sandreenko/dev
[Zstd] Less verbose log for patch mode.
Yann Collet [Tue, 6 Feb 2024 20:15:54 +0000 (12:15 -0800)]
fix issue
5921623844651008
ossfuzz managed to create a scenario which triggers an `assert`.
This fixes it, by giving +1 more space for the backward search pass.
sergeyandreenko [Tue, 6 Feb 2024 20:07:11 +0000 (12:07 -0800)]
[Zstd] Less verbose log for patch mode.
Yann Collet [Tue, 6 Feb 2024 04:12:24 +0000 (20:12 -0800)]
Merge pull request #3895 from facebook/fix_3793
Improve compression of Arrays of Integers (High compression mode)
Yann Collet [Tue, 6 Feb 2024 02:32:25 +0000 (18:32 -0800)]
added or updated code comments
as suggested by @terrelln,
to make the code of the optimal parser a bit more understandable.
Yann Collet [Mon, 5 Feb 2024 09:27:22 +0000 (01:27 -0800)]
update compression results for regression tests
Yann Collet [Mon, 5 Feb 2024 09:21:06 +0000 (01:21 -0800)]
fix msan warnings
Yann Collet [Mon, 5 Feb 2024 08:36:10 +0000 (00:36 -0800)]
fix uasan dictionary_stream_round_trip fuzz test
Yann Collet [Mon, 5 Feb 2024 07:49:56 +0000 (23:49 -0800)]
Merge pull request #3897 from facebook/dependabot/github_actions/microsoft/setup-msbuild-2.0.0
Bump microsoft/setup-msbuild from 1.3.2 to 2.0.0
Yann Collet [Mon, 5 Feb 2024 06:45:18 +0000 (22:45 -0800)]
fix msbuild action version number
dependabot[bot] [Mon, 5 Feb 2024 05:43:28 +0000 (05:43 +0000)]
Bump microsoft/setup-msbuild from 1.3.2 to 2.0.0
Bumps [microsoft/setup-msbuild](https://github.com/microsoft/setup-msbuild) from 1.3.2 to 2.0.0.
- [Release notes](https://github.com/microsoft/setup-msbuild/releases)
- [Changelog](https://github.com/microsoft/setup-msbuild/blob/main/building-release.md)
- [Commits](https://github.com/microsoft/setup-msbuild/compare/
031090342aeefe171e49f3820f3b52110c66e402 ...
6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce )
---
updated-dependencies:
- dependency-name: microsoft/setup-msbuild
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com>
Yann Collet [Sun, 4 Feb 2024 03:57:38 +0000 (19:57 -0800)]
use ZSTD_memcpy()
which can be redirected in Linux kernel mode
Yann Collet [Sun, 4 Feb 2024 03:32:59 +0000 (19:32 -0800)]
removed trace control
Yann Collet [Sun, 4 Feb 2024 03:31:53 +0000 (19:31 -0800)]
fixed wrong assert
by introducing ZSTD_OPT_SIZE
Yann Collet [Sun, 4 Feb 2024 01:52:50 +0000 (17:52 -0800)]
update compression results
good news: there are only improvements
Yann Collet [Sun, 4 Feb 2024 01:48:29 +0000 (17:48 -0800)]
fixed wrong assert
Yann Collet [Sun, 4 Feb 2024 01:26:47 +0000 (17:26 -0800)]
minor optimization, mostly for clarity
Yann Collet [Sat, 3 Feb 2024 22:26:18 +0000 (14:26 -0800)]
finally, a version that generalizes well
While it's not always strictly a win,
it's a win for files that see a noticeably compression ratio increase,
while it's a very small noise for other files.
Downside is, this patch is less efficient for 32-bit arrays of integer
than the previous patch which was introducing losses for other files,
but it's still a net improvement on this scenario.
Felix Handte [Thu, 1 Feb 2024 19:49:37 +0000 (14:49 -0500)]
Merge pull request #3893 from felixhandte/gh-actions-cet-test-update-dep
Update Dependency in Intel CET Test; Re-Enable Test
W. Felix Handte [Wed, 31 Jan 2024 16:07:15 +0000 (11:07 -0500)]
Update Dependency in Intel CET Test; Re-Enable Test
Motivated by #3884.
Yann Collet [Thu, 1 Feb 2024 18:15:57 +0000 (10:15 -0800)]
Merge pull request #3890 from facebook/lorem
add a lorem ipsum generator
Yann Collet [Wed, 31 Jan 2024 19:12:57 +0000 (11:12 -0800)]
modification: differentiate literal update at pos+1
helps when litlen==1 is cheaper than litlen==0
works great on pathological arr[u32] examples
but doesn't generalize well on other files.
silesia/x-ray is amoung the most negatively affected ones.
Yann Collet [Wed, 31 Jan 2024 18:55:11 +0000 (10:55 -0800)]
Merge pull request #3886 from facebook/sparc64
add sparc64 compilation test
Yann Collet [Wed, 31 Jan 2024 10:51:46 +0000 (02:51 -0800)]
refactor optimal parser
store stretches as intermediate solution instead of sequences.
makes it possible to link a solution to a predecessor.
Yann Collet [Tue, 30 Jan 2024 07:25:24 +0000 (23:25 -0800)]
improve high compression ratio for file like #3793
this works great for 32-bit arrays,
notably the synthetic ones, with extreme regularity,
unfortunately, it's not universal,
and in some cases, it's a loss.
Crucially, on average, it's a loss on silesia.
The most negatively impacted file is x-ray.
It deserves an investigation before suggesting it as an evolution.
Yann Collet [Mon, 29 Jan 2024 23:50:21 +0000 (15:50 -0800)]
blindfix meson recipe
note: absence of GLOB capability within meson makes its maintenance more painful.
Yann Collet [Mon, 29 Jan 2024 23:45:16 +0000 (15:45 -0800)]
fix cmake recipe
Yann Collet [Mon, 29 Jan 2024 23:24:42 +0000 (15:24 -0800)]
fix Visual Studio solutions
note: we probably don't want to maintain VS2008 solution anymore.
Its successor VS2010 is > 10 years old,
which is more or less the limit after which we can stop supporting old compilers.
Yann Collet [Mon, 29 Jan 2024 23:18:27 +0000 (15:18 -0800)]
fix paramgrill Makefile recipe
Yann Collet [Mon, 29 Jan 2024 23:00:32 +0000 (15:00 -0800)]
add a lorem ipsum generator
this generator replaces the statistical generator
for the general case when no statistic is requested.
Generated data features a compression level speed / ratio curve
which is more in line with expectation.
Yann Collet [Mon, 29 Jan 2024 22:34:53 +0000 (14:34 -0800)]
Merge pull request #3888 from facebook/dependabot/github_actions/microsoft/setup-msbuild-1.3.2
Bump microsoft/setup-msbuild from 1.3.1 to 1.3.2
Yann Collet [Mon, 29 Jan 2024 17:49:36 +0000 (09:49 -0800)]
Merge pull request #3887 from facebook/dependabot/github_actions/actions/upload-artifact-4.3.0
Bump actions/upload-artifact from 4.2.0 to 4.3.0
dependabot[bot] [Mon, 29 Jan 2024 05:53:45 +0000 (05:53 +0000)]
Bump microsoft/setup-msbuild from 1.3.1 to 1.3.2
Bumps [microsoft/setup-msbuild](https://github.com/microsoft/setup-msbuild) from 1.3.1 to 1.3.2.
- [Release notes](https://github.com/microsoft/setup-msbuild/releases)
- [Changelog](https://github.com/microsoft/setup-msbuild/blob/main/building-release.md)
- [Commits](https://github.com/microsoft/setup-msbuild/compare/
1ff57057b5cfdc39105cd07a01d78e9b0ea0c14c ...
031090342aeefe171e49f3820f3b52110c66e402 )
---
updated-dependencies:
- dependency-name: microsoft/setup-msbuild
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com>
dependabot[bot] [Mon, 29 Jan 2024 05:53:39 +0000 (05:53 +0000)]
Bump actions/upload-artifact from 4.2.0 to 4.3.0
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.2.0 to 4.3.0.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/
694cdabd8bdb0f10b2cea11669e1bf5453eed0a6 ...
26f96dfa697d77e81fd5907df203aa23a56210a8 )
---
updated-dependencies:
- dependency-name: actions/upload-artifact
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
Yann Collet [Mon, 29 Jan 2024 04:25:04 +0000 (20:25 -0800)]
add sparc64 compilation test
Yann Collet [Sun, 28 Jan 2024 05:49:29 +0000 (21:49 -0800)]
Merge pull request #3880 from facebook/dependabot/github_actions/actions/upload-artifact-4.2.0
Bump actions/upload-artifact from 4.1.0 to 4.2.0
Yann Collet [Sun, 28 Jan 2024 02:18:15 +0000 (18:18 -0800)]
Merge pull request #3883 from facebook/cmake_test
improve cmake test
Yann Collet [Sat, 27 Jan 2024 23:09:21 +0000 (15:09 -0800)]
fix cmakebuild test
write it in a way which is more compatible with older versions of cmake (<3.13)
Also:
fix pzstd compilation (notably on macos)
Yann Collet [Sun, 28 Jan 2024 01:29:17 +0000 (17:29 -0800)]
Merge pull request #3884 from facebook/disable_intelcet
disable Intel CET Compatibility tests
Yann Collet [Sat, 27 Jan 2024 23:37:29 +0000 (15:37 -0800)]
disable Intel CET Compatibility tests
The binary blob that must be downloaded from intel.com is no longer available
dependabot[bot] [Mon, 22 Jan 2024 05:21:32 +0000 (05:21 +0000)]
Bump actions/upload-artifact from 4.1.0 to 4.2.0
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.1.0 to 4.2.0.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/
1eb3cb2b3e0f29609092a73eb033bb759a334595 ...
694cdabd8bdb0f10b2cea11669e1bf5453eed0a6 )
---
updated-dependencies:
- dependency-name: actions/upload-artifact
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
Yann Collet [Sun, 21 Jan 2024 19:31:58 +0000 (11:31 -0800)]
Merge pull request #3877 from facebook/oldgrep
minor: playTests.sh more compatible with older versions of grep
Yann Collet [Tue, 16 Jan 2024 20:14:35 +0000 (12:14 -0800)]
made playTests.sh more compatible with older versions of grep
replaced `\+` by `*`.
`\+` means `[1-N]`,
while `*` means `[0-N]`,
so it's not strictly equivalent
but `\+` happens to be badly supported on some flavors of grep,
and for the purpose of these tests, `*` is good enough.
Yann Collet [Mon, 15 Jan 2024 20:44:46 +0000 (12:44 -0800)]
Merge pull request #3865 from facebook/grep_e
playTests.sh does no longer needs grep -E
Yann Collet [Mon, 15 Jan 2024 19:16:46 +0000 (11:16 -0800)]
playTests.sh does no longer needs grep -E
it makes the test script more portable across posix systems
because `grep -E` is not guaranteed
while `grep` is fairly common.
Yann Collet [Mon, 15 Jan 2024 17:44:19 +0000 (09:44 -0800)]
Merge pull request #3863 from facebook/dependabot/github_actions/github/codeql-action-3.23.0
Bump github/codeql-action from 2.21.4 to 3.23.0
Yann Collet [Mon, 15 Jan 2024 07:44:56 +0000 (23:44 -0800)]
Merge pull request #3864 from facebook/dependabot/github_actions/actions/upload-artifact-4.1.0
Bump actions/upload-artifact from 4.0.0 to 4.1.0
dependabot[bot] [Mon, 15 Jan 2024 05:24:46 +0000 (05:24 +0000)]
Bump actions/upload-artifact from 4.0.0 to 4.1.0
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.0.0 to 4.1.0.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/
c7d193f32edcb7bfad88892161225aeda64e9392 ...
1eb3cb2b3e0f29609092a73eb033bb759a334595 )
---
updated-dependencies:
- dependency-name: actions/upload-artifact
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
dependabot[bot] [Mon, 15 Jan 2024 05:24:41 +0000 (05:24 +0000)]
Bump github/codeql-action from 2.21.4 to 3.23.0
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.21.4 to 3.23.0.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/
a09933a12a80f87b87005513f0abb1494c27a716 ...
e5f05b81d5b6ff8cfa111c80c22c5fd02a384118 )
---
updated-dependencies:
- dependency-name: github/codeql-action
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com>
Yann Collet [Sat, 13 Jan 2024 19:41:30 +0000 (11:41 -0800)]
Merge pull request #3760 from jcelerier/patch-1
[x-compile] Fix cross-compiling for AArch64 with lld
Yann Collet [Sat, 13 Jan 2024 19:37:54 +0000 (11:37 -0800)]
Merge pull request #3817 from elasota/oversized-probs-clarification
Clarify that probability tables must not contain non-zero probabilities for invalid values
Yann Collet [Sat, 13 Jan 2024 19:37:25 +0000 (11:37 -0800)]
Merge pull request #3850 from KapJI/better-errors
cli: better errors on argument parsing
Yann Collet [Sat, 13 Jan 2024 19:36:20 +0000 (11:36 -0800)]
Merge pull request #3858 from eli-schwartz/msvc-dev-cmd
CI: meson: use builtin handling for MSVC
Eli Schwartz [Tue, 2 Jan 2024 06:36:45 +0000 (01:36 -0500)]
CI: meson: use builtin handling for MSVC
This avoids downloading -- and periodically bumping the checksum for --
a third-party action that isn't strictly required, and thus helps keep
down dependencies and reduce update churn.
Yann Collet [Sun, 31 Dec 2023 06:16:42 +0000 (22:16 -0800)]
Merge pull request #3855 from emaste/freebsd-14-ci
Cirrus-CI: Add FreeBSD 14
Yann Collet [Sat, 30 Dec 2023 21:23:39 +0000 (13:23 -0800)]
Merge pull request #3847 from michoecho/fix_nullptr_deref_in_createCDict
Fix a nullptr dereference in ZSTD_createCDict_advanced2()
Ed Maste [Thu, 14 Dec 2023 00:56:14 +0000 (19:56 -0500)]
Cirrus-CI: Add FreeBSD 14
Yann Collet [Fri, 29 Dec 2023 20:34:47 +0000 (12:34 -0800)]
Merge pull request #3846 from emaste/c89
zlibWrapper: convert to C89 / ANSI C
Elliot Gorokhovsky [Thu, 28 Dec 2023 19:48:46 +0000 (14:48 -0500)]
Make offload API compatible with static CCtx (#3854)
* Add ZSTD_CCtxParams_registerSequenceProducer() to public API
* add unit test
* add docs to zstd.h
* nits
* Add ZSTDLIB_STATIC_API prefix
* Add asserts
Yann Collet [Mon, 18 Dec 2023 17:49:57 +0000 (09:49 -0800)]
Merge pull request #3849 from facebook/dependabot/github_actions/actions/upload-artifact-4.0.0
Bump actions/upload-artifact from 3.1.3 to 4.0.0
Yann Collet [Mon, 18 Dec 2023 17:39:42 +0000 (09:39 -0800)]
Update windows-artifacts.yml
and fixed version number in comment
Ruslan Sayfutdinov [Sat, 16 Dec 2023 15:28:19 +0000 (15:28 +0000)]
cli: better errors on arguent parsing
dependabot[bot] [Mon, 18 Dec 2023 05:26:39 +0000 (05:26 +0000)]
Bump actions/upload-artifact from 3.1.3 to 4.0.0
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3.1.3 to 4.0.0.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/
a8a3f3ad30e3422c9c7b888a15615d19a852ae32 ...
c7d193f32edcb7bfad88892161225aeda64e9392 )
---
updated-dependencies:
- dependency-name: actions/upload-artifact
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com>
Michał Chojnowski [Sat, 16 Dec 2023 11:32:52 +0000 (12:32 +0100)]
Fix a nullptr dereference in ZSTD_createCDict_advanced2()
If the relevant allocation returns NULL, ZSTD_createCDict_advanced_internal()
will return NULL. But ZSTD_createCDict_advanced2() doesn't check for
this and attempts to use the returned pointer anyway, which leads to
a segfault.
Ed Maste [Thu, 14 Dec 2023 00:54:29 +0000 (19:54 -0500)]
zlibWrapper: convert to C89 / ANSI C
Clang 16 (which is the system compiler in FreeBSD 14.0) no longer allows
K&R function definitions. Formatting of the changes matches current
zlib.
Yann Collet [Thu, 14 Dec 2023 07:54:41 +0000 (23:54 -0800)]
Merge pull request #3845 from emaste/dev
Update FreeBSD CI: drop 12.4 (nearly EOL)
Ed Maste [Wed, 13 Dec 2023 15:53:13 +0000 (10:53 -0500)]
Update FreeBSD CI: drop 12.4 as it is nearly EOL
12.4 is EOL as of the end of December 2023, and pkg installation will
start failing some time after that so remove those jobs now.
Elliot Gorokhovsky [Wed, 29 Nov 2023 01:04:08 +0000 (20:04 -0500)]
Merge pull request #3839 from embg/offload_refactor
Move offload API params into ZSTD_CCtx_params
Elliot Gorokhovsky [Mon, 27 Nov 2023 14:52:52 +0000 (06:52 -0800)]
Move offload API params into ZSTD_CCtx_params
Elliot Gorokhovsky [Mon, 27 Nov 2023 14:52:36 +0000 (06:52 -0800)]
Refactor ZSTD_sequenceProducer_F typedef to ZSTD_sequenceProducer_F*
elasota [Thu, 9 Nov 2023 04:46:37 +0000 (23:46 -0500)]
Clarify that there must be at least 2 weights, i.e. encoding all weights as 0 is invalid
elasota [Thu, 9 Nov 2023 04:25:00 +0000 (23:25 -0500)]
Clarify that the presence of a value with weight 1 is required
Nick Terrell [Tue, 21 Nov 2023 21:26:25 +0000 (13:26 -0800)]
Modernize macros to use `do { } while (0)`
This PR introduces no functional changes. It attempts to change all
macros currently using `{ }` or some variant of that to to
`do { } while (0)`, and introduces trailing `;` where necessary.
There were no bugs found during this migration.
The bug in Visual Studios warning on this has been fixed since VS2015.
Additionally, we have several instances of `do { } while (0)` which have
been present for several releases, so we don't have to worry about
breaking peoples builds.
Fixes Issue #3830.
Yann Collet [Tue, 21 Nov 2023 17:11:40 +0000 (09:11 -0800)]
Merge pull request #3820 from facebook/xxh082
update xxhash library to v0.8.2
Nick Terrell [Mon, 20 Nov 2023 20:04:30 +0000 (12:04 -0800)]
[huf] Fix null pointer addition
`HUF_DecompressFastArgs_init()` was adding 0 to NULL. Fix it by exiting
early for empty outputs. This is no change in behavior, because the
function was already exiting 0 in this case, just slightly later.
Nick Terrell [Mon, 20 Nov 2023 19:33:57 +0000 (11:33 -0800)]
[huf] Improve fast C & ASM performance on small data
* Rename `ilimit` to `ilowest` and set it equal to `src` instead of
`src + 6 + 8`. This is safe because the fast decoding loops guarantee
to never read below `ilowest` already. This allows the fast decoder to
run for at least two more iterations, because it consumes at most 7
bytes per iteration.
* Continue the fast loop all the way until the number of safe iterations
is 0. Initially, I thought that when it got towards the end, the
computation of how many iterations of safe might become expensive. But
it ends up being slower to have to decode each of the 4 streams
individually, which makes sense.
This drastically speeds up the Huffman decoder on the `github` dataset
for the issue raised in #3762, measured with `zstd -b1e1r github/`.
| Decoder | Speed before | Speed after |
|----------|--------------|-------------|
| Fallback | 477 MB/s | 477 MB/s |
| Fast C | 384 MB/s | 492 MB/s |
| Assembly | 385 MB/s | 501 MB/s |
We can also look at the speed delta for different block sizes of silesia
using `zstd -b1e1r silesia.tar -B#`.
| Decoder | -B1K ∆ | -B2K ∆ | -B4K ∆ | -B8K ∆ | -B16K ∆ | -B32K ∆ | -B64K ∆ | -B128K ∆ |
|----------|--------|--------|--------|--------|---------|---------|---------|----------|
| Fast C | +11.2% | +8.2% | +6.1% | +4.4% | +2.7% | +1.5% | +0.6% | +0.2% |
| Assembly | +12.5% | +9.0% | +6.2% | +3.6% | +1.5% | +0.7% | +0.2% | +0.03% |
Nick Terrell [Sat, 18 Nov 2023 02:20:19 +0000 (18:20 -0800)]
[huf] Improve fast huffman decoding speed in linux kernel
gcc in the linux kernel was not unrolling the inner loops of the Huffman
decoder, which was destroying decoding performance. The compiler was
generating crazy code with all sorts of branches. I suspect because of
Spectre mitigations, but I'm not certain. Once the loops were manually
unrolled, performance was restored.
Additionally, when gcc couldn't prove that the variable left shift in
the 4X2 decode loop wasn't greater than 63, it inserted checks to verify
it. To fix this, mask `entry.nbBits & 0x3F`, which allows gcc to eliete
this check. This is a no op, because `entry.nbBits` is guaranteed to be
less than 64.
Lastly, introduce the `HUF_DISABLE_FAST_DECODE` macro to disable the
fast C loops for Issue #3762. So if even after this change, there is a
performance regression, users can opt-out at compile time.
Nick Terrell [Fri, 17 Nov 2023 01:15:25 +0000 (17:15 -0800)]
[debug] Don't define g_debuglevel in the kernel
We only use this constant when `DEBUGLEVEL>=2`, but we get
-Werror=pedantic errors for empty translation units, so still define it
except in kernel environments.
Backport from the kernel:
https://lore.kernel.org/lkml/
20230616144400 .172683-1-ben.dooks@codethink.co.uk/
Nick Terrell [Fri, 17 Nov 2023 00:53:44 +0000 (16:53 -0800)]
[linux] Remove usage of deprecated function
ZSTD_resetDStream() is deprecated and replaced by ZSTD_DCtx_reset().
This removes deprecation warnings from the kernel build.
This change is a no-op, see the docs suggesting this replacement.
https://github.com/facebook/zstd/blob/
fcbf2fde9ac7ce1562c7b3a394350e764bcb580f /lib/zstd.h#L2655-L2663