Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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.

ImplementationMedian speed / C ↑Median output / C ↓Datasets
zstd C1.000×1.000×8
mzstd1.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
ImplementationMean, ns95% mean interval, nsMiB/sOutput bytesOutput / inputSpeed / C
zstd C2,1772,163–2,195—9—1.000×
mzstd384.6376.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
ImplementationMean, µs95% mean interval, µsMiB/sOutput bytesOutput / inputSpeed / C
zstd C7.0136.86–7.1975.9853120.455%1.000×
mzstd4.7244.542–4.9278.8853120.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
ImplementationMean, µs95% mean interval, µsMiB/sOutput bytesOutput / inputSpeed / C
zstd C7.104e+046.711e+04–7.507e+0414.081,048,609100.003%1.000×
mzstd4.906e+044.711e+04–5.106e+0420.381,048,609100.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
ImplementationMean, µs95% mean interval, µsMiB/sOutput bytesOutput / inputSpeed / C
zstd C867.3835.8–899.81,153.00490.005%1.000×
mzstd646.3624.3–670.31,547.25490.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
ImplementationMean, µs95% mean interval, µsMiB/sOutput bytesOutput / inputSpeed / C
zstd C3.5e+043.395e+04–3.599e+044.1449,21132.357%1.000×
mzstd2.703e+042.605e+04–2.809e+045.3749,21132.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
ImplementationMean, µs95% mean interval, µsMiB/sOutput bytesOutput / inputSpeed / C
zstd C2,4612,357–2,57725.4065,546100.015%1.000×
mzstd2,1822,116–2,25928.6565,546100.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
ImplementationMean, µs95% mean interval, µsMiB/sOutput bytesOutput / inputSpeed / C
zstd C2.899e+042.817e+04–2.99e+0434.5049,2854.700%1.000×
mzstd2.658e+042.601e+04–2.722e+0437.6249,2854.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
ImplementationMean, µs95% mean interval, µsMiB/sOutput bytesOutput / inputSpeed / C
zstd C277.9263.9–293.5224.921,2591.921%1.000×
mzstd255.6240.2–271.7244.571,2591.921%1.087×