Skip to content

bench: real-world tree shapes, named after what they are - #36

Merged
markovejnovic merged 2 commits into
mainfrom
bench/fixture-names
Sep 28, 2026
Merged

markovejnovic merged 2 commits into
mainfrom
bench/fixture-names

Conversation

@markovejnovic

@markovejnovic markovejnovic commented Sep 28, 2026 •

Copy link
Copy Markdown
Owner

No description provided.

@github-actions

github-actions Bot commented Sep 28, 2026 •

Copy link
Copy Markdown

🐰 Bencher Report

Projectremmy
Branchpr-36
Testbedvultr-bare-metal

⚠️ WARNING: No Threshold found!

Without a Threshold, no Alerts will ever be generated.

Click here to create a new Threshold
For more information, see the Threshold documentation.
To only post results if a Threshold exists, set the --ci-only-thresholds flag.

Click to view all benchmark results
BenchmarkLatencymilliseconds (ms)Throughputoperations / second (ops/s) x 1e3time-ratioMeasure (units)time-ratio-vs-mainMeasure (units)
demo/balanced-38k/warm/main@1📈 view plot
⚠️ NO THRESHOLD
612.71 ms📈 view plot
⚠️ NO THRESHOLD
62.39 ops/s x 1e3📈 view plot
🚷 view threshold
0.95 units
demo/balanced-38k/warm/main@4📈 view plot
⚠️ NO THRESHOLD
212.74 ms📈 view plot
⚠️ NO THRESHOLD
179.69 ops/s x 1e3📈 view plot
🚷 view threshold
0.33 units
demo/balanced-38k/warm/remmy@1📈 view plot
⚠️ NO THRESHOLD
613.24 ms📈 view plot
⚠️ NO THRESHOLD
62.34 ops/s x 1e3📈 view plot
🚷 view threshold
0.95 units📈 view plot
⚠️ NO THRESHOLD
1.00 units
demo/balanced-38k/warm/remmy@4📈 view plot
⚠️ NO THRESHOLD
213.11 ms📈 view plot
⚠️ NO THRESHOLD
179.37 ops/s x 1e3📈 view plot
🚷 view threshold
0.33 units📈 view plot
⚠️ NO THRESHOLD
1.00 units
demo/balanced-38k/warm/rm@1📈 view plot
⚠️ NO THRESHOLD
645.65 ms📈 view plot
⚠️ NO THRESHOLD
59.21 ops/s x 1e3
demo/balanced-38k/warm/xargs@1📈 view plot
⚠️ NO THRESHOLD
879.22 ms📈 view plot
⚠️ NO THRESHOLD
43.48 ops/s x 1e3
demo/balanced-38k/warm/xargs@4📈 view plot
⚠️ NO THRESHOLD
423.26 ms📈 view plot
⚠️ NO THRESHOLD
90.32 ops/s x 1e3
🐰 View full continuous benchmarking report in Bencher

F0..F7 said nothing: reading a result meant looking the id up in
registry.py. Each id now names the tree's shape and file count
(balanced-58k, wide-51k, deep-58k, balanced-58k-4kib, large-1mib-files,
tiny-125, balanced-333k, flat-58k). That's what pytest ids, chart file
names and Bencher benchmarks show: demo/balanced-58k/warm/remmy@4. A test
keeps each id's file count in step with its tree.

Trees, tools, sampling and the decision rule are unchanged.
The anchor (585 dirs x 100 empty files) was mktree's defaults, with no
source for calling it typical. Measured eight real node_modules trees
(express to bitwarden/clients): every one has ~7-10 files per dir, not
100, and ~80% of files are <= 4 KiB, so each frees one block; none are
empty.

The anchor is now vscode's shape made uniform: fanout 4, depth 6, 7
files per dir (5,461 dirs, 38,227 files; vscode c17dab9 has 5,538 and
39,966). Every small-file tree uses 4 KiB files. The trees that vary one
thing of the anchor follow it: wide-38k keeps its dirs and files at one
level, flat-38k its file count in one dir, deep-36k a similar count.
The huge tree is the anchor one level deeper (152k files, monorepo
sized) instead of 333k, which at 4 KiB would write 1.3 GB per run.
balanced-58k-4kib is gone: the anchor is that now.
@markovejnovic markovejnovic changed the title bench: name fixtures after their trees, not F0..F7 bench: real-world tree shapes, named after what they are Sep 28, 2026
@markovejnovic
markovejnovic merged commit 45d743f into main Sep 28, 2026
13 checks passed
@markovejnovic
markovejnovic deleted the bench/fixture-names branch September 28, 2026 09:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant