Back to the dashboard

CUBR-0034 · real measurements

World benchmark

An open measurement on the recognised world corpora (Silesia, enwik8, Canterbury) against the standard archivers. Lower ratio = better.

Honest scope

On the published Silesia, enwik8 and Canterbury corpora, Cubrim v0.3.2 (measured 2026-07-24) holds the best aggregate lossless compression ratio among 10 tested general-purpose archivers — and pays for it in speed and memory: it compresses at 0.023 MiB/s where the fastest archiver here reaches 19.8, and peaks at 18.0 GiB where gzip uses 2 MiB. It does not win every file either: Brotli leads xargs.1, while xz and Brotli lead nci. Dead ends and measured losses are shown as they are.

Read the benchmark methodology
overall aggregate: cubrim 0.1890065868409507 · leader cubrim 0.1890

Overall archiver ranking

Standings by aggregate ratio across all corpora (lower is better). Each name shows the compression level it ran at.

#1
cubrim competitive
0.1890
#2
ppmd 7z -m0=PPMd
0.2286
#3
xz -9e
0.2344
#4
7z -m0=LZMA2 -mx9
0.2355
#5
brotli -q 11
0.2408
#6
zstd --ultra -22
0.2490
#7
rar a -m5
0.2573
#8
bzip2 -9
0.2671
#9
gzip -9
0.3330
#10
lz4 -12
0.3822
cubrim

Timing and peak memory

Journal-backed sequential measurements. Times are full-world totals; throughput is size-weighted, and RSS is the largest measured per-file process peak. Slow or memory-heavy Cubrim results remain visible.

run
meta35-public-v032-timing-20260727T0000Z
host
arcana-devs
release provenance
v0.3.2 · dfb195ef089db738e51153ad4532fdd583f247bf
sampling
3 measured + 1 warmup

Sequential full-world benchmark; one warmup plus median of three measured samples; GNU time wall clock and peak RSS; every decompression byte-compared.

Exact thread semantics
  • cubrim: CUBR_THREADS=4; RAYON_NUM_THREADS=4; OMP_NUM_THREADS=4
  • gzip: no explicit command-line thread flag; tool default retained
  • bzip2: no explicit command-line thread flag; tool default retained
  • xz: no explicit command-line thread flag; tool default retained
  • zstd: no explicit command-line thread flag; tool default retained
  • brotli: no explicit command-line thread flag; tool default retained
  • lz4: no explicit command-line thread flag; tool default retained
  • ppmd: no explicit command-line thread flag; tool default retained
  • 7z: no explicit command-line thread flag; tool default retained
  • rar: no explicit command-line thread flag; tool default retained
archiver ratio compress total decompress total compress throughput decompress throughput compress peak RSS decompress peak RSS
cubrim 0.1890 13281.555 s 3227.822 s 0.023 MiB/s 0.093 MiB/s 18439.4 MiB 12561.5 MiB
gzip 0.3330 22.430 s 1.798 s 13.383 MiB/s 166.953 MiB/s 2.0 MiB 1.8 MiB
bzip2 0.2671 22.020 s 8.720 s 13.632 MiB/s 34.424 MiB/s 8.5 MiB 4.9 MiB
xz 0.2344 187.650 s 4.179 s 1.600 MiB/s 71.832 MiB/s 673.8 MiB 66.3 MiB
zstd 0.2490 199.312 s 0.627 s 1.506 MiB/s 478.733 MiB/s 771.5 MiB 98.9 MiB
brotli 0.2408 670.137 s 1.021 s 0.448 MiB/s 294.057 MiB/s 238.1 MiB 19.9 MiB
lz4 0.3822 29.748 s 0.404 s 10.090 MiB/s 742.106 MiB/s 9.1 MiB 9.0 MiB
ppmd 0.2286 32.381 s 35.516 s 9.270 MiB/s 8.452 MiB/s 263.9 MiB 263.3 MiB
7z 0.2355 104.809 s 3.600 s 2.864 MiB/s 83.375 MiB/s 682.5 MiB 125.5 MiB
rar 0.2573 15.152 s 1.167 s 19.810 MiB/s 257.120 MiB/s 584.5 MiB 44.3 MiB

Three operating points

One codec, three settings, measured on the same corpus in the same campaign.

What you can run today

These three settings were measured on development build 3a13f48. They are not in any published release, so the version you can download does not accept the flag at all. This section reports measurements, not a feature you can use yet.

Because of that, no Cubrim you can download today can open an archive written with: web.

Why these numbers can be trusted

Rebuilt from source on different hardware (dev-ai), the max setting reproduced the published headline ratio exactly — every digit of the double, not a value that rounds the same. The other two points were measured in the same run, by the same method, against the same competitors.

0.1890065868409507

max

best ratio

The published configuration. Smallest output of anything measured here, and the most memory to open the result.

ratio · max
0.189007
Against the field
17.32% smaller output than ppmd, the strongest of the other archivers measured here. Rank #1.
Peak memory to decode
12.266 GiB
Peak memory to compress
18 600 MiB
Speed
0.023 MiB/s
Round trip
24 of 24 files decoded back to the original and compared byte-for-byte.

Archives open on any Cubrim decoder, including older ones.

balanced

measured, depends on the input

Its name suggests a trade, and the corpus now prices it. On 10 of the 24 files it writes byte-identical output to max, so there it costs nothing at all — and on the largest of those, enwik8, it still encodes 2.48× faster, which makes it simply the better setting on that file. The +0.47% comes entirely from the other 14, which pay between +0.06% and +3.9% for 1.2–3.1× faster encoding. It saves almost no memory, and it does not speed up decoding.

ratio · balanced
0.189891 (+0.47% vs max)
Against the field
16.93% smaller output than ppmd, the strongest of the other archivers measured here. Rank #1.
Peak memory to decode
12.077 GiB (1.0× less than max)
Peak memory to compress
18 090 MiB
Speed
0.038 MiB/s
Identical output to max
10 of 24 files byte-for-byte, by archive hash.
Round trip
24 of 24 files decoded back to the original and compared byte-for-byte.

Archives open on any Cubrim decoder, including older ones.

web

web
ratio · web
0.206627 (+9.32% vs max)
Against the field
9.61% smaller output than ppmd, the strongest of the other archivers measured here. Rank #1.
Peak memory to decode
0.216 GiB (56.8× less than max)
Peak memory to compress
9 349 MiB
Speed
0.040 MiB/s
Identical output to max
6 of 24 files byte-for-byte, by archive hash.
Round trip
24 of 24 files decoded back to the original and compared byte-for-byte.

An archive written with web cannot be opened by an older decoder.

Compatibility runs one way only. The setting records a value that decoders released before it do not understand. Such a decoder does not misread the archive and does not write a partial file — it stops with an error and produces nothing:

Error: DecodeError: MODE_CM2: coded stream exhausted before orig_len bytes decoded

Scope of these measurements

All three points: the same 24 files (314 749 364 bytes) from Silesia, enwik8 and Canterbury, on one host (dev-ai), in one campaign, measured 2026-07-30. Compressed sizes are exact byte counts; every archive was decoded back and compared against its input.

Earlier estimates for these settings came from a 2 MB sample of a single file and were wrong in both directions — once by a factor of five. No figure from that sample appears here, and none of these numbers may be compared against one.

peak memory measured as /usr/bin/time -v Maximum resident set size

Aggregate by corpus

corpus cubrim rank cubrim gzip bzip2 xz zstd brotli lz4 ppmd 7z rar
canterbury #1/10 0.1285 0.2600 0.1931 0.1754 0.1854 0.1746 0.3328 0.1837 0.1761 0.1818
enwik8 #1/10 0.1955 0.3645 0.2901 0.2483 0.2533 0.2574 0.4199 0.2240 0.2486 0.2735
silesia #1/10 0.1867 0.3191 0.2572 0.2286 0.2478 0.2339 0.3651 0.2313 0.2301 0.2507

Per-file, grouped by data type

The best archiver in each row is highlighted green, the worst red; #rank marks where Cubrim places among all archivers (1 = best).

Text

type aggregate: cubrim 0.1760 · ppmd 0.2014 · xz 0.2316

Type rank is by total compressed size (Σ compressed bytes ÷ Σ original bytes across the type's files) — the same size-weighted method as Silesia/lzbench, not an average of per-file ranks. An archiver can win the type without leading any single file if its total output is smallest.

file cubrim rank cubrim gzip bzip2 xz zstd brotli lz4 ppmd 7z rar
alice29.txt #1/10 0.2427 0.3563 0.2841 0.3191 0.3236 0.3057 0.4140 0.2563 0.3195 0.3365
asyoulik.txt #1/10 0.2758 0.3901 0.3161 0.3562 0.3606 0.3412 0.4660 0.2903 0.3568 0.3749
cp.html #1/10 0.2672 0.3244 0.3099 0.3110 0.3136 0.2803 0.4189 0.2720 0.3140 0.3282
lcet10.txt #1/10 0.2086 0.3384 0.2524 0.2800 0.2844 0.2658 0.3846 0.2262 0.2802 0.2963
plrabn12.txt #1/10 0.2614 0.4032 0.3021 0.3434 0.3475 0.3388 0.4663 0.2750 0.3438 0.3644
xargs.1 #2/10 0.3802 0.4154 0.4168 0.4287 0.4088 0.3463 0.5725 0.3809 0.4443 0.4303
enwik8 #1/10 0.1955 0.3645 0.2901 0.2483 0.2533 0.2574 0.4199 0.2240 0.2486 0.2735
dickens #1/10 0.2073 0.3779 0.2747 0.2778 0.2796 0.2774 0.4302 0.2253 0.2778 0.2975
reymont #1/10 0.1388 0.2748 0.1880 0.1985 0.2033 0.2010 0.3118 0.1722 0.1989 0.2180
webster #1/10 0.1397 0.2909 0.2085 0.2019 0.2040 0.2033 0.3341 0.1578 0.2023 0.2179
xml #1/10 0.0633 0.1239 0.0825 0.0814 0.0848 0.0806 0.1424 0.0929 0.0851 0.0907

Source code

type aggregate: cubrim 0.1453 · xz 0.1732 · 7z 0.1741

Type rank is by total compressed size (Σ compressed bytes ÷ Σ original bytes across the type's files) — the same size-weighted method as Silesia/lzbench, not an average of per-file ranks. An archiver can win the type without leading any single file if its total output is smallest.

file cubrim rank cubrim gzip bzip2 xz zstd brotli lz4 ppmd 7z rar
fields.c #1/10 0.2305 0.2813 0.2726 0.2719 0.2708 0.2437 0.3786 0.2476 0.2767 0.2835
grammar.lsp #1/10 0.3021 0.3349 0.3448 0.3472 0.3263 0.3023 0.4668 0.3163 0.3668 0.3542
samba #1/10 0.1453 0.2503 0.2106 0.1731 0.1795 0.1743 0.2827 0.1943 0.1740 0.1901

Database

type aggregate: cubrim 0.0858 · xz 0.0984 · brotli 0.0994

Type rank is by total compressed size (Σ compressed bytes ÷ Σ original bytes across the type's files) — the same size-weighted method as Silesia/lzbench, not an average of per-file ranks. An archiver can win the type without leading any single file if its total output is smallest.

file cubrim rank cubrim gzip bzip2 xz zstd brotli lz4 ppmd 7z rar
nci #3/10 0.0463 0.0890 0.0540 0.0432 0.0481 0.0453 0.1081 0.0686 0.0519 0.0554
osdb #1/10 0.2169 0.3685 0.2779 0.2820 0.3072 0.2792 0.3923 0.2366 0.2828 0.3209

Executables

type aggregate: cubrim 0.2442 · 7z 0.2749 · xz 0.2755

Type rank is by total compressed size (Σ compressed bytes ÷ Σ original bytes across the type's files) — the same size-weighted method as Silesia/lzbench, not an average of per-file ranks. An archiver can win the type without leading any single file if its total output is smallest.

file cubrim rank cubrim gzip bzip2 xz zstd brotli lz4 ppmd 7z rar
mozilla #1/10 0.2391 0.3708 0.3498 0.2612 0.2922 0.2708 0.4302 0.3165 0.2605 0.2959
ooffice #1/10 0.2866 0.5023 0.4653 0.3945 0.4224 0.4029 0.5750 0.4134 0.3943 0.3742

Binary / numeric

type aggregate: cubrim 0.4620 · 7z 0.5378 · xz 0.5393

Type rank is by total compressed size (Σ compressed bytes ÷ Σ original bytes across the type's files) — the same size-weighted method as Silesia/lzbench, not an average of per-file ranks. An archiver can win the type without leading any single file if its total output is smallest.

file cubrim rank cubrim gzip bzip2 xz zstd brotli lz4 ppmd 7z rar
kennedy.xls #1/10 0.0234 0.2037 0.1265 0.0504 0.0677 0.0597 0.3148 0.1347 0.0491 0.0345
sum #1/10 0.2446 0.3340 0.3376 0.2484 0.2937 0.2652 0.4265 0.3065 0.2513 0.3034
sao #1/10 0.5254 0.7346 0.6813 0.6103 0.6895 0.6324 0.7820 0.6561 0.6087 0.7643

Images

type aggregate: cubrim 0.3027 · ppmd 0.3271 · bzip2 0.3451

Type rank is by total compressed size (Σ compressed bytes ÷ Σ original bytes across the type's files) — the same size-weighted method as Silesia/lzbench, not an average of per-file ranks. An archiver can win the type without leading any single file if its total output is smallest.

file cubrim rank cubrim gzip bzip2 xz zstd brotli lz4 ppmd 7z rar
ptt5 #1/10 0.0574 0.1021 0.0970 0.0777 0.0846 0.0798 0.1289 0.0958 0.0822 0.0960
mr #1/10 0.2078 0.3685 0.2448 0.2760 0.3115 0.2831 0.4204 0.2308 0.2756 0.2784
x-ray #1/10 0.4292 0.7125 0.4781 0.5300 0.6084 0.5526 0.8473 0.4545 0.5286 0.4912

ratio = compressed / original (lower is better); round-trip byte-exact verified for cubrim. · 7z -m0=LZMA2 -mx9 · xz -9e · lz4 -12 · rar a -m5 · gzip -9 · ppmd 7z -m0=PPMd · zstd --ultra -22 · bzip2 -9 · brotli -q 11 · cubrim v0.3.2 published release binary sha256 b6c3cd251f7148c1895f5b85d30d06df8252a70afbd649e269f673a19e2a5768; tag v0.3.2 = commit 09ef2bbd00c359c5485a0ef4c6fd59f464382270, whose only difference from dfb195ef089db738e51153ad4532fdd583f247bf is the version bump, so both produce byte-identical output; full24 RT cmp=0; exactly five verified cell corrections

How these numbers are measured

What's next

Each gap → a candidate hypothesis

The weakest classes are exactly where the next research rounds begin — as H-29 columnar field-split was born from a telemetry-CSV gap. Ranked by return on investment.

Text: strong CM validated, first place

Text DONE

MODE_CM2 passed the full 24-file real-CLI gate with RT cmp=0. Strict per-file retained-min yields text 0.17693132733728506 and first place.

cubrim #1/10 · 0.1760 · next ppmd 0.2014
webster #1 0.1397 enwik8 #1 0.1955
MODE_CM2 size gate text margin RT cmp=0 zero-regression

Binary: competitive record CM/CM2, first place

Binary / numeric DONE

Strict per-file retained-min preserves record CM and accepts only winning CM2 rows: binary 0.4656539095049861, first place without regression.

cubrim #1/10 · 0.4620 · next 7z 0.5378
sao #1 0.5254
RECORDCM per-offset SSE binary margin RT cmp=0 zero-regression

Executables: strong CM validated, first place

Executables DONE

MODE_CM2 closes the 7z gap on mozilla and ooffice. Strict per-file retained-min yields exe 0.2481901139274113 and first place.

cubrim #1/10 · 0.2442 · next 7z 0.2749
mozilla #1 0.2391 ooffice #1 0.2866
BCJ MODE_CM2 exe margin RT cmp=0 zero-regression

Images — first place

Images DONE

GeoCM (detected native axis -> 2D above-row + o1/o2/MED contexts -> integer logistic mixer + APM) as competitive-min MODE_GEOCM: ptt5 -32.4% (rank 5->1), x-ray -2.9%, mr -1.0%, RT cmp=0, zero regression. Image type 0.311949->0.30266995181986306.

cubrim #1/10 · 0.3027 · next ppmd 0.3271
mr #1 0.2078 x-ray #1 0.4292
GeoCM MODE_GEOCM detected-axis RT cmp=0 image #1 ptt5 rank1

Code — first place

Source code DONE

The source-code and logs class holds first place. The ensemble keeps the lead on program text with no type-specific tuning.

cubrim #1/10 · 0.1453 · next xz 0.1732
samba #1 0.1453
ensemble

Databases — first place

Database DONE

The database class holds first place on the type's size-weighted aggregate.

cubrim #1/10 · 0.0858 · next xz 0.0984