Skip to content

Benchmarks

YadeWira edited this page Oct 23, 2026 · 15 revisions

Benchmarks

Method

  • silesia.tar (211,957,760 bytes), in memory, the whole file as one block.
  • One thread, pinned with taskset -c 9, Xeon E5-2697A v4 (Broadwell, 2.6 GHz).
  • Speeds are the best of repeated runs over at least 2–3 s, MB = 10^6 bytes, on the input size (as lzbench).
  • Competitors: lzbench 2.4.1 built with GCC 14.2, on the same core in the same session.
  • The machine is shared: runs vary by up to ~10%.
taskset -c 9 out/sylzbench -l 1,9 -t 3 silesia.tar
SYLZ_NOASM=1 taskset -c 9 out/sylzbench -l 1,9 -t 3 silesia.tar   # Pascal paths only

Format v3 (-ec), every level, v0.2.13 (2026-10-23, CPU 20, one session, load ~4)

v0.2.13 renumbers -ec: -ec 0 .. 8 parse as v2's 2 .. 10, and -ec 9 / 10 are new, the optimal parser with each literal priced by its Huffman code (a first parse counts the literals per 256 KiB region; their code lengths plus 1 bit price the parse that is emitted). v2 levels unchanged.

-ec level silesia.tar compress decompress mixed corpus compress decompress
0 38.80% 179 MB/s 2121 MB/s 59.78% 135 MB/s 1429 MB/s
1 37.99% 150 MB/s 2064 MB/s 59.46% 118 MB/s 1434 MB/s
2 36.72% 75.5 MB/s 1979 MB/s 58.30% 55.2 MB/s 1474 MB/s
3 35.79% 56.2 MB/s 2120 MB/s 57.86% 39.5 MB/s 1468 MB/s
4 35.18% 44.0 MB/s 2140 MB/s 57.62% 32.9 MB/s 1436 MB/s
5 34.80% 34.2 MB/s 2137 MB/s 57.48% 29.5 MB/s 1542 MB/s
6 34.47% 20.8 MB/s 2164 MB/s 57.35% 22.0 MB/s 1550 MB/s
7 33.99% 7.47 MB/s 2241 MB/s 57.19% 11.1 MB/s 1574 MB/s
8 33.98% 6.35 MB/s 2282 MB/s 57.15% 8.28 MB/s 1585 MB/s
9 33.61% 3.75 MB/s 2126 MB/s 56.94% 5.78 MB/s 1541 MB/s
10 33.60% 3.13 MB/s 2107 MB/s 56.91% 4.25 MB/s 1596 MB/s

Same session: v2 -10 36.03% at 3498 MB/s decode (mixed 60.39%, 3635 MB/s); zstd 1.5.7 -1 34.53% at 329 / 1061 MB/s (mixed 56.14%, 396 / 1129), -2 32.70% at 230 / 793, -3 31.20% at 157 / 693; zxc 0.15.0 -7 33.09% at 6.04 / 1905 MB/s (mixed 57.34%, 10.0 / 1786). One thread: decoding is Huffman then LZ, one after the other; a second thread for Huffman is next.

Every level, v0.2.11 (2026-10-23, CPU 20, one session, load ~4: speeds vary by ~10%)

level silesia.tar compress decompress mixed corpus compress decompress
-0 46.51% 480 MB/s 3070 MB/s 66.31% 678 MB/s 3491 MB/s
-1 44.55% 442 MB/s 3136 MB/s 65.59% 633 MB/s 3407 MB/s
-2 40.89% 235 MB/s 2978 MB/s 63.29% 277 MB/s 3163 MB/s
-3 39.99% 187 MB/s 2958 MB/s 62.89% 204 MB/s 3194 MB/s
-4 38.80% 85.9 MB/s 2976 MB/s 61.55% 69.8 MB/s 3239 MB/s
-5 37.78% 61.9 MB/s 3029 MB/s 61.10% 47.9 MB/s 3304 MB/s
-6 37.13% 46.2 MB/s 3061 MB/s 60.83% 39.4 MB/s 3227 MB/s
-7 36.73% 35.7 MB/s 3113 MB/s 60.68% 33.6 MB/s 3287 MB/s
-8 36.38% 22.0 MB/s 3135 MB/s 60.55% 23.9 MB/s 3295 MB/s
-9 36.04% 7.65 MB/s 3449 MB/s 60.42% 11.4 MB/s 3300 MB/s
-10 36.03% 6.45 MB/s 3393 MB/s 60.39% 8.37 MB/s 3481 MB/s
-ec -8 34.47% 21.6 MB/s 2181 MB/s 57.35% 24.0 MB/s 1597 MB/s
-ec -9 33.99% 7.44 MB/s 2219 MB/s 57.19% 11.3 MB/s 1552 MB/s
-ec -10 33.98% 6.37 MB/s 2254 MB/s 57.15% 8.56 MB/s 1662 MB/s

v0.2.11 writes the same bytes as v0.2.10 at every level. New: C (src/sylzc.c) for the fast paths of 32-bit Windows and arm64 (see below), and on x86_64 the parse of -4 .. -8 and the candidate pass of -9 / -10 in C over the assembler searches (cycles: -4 1.15x faster, -6 1.07x, -8 1.05x, -9 1.02x).

Competitors in the same session (lzbench 2.4.1, GCC 14.2):

codec silesia.tar compress decompress mixed corpus compress decompress
lz4 1.10.0 47.59% 507 MB/s 3132 MB/s 66.17% 734 MB/s 3508 MB/s
lz4hc 1.10.0 -2 42.05% 224 MB/s 2805 MB/s 63.84% 245 MB/s 3367 MB/s
lz4hc 1.10.0 -3 38.38% 67.9 MB/s 2823 MB/s 61.30% 52.6 MB/s 3340 MB/s
lz4hc 1.10.0 -4 37.65% 57.6 MB/s 2878 MB/s 61.00% 48.3 MB/s 3517 MB/s
lz4hc 1.10.0 -6 36.98% 42.4 MB/s 3064 MB/s 60.76% 42.6 MB/s 3476 MB/s
lz4hc 1.10.0 -9 36.75% 27.0 MB/s 3050 MB/s 60.65% 29.6 MB/s 3377 MB/s
lz4hc 1.10.0 -12 36.45% 9.39 MB/s 3200 MB/s 60.52% 9.73 MB/s 3385 MB/s
lizard 2.1 -12 40.68% 115 MB/s 2791 MB/s 63.38% 97.0 MB/s 3325 MB/s
lizard 2.1 -19 36.52% 3.78 MB/s 2879 MB/s 60.76% 4.85 MB/s 3079 MB/s
misa77 0.6.0 --1 46.74% 265 MB/s 4069 MB/s 68.12% 298 MB/s 3746 MB/s
misa77 0.6.0 -0 44.60% 166 MB/s 3961 MB/s 66.80% 166 MB/s 3855 MB/s
misa77 0.6.0 -3 37.76% 10.3 MB/s 3874 MB/s 62.46% 10.3 MB/s 3783 MB/s
zxc 0.15.0 -3 46.65% 155 MB/s 3457 MB/s 71.89% 267 MB/s 3291 MB/s
zxc 0.15.0 -4 43.43% 114 MB/s 3442 MB/s 67.54% 190 MB/s 3698 MB/s
zxc 0.15.0 -5 40.83% 68.8 MB/s 3431 MB/s 63.75% 104 MB/s 3722 MB/s
zxc 0.15.0 -6 36.28% 9.31 MB/s 2891 MB/s 61.45% 15.3 MB/s 3400 MB/s
zxc 0.15.0 -7 33.09% 6.41 MB/s 1978 MB/s 57.34% 10.7 MB/s 1823 MB/s
zstd 1.5.7 -1 34.53% 350 MB/s 1135 MB/s 56.14% 409 MB/s 1250 MB/s
zstd 1.5.7 -2 32.70% 238 MB/s 814 MB/s 54.88% 325 MB/s 1152 MB/s
zstd 1.5.7 -3 31.20% 153 MB/s 678 MB/s 52.80% 177 MB/s 1054 MB/s

32-bit Windows, v0.2.11

Windows 7 32-bit (a VM under KVM on the same Xeon; absolute speeds approximate, the C/Pascal ratio is what counts), mozilla (51 MB), the release's sylzbench: the C paths (default) against the Pascal ones (SYLZ_NOASM=1). Same output both ways.

level ratio compress, C compress, Pascal decode, C decode, Pascal
-0 50.22% 318 MB/s 149 MB/s 1724 MB/s 894 MB/s
-1 49.45% 282 MB/s 177 MB/s 1638 MB/s 851 MB/s
-2 46.67% 176 MB/s 139 MB/s 1942 MB/s 986 MB/s
-3 45.83% 137 MB/s 101 MB/s 1965 MB/s 955 MB/s
-4 44.34% 66.6 MB/s 39.8 MB/s 2074 MB/s 1023 MB/s
-6 43.35% 40.7 MB/s 23.0 MB/s 2151 MB/s 1048 MB/s
-8 42.84% 18.6 MB/s 11.1 MB/s 2101 MB/s 1075 MB/s
-9 42.66% 6.73 MB/s 5.90 MB/s 2272 MB/s 1146 MB/s
-10 42.64% 5.74 MB/s 4.78 MB/s 2370 MB/s 1121 MB/s

The decoder's C uses SSE2 on 32-bit x86 where the CPU has it (picked at run time from v0.2.12; v0.2.11 required it); the compressors stay plain i686. On 32-bit the fast levels hash 4 bytes, so -0/-1 ratios differ from 64-bit builds. arm64 runs the same C paths (tested under qemu-user, which is too slow to time).

Levels 9-10, v0.2.10 (2026-10-23, CPU 20, one session, machine busy: ~10% under idle speeds)

Levels 0-8 are unchanged from v0.2.9 (same output; their speeds this session ran ~10% under the v0.2.9 table below).

level silesia.tar compress decompress mixed corpus compress decompress
-8 36.38% 21.0 MB/s 2954 MB/s 60.55% 23.3 MB/s 3045 MB/s
-9 36.04% 6.98 MB/s 3182 MB/s 60.42% 9.98 MB/s 3142 MB/s
-10 36.03% 5.95 MB/s 3043 MB/s 60.39% 7.63 MB/s 3197 MB/s
-ec -9 33.99% 6.59 MB/s 2016 MB/s 57.19% 10.1 MB/s 1444 MB/s
-ec -10 33.98% 5.80 MB/s 2110 MB/s 57.15% 7.59 MB/s 1440 MB/s

v0.2.9's -9 capped matches at the tree's compare length (256 bytes), so long runs came out as 256-byte pieces, and its depth 16 was too shallow on very redundant data. Found on zpaq-std's mixed sample (16 MB: binaries, a 2 MB run, random data, small files): -9 18.56% in v0.2.9, 18.12% in v0.2.8, 17.73% now (-8: 17.71%); -10 17.59%. A match reaching the compare length is now extended as far as the bytes go, and the depths are 32 (-9) and 256 (-10).

Competitors in the same session:

codec silesia.tar compress decompress mixed corpus compress decompress
lz4hc 1.10.0 -9 36.75% 26.3 MB/s 2787 MB/s 60.65% 27.0 MB/s 3024 MB/s
lz4hc 1.10.0 -12 36.45% 8.88 MB/s 2918 MB/s 60.52% 9.15 MB/s 2779 MB/s
lizard 2.1 -19 36.52% 3.38 MB/s 2358 MB/s 60.76% 4.06 MB/s 2914 MB/s
zxc 0.15.0 -6 36.28% 7.83 MB/s 2480 MB/s 61.45% 13.3 MB/s 2905 MB/s
misa77 0.6.0 -3 37.76% 9.08 MB/s 3294 MB/s 62.46% 9.61 MB/s 3388 MB/s
zstd 1.5.7 -1 34.53% 298 MB/s 962 MB/s 56.14% 370 MB/s 1065 MB/s

Every level, v0.2.9 (2026-10-23, CPU 20, one session)

level silesia.tar compress decompress mixed corpus compress decompress
-0 46.51% 492 MB/s 3200 MB/s 66.31% 741 MB/s 3579 MB/s
-1 44.55% 473 MB/s 3286 MB/s 65.59% 687 MB/s 3679 MB/s
-2 40.89% 272 MB/s 2953 MB/s 63.29% 308 MB/s 3452 MB/s
-3 39.99% 189 MB/s 3108 MB/s 62.89% 222 MB/s 3361 MB/s
-4 38.80% 79.9 MB/s 3120 MB/s 61.55% 68.2 MB/s 3361 MB/s
-5 37.78% 58.5 MB/s 3204 MB/s 61.10% 47.9 MB/s 3399 MB/s
-6 37.13% 44.0 MB/s 3207 MB/s 60.83% 40.6 MB/s 3443 MB/s
-7 36.73% 33.8 MB/s 3236 MB/s 60.68% 35.4 MB/s 3445 MB/s
-8 36.38% 20.7 MB/s 3263 MB/s 60.55% 25.2 MB/s 3360 MB/s
-9 36.17% 7.91 MB/s 3506 MB/s 60.61% 11.2 MB/s 3445 MB/s
-10 36.04% 6.78 MB/s 3650 MB/s 60.41% 9.05 MB/s 3636 MB/s
-ec -8 34.47% 23.5 MB/s 2349 MB/s 57.35% 23.2 MB/s 1619 MB/s
-ec -9 34.11% 7.67 MB/s 2310 MB/s 57.38% 11.5 MB/s 1699 MB/s
-ec -10 33.99% 6.42 MB/s 2417 MB/s 57.18% 8.87 MB/s 1700 MB/s

New in v0.2.9: -9 and -10's optimal parser takes its candidates from a binary tree (LZMA's bt4 without its 2- and 3-byte hashes; depth 16 and 128), in x86-64 assembler, and prices them with integers from a table. v0.2.8: -9 36.37% at 4.2 MB/s, -10 36.12% at 2.0 MB/s.

Competitors in the same session (lzbench 2.4.1, GCC 14.2):

codec silesia.tar compress decompress mixed corpus compress decompress
lz4 1.10.0 47.59% 516 MB/s 3225 MB/s 66.17% 677 MB/s 3137 MB/s
lz4hc 1.10.0 -2 42.05% 223 MB/s 2887 MB/s 63.84% 203 MB/s 2834 MB/s
lz4hc 1.10.0 -3 38.38% 72.9 MB/s 2993 MB/s 61.30% 46.3 MB/s 2894 MB/s
lz4hc 1.10.0 -4 37.65% 60.5 MB/s 2995 MB/s 61.00% 42.3 MB/s 3100 MB/s
lz4hc 1.10.0 -6 36.98% 41.7 MB/s 3063 MB/s 60.76% 38.7 MB/s 3110 MB/s
lz4hc 1.10.0 -9 36.75% 27.0 MB/s 3010 MB/s 60.65% 28.6 MB/s 3154 MB/s
lz4hc 1.10.0 -12 36.45% 9.03 MB/s 3023 MB/s 60.52% 9.04 MB/s 3022 MB/s
lizard 2.1 -12 40.68% 111 MB/s 2583 MB/s 63.38% 89.6 MB/s 2972 MB/s
lizard 2.1 -19 36.52% 3.42 MB/s 2455 MB/s 60.76% 4.23 MB/s 2792 MB/s
misa77 0.6.0 --1 46.74% 229 MB/s 3436 MB/s 68.12% 263 MB/s 3576 MB/s
misa77 0.6.0 -0 44.60% 143 MB/s 3402 MB/s 66.80% 152 MB/s 3504 MB/s
misa77 0.6.0 -3 37.76% 9.44 MB/s 3325 MB/s 62.46% 9.46 MB/s 3382 MB/s
zxc 0.15.0 -3 46.65% 135 MB/s 3069 MB/s 71.89% 243 MB/s 3215 MB/s
zxc 0.15.0 -4 43.43% 99.7 MB/s 3022 MB/s 67.54% 167 MB/s 3287 MB/s
zxc 0.15.0 -5 40.83% 61.2 MB/s 3079 MB/s 63.75% 88.8 MB/s 3218 MB/s
zxc 0.15.0 -6 36.28% 8.36 MB/s 2705 MB/s 61.45% 12.9 MB/s 2990 MB/s
zxc 0.15.0 -7 33.09% 5.70 MB/s 1807 MB/s 57.34% 9.15 MB/s 1728 MB/s
zstd 1.5.7 -1 34.53% 301 MB/s 1033 MB/s 56.14% 377 MB/s 1081 MB/s
zstd 1.5.7 -2 32.70% 222 MB/s 745 MB/s 54.88% 283 MB/s 997 MB/s
zstd 1.5.7 -3 31.20% 150 MB/s 623 MB/s 52.80% 156 MB/s 902 MB/s

At the top, -10 is 0.41 points under lz4hc -12 and 0.48 under lizard -19 on silesia.tar (0.11 and 0.35 on the mixed corpus), decoding 20% and 49% faster.

Every level, v0.2.8 (2026-10-23, CPU 20, one session, machine busy: ~10% under idle speeds)

level silesia.tar compress decompress mixed corpus compress decompress
-0 46.51% 482 MB/s 3083 MB/s 66.31% 636 MB/s 3131 MB/s
-1 44.55% 453 MB/s 3088 MB/s 65.59% 602 MB/s 3186 MB/s
-2 40.89% 251 MB/s 2874 MB/s 63.29% 267 MB/s 2753 MB/s
-3 39.99% 190 MB/s 2900 MB/s 62.89% 193 MB/s 2953 MB/s
-4 38.80% 77.2 MB/s 2919 MB/s 61.55% 62.1 MB/s 2927 MB/s
-5 37.78% 55.3 MB/s 3004 MB/s 61.10% 43.2 MB/s 2941 MB/s
-6 37.13% 42.0 MB/s 3041 MB/s 60.83% 36.8 MB/s 3017 MB/s
-7 36.73% 31.9 MB/s 3045 MB/s 60.68% 32.0 MB/s 3029 MB/s
-8 36.38% 19.6 MB/s 3063 MB/s 60.55% 23.2 MB/s 2905 MB/s
-9 36.37% 4.24 MB/s 3164 MB/s 60.63% 7.49 MB/s 3277 MB/s
-10 36.12% 2.04 MB/s 3100 MB/s 60.49% 3.68 MB/s 3166 MB/s
-ec -8 34.47% 20.0 MB/s 1942 MB/s 57.35% 21.6 MB/s 1449 MB/s
-ec -9 34.29% 4.42 MB/s 2092 MB/s 57.37% 7.09 MB/s 1548 MB/s
-ec -10 34.06% 2.09 MB/s 2128 MB/s 57.26% 3.66 MB/s 1440 MB/s

New in v0.2.8: -4 .. -8 use lz4hc's parse (a match may start inside the previous one and extend backwards) with 2, 4, 8, 16, 64 attempts, and their chain search is in x86-64 assembler. -8 now matches -9's ratio (on the mixed corpus it beats it) at ~4.6x its speed; -9 keeps the fastest decode of the high levels.

Competitors in the same session (lzbench 2.4.1, GCC 14.2):

codec silesia.tar compress decompress mixed corpus compress decompress
lz4 1.10.0 47.59% 445 MB/s 2769 MB/s 66.17% 666 MB/s 3138 MB/s
lz4hc 1.10.0 -2 42.05% 190 MB/s 2484 MB/s 63.84% 210 MB/s 2836 MB/s
lz4hc 1.10.0 -3 38.38% 63.6 MB/s 2588 MB/s 61.30% 46.7 MB/s 3045 MB/s
lz4hc 1.10.0 -4 37.65% 52.2 MB/s 2602 MB/s 61.00% 43.3 MB/s 2989 MB/s
lz4hc 1.10.0 -6 36.98% 37.9 MB/s 2647 MB/s 60.76% 37.5 MB/s 3092 MB/s
lz4hc 1.10.0 -9 36.75% 23.9 MB/s 2742 MB/s 60.65% 27.9 MB/s 3084 MB/s
lizard 2.1 -12 40.68% 99.0 MB/s 2390 MB/s 63.38% 88.8 MB/s 2979 MB/s
misa77 0.6.0 --1 46.74% 219 MB/s 3489 MB/s 68.12% 289 MB/s 3627 MB/s
misa77 0.6.0 -0 44.60% 139 MB/s 3493 MB/s 66.80% 164 MB/s 3749 MB/s
zxc 0.15.0 -3 46.65% 139 MB/s 3307 MB/s 71.89% 250 MB/s 3236 MB/s
zxc 0.15.0 -4 43.43% 97.3 MB/s 3182 MB/s 67.54% 174 MB/s 3302 MB/s
zxc 0.15.0 -5 40.83% 62.2 MB/s 3119 MB/s 63.75% 93.5 MB/s 3395 MB/s
zxc 0.15.0 -6 36.28% 7.56 MB/s 2608 MB/s 61.45% 13.7 MB/s 3181 MB/s
zxc 0.15.0 -7 33.09% 5.44 MB/s 1817 MB/s 57.34% 9.85 MB/s 1705 MB/s
zstd 1.5.7 -1 34.53% 303 MB/s 962 MB/s 56.14% 397 MB/s 1134 MB/s
zstd 1.5.7 -2 32.70% 214 MB/s 721 MB/s 54.88% 296 MB/s 1074 MB/s
zstd 1.5.7 -3 31.20% 143 MB/s 616 MB/s 52.80% 157 MB/s 916 MB/s

Against lz4hc level for level (-4/-3, -5/-4, -6/-6): sylz within 0.1-0.4 points of its ratio, compressing 6-21% faster and decoding 13-16% faster on silesia.tar; -7 matches lz4hc -9's ratio at 1.3x its speed, -8 beats it by 0.4 points.

Every level, v0.2.6 (2026-10-19, CPU 20, one session)

level silesia.tar compress decompress mixed corpus compress decompress
-0 46.51% 507 MB/s 3150 MB/s 66.31% 636 MB/s 3083 MB/s
-1 44.55% 455 MB/s 3143 MB/s 65.59% 575 MB/s 3129 MB/s
-2 40.89% 255 MB/s 2955 MB/s 63.29% 249 MB/s 3065 MB/s
-3 39.99% 189 MB/s 2990 MB/s 62.89% 190 MB/s 3011 MB/s
-4 39.35% 60.9 MB/s 2975 MB/s 61.94% 46.8 MB/s 2931 MB/s
-5 38.35% 52.7 MB/s 3031 MB/s 61.50% 43.8 MB/s 2958 MB/s
-6 37.65% 44.4 MB/s 3060 MB/s 61.20% 41.4 MB/s 3168 MB/s
-7 36.89% 30.2 MB/s 3100 MB/s 60.89% 33.6 MB/s 2939 MB/s
-8 36.60% 19.3 MB/s 3087 MB/s 60.73% 25.3 MB/s 3120 MB/s
-9 36.37% 5.29 MB/s 3397 MB/s 60.63% 9.91 MB/s 3513 MB/s
-10 36.12% 2.50 MB/s 3171 MB/s 60.49% 5.27 MB/s 3488 MB/s
-ec -8 34.82% 20.2 MB/s 2190 MB/s 57.60% 25.6 MB/s 1630 MB/s
-ec -9 34.29% 5.47 MB/s 2273 MB/s 57.37% 10.3 MB/s 1630 MB/s
-ec -10 34.06% 2.75 MB/s 2411 MB/s 57.26% 5.42 MB/s 1651 MB/s

Single hash (-0, -1), two hash tables keyed on 6 and 4 bytes (-2 greedy, -3 lazy; new in v0.2.6), lazy hash chains with 4 to 256 attempts (-4 .. -8), decode-aware optimal parser (-9, -10). -ec is format v3 (experimental).

Competitors in the same session (lzbench 2.4.1, GCC 14.2):

codec silesia.tar compress decompress mixed corpus compress decompress
lz4 1.10.0 47.59% 518 MB/s 3199 MB/s 66.17% 789 MB/s 3527 MB/s
lz4hc 1.10.0 -2 42.05% 229 MB/s 2861 MB/s 63.84% 246 MB/s 3304 MB/s
lz4hc 1.10.0 -9 36.75% 26.5 MB/s 3103 MB/s 60.65% 31.4 MB/s 3528 MB/s
lizard 2.1 -12 40.68% 115 MB/s 2785 MB/s 63.38% 100 MB/s 3328 MB/s
misa77 0.6.0 --1 46.74% 265 MB/s 3914 MB/s 68.12% 313 MB/s 3850 MB/s
misa77 0.6.0 -0 44.60% 160 MB/s 3853 MB/s 66.80% 175 MB/s 4038 MB/s
zxc 0.15.0 -3 46.65% 151 MB/s 3413 MB/s 71.89% 284 MB/s 3523 MB/s
zxc 0.15.0 -4 43.43% 110 MB/s 3355 MB/s 67.54% 192 MB/s 3646 MB/s
zxc 0.15.0 -5 40.83% 67.0 MB/s 3344 MB/s 63.75% 103 MB/s 3496 MB/s
zxc 0.15.0 -6 36.28% 9.10 MB/s 2888 MB/s 61.45% 15.0 MB/s 3206 MB/s
zxc 0.15.0 -7 33.09% 6.38 MB/s 1956 MB/s 57.34% 10.5 MB/s 1748 MB/s
zstd 1.5.7 -1 34.53% 344 MB/s 1115 MB/s 56.14% 430 MB/s 1215 MB/s
zstd 1.5.7 -2 32.70% 240 MB/s 811 MB/s 54.88% 320 MB/s 1114 MB/s
zstd 1.5.7 -3 31.20% 161 MB/s 700 MB/s 52.80% 174 MB/s 1007 MB/s

On both corpora -2 is smaller and faster than lz4hc -2 (LZ4MID), and -3 smaller than lizard -12 at 1.6-1.9x its speed.

Every level, v0.2.5 (2026-10-18 13:40, CPU 20, one session)

level silesia.tar compress decompress mixed corpus compress decompress
-0 46.51% 518 MB/s 3314 MB/s 66.31% 715 MB/s 3528 MB/s
-1 44.55% 482 MB/s 3298 MB/s 65.59% 652 MB/s 3523 MB/s
-2 44.19% 457 MB/s 3287 MB/s 65.45% 578 MB/s 3300 MB/s
-3 40.75% 71.6 MB/s 3037 MB/s 62.60% 53.7 MB/s 3184 MB/s
-4 39.35% 61.8 MB/s 2997 MB/s 61.94% 51.5 MB/s 3250 MB/s
-5 38.35% 53.3 MB/s 3042 MB/s 61.50% 48.4 MB/s 3325 MB/s
-6 37.65% 45.4 MB/s 3064 MB/s 61.20% 45.0 MB/s 3341 MB/s
-7 36.89% 31.8 MB/s 3223 MB/s 60.89% 37.5 MB/s 3370 MB/s
-8 36.60% 20.9 MB/s 3131 MB/s 60.73% 28.2 MB/s 3416 MB/s
-9 36.37% 5.59 MB/s 3592 MB/s 60.63% 10.1 MB/s 3552 MB/s
-10 36.12% 2.72 MB/s 3536 MB/s 60.49% 5.21 MB/s 3422 MB/s

Single hash with 16-bit position tables of 2^13, 2^15 and 2^16 entries (-0 .. -2), lazy hash chains with 2, 4, 8, 16, 64 and 256 attempts (-3 .. -8), decode-aware optimal parser (-9, -10). In the same session lz4 1.10.0 made 501 MB/s, 3073 MB/s, 47.59% and zstd 1.5.7 -1 315 MB/s, 1054 MB/s, 34.53%; this session ran about 5% slower than the one in the README.

The sections below use the level numbers of v0.2.4 and earlier: --fast=2, --fast=1, -1 .. -12. They also write format v3 as -e, which is -ec (extra compression) from the CLI after v0.2.5. From v0.2.5, old -3 .. -6 are the same as new -3 .. -6, old -8 is new -7, old -10 is new -8, and old -11, -12 are new -9, -10. The old fast levels were replaced by -0 .. -2.

Format v3 and zstd (2026-10-18 12:17, CPU 20, load ~6, one session)

codec silesia.tar compress decompress mixed corpus compress decompress
zstd 1.5.7 --fast=1 41.01% 352 MB/s 1285 MB/s 61.99% 485 MB/s 1576 MB/s
zstd 1.5.7 -1 34.53% 317 MB/s 1035 MB/s 56.14% 377 MB/s 1080 MB/s
zstd 1.5.7 -2 32.70% 223 MB/s 757 MB/s 54.88% 282 MB/s 995 MB/s
zstd 1.5.7 -3 31.20% 152 MB/s 650 MB/s 52.80% 154 MB/s 894 MB/s
zstd 1.5.7 -5 29.60% 91.8 MB/s 598 MB/s 52.31% 101 MB/s 847 MB/s
zstd 1.5.7 -9 27.87% 49.1 MB/s 609 MB/s 49.38% 69.5 MB/s 893 MB/s
zxc 0.15.0 -6 36.28% 8.46 MB/s 2655 MB/s 61.45% 13.3 MB/s 2960 MB/s
zxc 0.15.0 -7 33.09% 5.67 MB/s 1866 MB/s 57.34% 9.49 MB/s 1725 MB/s
lz4hc 1.10.0 -9 36.75% 25.6 MB/s 2784 MB/s 60.65% 28.0 MB/s 2963 MB/s
sylz -11 (v2) 36.37% 5.24 MB/s 3170 MB/s 60.63% 9.43 MB/s 3127 MB/s
sylz -12 (v2) 36.12% 2.52 MB/s 3238 MB/s 60.49% 4.90 MB/s 3181 MB/s
sylz -e -1 (v3) 39.50% 181 MB/s 1525 MB/s 60.16% 150 MB/s 1175 MB/s
sylz -e -6 (v3) 35.83% 41.6 MB/s 2026 MB/s 58.05% 36.6 MB/s 1368 MB/s
sylz -e -10 (v3) 34.82% 19.5 MB/s 2062 MB/s 57.60% 24.2 MB/s 1397 MB/s
sylz -e -11 (v3) 34.29% 4.99 MB/s 2032 MB/s 57.37% 9.33 MB/s 1441 MB/s
sylz -e -12 (v3) 34.06% 2.52 MB/s 2080 MB/s 57.26% 5.00 MB/s 1442 MB/s

On silesia.tar sylz v3 beats zstd -1 on ratio at about twice its decompression speed, and decodes faster than zxc -7 one point behind it on ratio; it compresses far slower than zstd. On the mixed corpus zstd -1 is smaller: it entropy-codes matches and offsets too, which sylz does not yet.

Every level, v0.2.4 numbering (2026-10-18, CPU 20, one session)

level silesia.tar compress decompress mixed corpus compress decompress
--fast=2 48.64% 550 MB/s 3345 MB/s 66.96% 697 MB/s 3366 MB/s
--fast=1 46.51% 482 MB/s 3401 MB/s 66.31% 594 MB/s 3245 MB/s
-1 45.26% 421 MB/s 3436 MB/s 65.86% 493 MB/s 3260 MB/s
-2 44.20% 316 MB/s 3370 MB/s 65.45% 361 MB/s 3259 MB/s
-3 40.75% 74.0 MB/s 3139 MB/s 62.60% 52.3 MB/s 2946 MB/s
-4 39.35% 66.9 MB/s 3221 MB/s 61.94% 48.4 MB/s 2956 MB/s
-5 38.35% 58.0 MB/s 3237 MB/s 61.50% 45.9 MB/s 3042 MB/s
-6 37.65% 47.1 MB/s 3159 MB/s 61.20% 43.2 MB/s 3151 MB/s
-7 37.19% 39.4 MB/s 3177 MB/s 61.01% 39.8 MB/s 3114 MB/s
-8 36.89% 32.7 MB/s 3311 MB/s 60.89% 35.7 MB/s 3107 MB/s
-9 36.71% 27.6 MB/s 3325 MB/s 60.81% 31.3 MB/s 3122 MB/s
-10 36.60% 22.0 MB/s 3349 MB/s 60.73% 26.9 MB/s 3148 MB/s
-11 36.37% 5.79 MB/s 3683 MB/s 60.63% 9.98 MB/s 3398 MB/s
-12 36.12% 2.77 MB/s 3351 MB/s 60.49% 5.22 MB/s 3326 MB/s

Single hash (--fast=2 .. -2), lazy hash chains (-3 .. -10), decode-aware optimal parser (-11, -12). Against zxc 0.15.0 -6 (36.28%, 2755 MB/s, 9.42 MB/s): -11 decodes 34% faster at about its ratio, -12 is smaller and 22% faster.

Fast levels (2026-10-18 11:01, load ~2, one session)

codec compress decompress ratio
lz4 1.10.0 492 MB/s 2979 MB/s 47.59%
lz4 --fast -4 598 MB/s 3039 MB/s 51.45%
zxc 0.15.0 -2 330 MB/s 3923 MB/s 53.86%
zxc 0.15.0 -3 159 MB/s 3464 MB/s 46.65%
zxc 0.15.0 -4 117 MB/s 3421 MB/s 43.43%
zxc 0.15.0 -5 69.8 MB/s 3454 MB/s 40.83%
misa77 0.6.0 --1 277 MB/s 3979 MB/s 46.74%
misa77 0.6.0 -0 171 MB/s 3963 MB/s 44.60%
sylz --fast=2 565 MB/s 3364 MB/s 48.64%
sylz --fast=1 508 MB/s 3433 MB/s 46.51%
sylz -1 432 MB/s 3421 MB/s 45.26%
sylz -2 322 MB/s 3245 MB/s 44.20%
sylz -3 73.7 MB/s 3002 MB/s 40.75%

The fast levels hash 6 bytes (5 before 2026-10-18) and differ only in the hash table size: 2^12, 2^13, 2^14, 2^16. The sweep behind it is in NOTES.md.

zxc (2026-10-18, load ~5)

zxc 0.15.0, same core, lzbench 2.4.1 without -march=native (zxc's own published numbers use it):

codec compress decompress ratio
zxc -1 522 MB/s 3936 MB/s 61.76%
zxc -2 364 MB/s 3894 MB/s 53.86%
zxc -3 160 MB/s 3422 MB/s 46.65%
zxc -4 117 MB/s 3414 MB/s 43.43%
zxc -5 71.3 MB/s 3407 MB/s 40.83%
zxc -6 9.42 MB/s 2755 MB/s 36.28%
zxc -7 6.30 MB/s 1856 MB/s 33.09%
lz4 (same run) 515 MB/s 3080 MB/s 47.59%
sylz -1 (same load) 383 MB/s 3103 MB/s 44.18%
sylz -2 73.4 MB/s 2892 MB/s 40.75%
sylz -9 21.2 MB/s 3333 MB/s 36.60%

zxc leads around 40–46%, sylz around 36%; sylz compresses 3.3x faster at a similar ratio.

Format v2 (2026-10-17 23:18, load ~1)

codec compress decompress ratio
lz4 1.10.0 544 MB/s 3302 MB/s 47.59%
misa77 0.6.0 --1 284 MB/s 3995 MB/s 46.74%
misa77 0.6.0 -0 171 MB/s 3962 MB/s 44.60%
misa77 0.6.0 -1 51.8 MB/s 4118 MB/s 42.64%
misa77 0.6.0 -3 11.3 MB/s 3785 MB/s 37.76%
lizard 2.1 -10 436 MB/s 2960 MB/s 48.78%
zstd 1.5.7 --fast=1 392 MB/s 1402 MB/s 41.01%
zstd 1.5.7 -1 345 MB/s 1146 MB/s 34.53%
lz4hc 1.10.0 -9 28.2 MB/s 3230 MB/s 36.75%
sylz -1 423 MB/s 3178 MB/s 44.18%
sylz -2 77.3 MB/s 3069 MB/s 40.75%
sylz -9 21.9 MB/s 3229 MB/s 36.60%

v1 against v2, same session:

v1 decode v2 decode v1 ratio v2 ratio
silesia -1 3000 MB/s 3150 MB/s 44.62% 44.18%
silesia -9 3209 MB/s 3254 MB/s 36.88% 36.60%
mixed -1 3143 MB/s 3411 MB/s 65.30% 64.96%
mixed -9 3196 MB/s 3380 MB/s 61.01% 60.73%

First levels, format v1 (2026-10-17 22:00, load 2-7)

codec compress decompress ratio
lz4 1.10.0 515 MB/s 3105 MB/s 47.59%
lz4 --fast -4 613 MB/s 3169 MB/s 51.45%
misa77 0.6.0 --1 260 MB/s 3746 MB/s 46.74%
misa77 0.6.0 -0 157 MB/s 3907 MB/s 44.60%
misa77 0.6.0 -1 50.4 MB/s 4101 MB/s 42.64%
lizard 2.1 -10 433 MB/s 2965 MB/s 48.78%
zstd 1.5.7 -1 345 MB/s 1135 MB/s 34.53%
zstd 1.5.7 --fast=1 397 MB/s 1405 MB/s 41.01%
sylz -1 402 MB/s 2930 MB/s 44.62%
sylz -2 76 MB/s 2930 MB/s 41.05%
sylz -9 22.5 MB/s 3150 MB/s 36.88%

Higher levels (2026-10-17, sylz v0 at the time)

codec compress decompress ratio
lz4hc -9 27.9 MB/s 2977 MB/s 36.75%
lz4hc -12 8.98 MB/s 2889 MB/s 36.45%
misa77 -3 10.3 MB/s 3517 MB/s 37.76%
lizard -19 3.61 MB/s 2720 MB/s 36.52%

Assembler vs Pascal (sylz v1)

compress decompress
level 1, x86-64 assembler 402 MB/s 2930 MB/s
level 1, Pascal 262 MB/s 2303 MB/s
level 9, assembler decoder — 3150 MB/s
level 9, Pascal — 2456 MB/s

Level 1 hash table size

entries compress ratio
2^12 281 MB/s 47.70%
2^13 264 MB/s 45.78%
2^14 (used) 236 MB/s 44.69%
2^15 207 MB/s 44.08%
2^16 194 MB/s 43.74%

(Pascal compressor, before the assembler.) At lz4's table size the ratio matches lz4's.

How the decoder got here (level 9)

v0: 830 MB/s (pointers on the stack) → 2031 (call-free fast loop) → 2095 (smaller live set). v1: 1834 (lengths passed by var) → 2210 (extensions inline) → 2458 (limits in a record) → 3100 (assembler) → 3150 (counted mode). What each step means: Free Pascal codegen notes.

Clone this wiki locally