Compression level 19
Benchmark index · Median overview · ← Level 18 · Level 20 →
Recorded run: long-20261109 (2026-11-09). Raw results · Environment · Run analysis.
Median across all datasets
Each of the 8 datasets has equal weight, including empty and tiny input. Speed / C = C mean latency / implementation mean latency; output / C = implementation bytes / C bytes. We take the median of these 8 per-dataset ratios separately for speed and size. 1× matches C; higher speed and lower output are better. These are medians across datasets, not median sample latencies, and do not imply statistical significance.
| Implementation | Median speed / C ↑ | Median output / C ↓ | Datasets |
|---|---|---|---|
| zstd C | 1.000× | 1.000× | 8 |
| mzstd | 1.318× | 1.000× | 8 |
Measurement setup and interpretation
zstd 1.5.7 (the C library built by zstd-ffi) and mzstd at the recorded
working tree compress identical bytes at this level. Every frame was checked byte-identical
to zstd’s and decoded back to its input before any timing.
These are cold native API measurements: construction, allocation, compression, and disposal. Complete known input; 50 samples, 3 s warmup, at least 6 s measurement. Host: AMD Ryzen 9 7950X, Linux KVM guest with two vCPUs: the encoder suite, then the decoder suite, each in one Criterion process pinned to vCPU 1; nothing else ran in the guest. Other tenants loaded the host: a fixed C decode varied by 8-43% (p10-p90 wall time) through the day, so sampling was lengthened to average over the noise. unset; Cargo release defaults (bench profile), runtime SIMD dispatch (AVX-512 level on this host; the decoder runs its block loops at the AVX2 level).
Chart whiskers and table intervals describe 95% confidence bounds on mean timing. They do not capture all host or allocator variation. Throughput bounds are transformed latency bounds. Output / input is compressed bytes divided by input bytes; smaller is better, and values above 100% mean expansion. For empty input, throughput and output / input are undefined (—). See the run analysis for measurement limitations.
Dataset details
Ordered by mzstd speed / C, highest first; all 8 datasets are shown. This order uses recorded mean latency, not statistical significance. Bars start at zero.
empty · tiny-text · random-1m · repeated-1m · alice29 · random-64k · text-1m · binary-64k
empty
Empty input; measures API overhead. Input: 0 bytes.
mzstd speed / C: 5.661×; output: 9 / 9 bytes.
Exact measurements and confidence bounds
| Implementation | Mean, ns | 95% mean interval, ns | MiB/s | Output bytes | Output / input | Speed / C |
|---|---|---|---|---|---|---|
| zstd C | 2,177 | 2,163–2,195 | — | 9 | — | 1.000× |
| mzstd | 384.6 | 376.4–395.3 | — | 9 | — | 5.661× |
tiny-text
44-byte quick-brown-fox sentence. Input: 44 bytes.
mzstd speed / C: 1.485×; output: 53 / 53 bytes.
Exact measurements and confidence bounds
| Implementation | Mean, µs | 95% mean interval, µs | MiB/s | Output bytes | Output / input | Speed / C |
|---|---|---|---|---|---|---|
| zstd C | 7.013 | 6.86–7.197 | 5.98 | 53 | 120.455% | 1.000× |
| mzstd | 4.724 | 4.542–4.927 | 8.88 | 53 | 120.455% | 1.485× |
random-1m
1 MiB of deterministic xorshift64 pseudorandom bytes. Input: 1,048,576 bytes.
mzstd speed / C: 1.448×; output: 1,048,609 / 1,048,609 bytes.
Exact measurements and confidence bounds
| Implementation | Mean, µs | 95% mean interval, µs | MiB/s | Output bytes | Output / input | Speed / C |
|---|---|---|---|---|---|---|
| zstd C | 7.104e+04 | 6.711e+04–7.507e+04 | 14.08 | 1,048,609 | 100.003% | 1.000× |
| mzstd | 4.906e+04 | 4.711e+04–5.106e+04 | 20.38 | 1,048,609 | 100.003% | 1.448× |
repeated-1m
1 MiB of repeated a bytes. Input: 1,048,576 bytes.
mzstd speed / C: 1.342×; output: 49 / 49 bytes.
Exact measurements and confidence bounds
| Implementation | Mean, µs | 95% mean interval, µs | MiB/s | Output bytes | Output / input | Speed / C |
|---|---|---|---|---|---|---|
| zstd C | 867.3 | 835.8–899.8 | 1,153.00 | 49 | 0.005% | 1.000× |
| mzstd | 646.3 | 624.3–670.3 | 1,547.25 | 49 | 0.005% | 1.342× |
alice29
Alice in Wonderland text from the Canterbury corpus (testdata/alice29.txt). Input: 152,089 bytes.
mzstd speed / C: 1.295×; output: 49,211 / 49,211 bytes.
Exact measurements and confidence bounds
| Implementation | Mean, µs | 95% mean interval, µs | MiB/s | Output bytes | Output / input | Speed / C |
|---|---|---|---|---|---|---|
| zstd C | 3.5e+04 | 3.395e+04–3.599e+04 | 4.14 | 49,211 | 32.357% | 1.000× |
| mzstd | 2.703e+04 | 2.605e+04–2.809e+04 | 5.37 | 49,211 | 32.357% | 1.295× |
random-64k
64 KiB prefix of the deterministic pseudorandom corpus. Input: 65,536 bytes.
mzstd speed / C: 1.128×; output: 65,546 / 65,546 bytes.
Exact measurements and confidence bounds
| Implementation | Mean, µs | 95% mean interval, µs | MiB/s | Output bytes | Output / input | Speed / C |
|---|---|---|---|---|---|---|
| zstd C | 2,461 | 2,357–2,577 | 25.40 | 65,546 | 100.015% | 1.000× |
| mzstd | 2,182 | 2,116–2,259 | 28.65 | 65,546 | 100.015% | 1.128× |
text-1m
Alice text repeated cyclically to 1 MiB. Input: 1,048,576 bytes.
mzstd speed / C: 1.090×; output: 49,285 / 49,285 bytes.
Exact measurements and confidence bounds
| Implementation | Mean, µs | 95% mean interval, µs | MiB/s | Output bytes | Output / input | Speed / C |
|---|---|---|---|---|---|---|
| zstd C | 2.899e+04 | 2.817e+04–2.99e+04 | 34.50 | 49,285 | 4.700% | 1.000× |
| mzstd | 2.658e+04 | 2.601e+04–2.722e+04 | 37.62 | 49,285 | 4.700% | 1.090× |
binary-64k
64 KiB of structured binary bytes: ((i / 16) XOR i) modulo 256. Input: 65,536 bytes.
mzstd speed / C: 1.087×; output: 1,259 / 1,259 bytes.
Exact measurements and confidence bounds
| Implementation | Mean, µs | 95% mean interval, µs | MiB/s | Output bytes | Output / input | Speed / C |
|---|---|---|---|---|---|---|
| zstd C | 277.9 | 263.9–293.5 | 224.92 | 1,259 | 1.921% | 1.000× |
| mzstd | 255.6 | 240.2–271.7 | 244.57 | 1,259 | 1.921% | 1.087× |