Skip to content

Latest commit

 

History

History
409 lines (314 loc) · 21.2 KB

File metadata and controls

409 lines (314 loc) · 21.2 KB

alint perf history

Per-scenario tables, version-trajectory shape. Headline cells fingerprinted to linux-x86_64 (Intel Core i7-6700HQ 4-core / 15 GB / ext4 / rustc 1.97.0) — see METHODOLOGY.md for the hardware contract and why cross-machine comparisons need like-for-like.

How to read this file

Each scenario gets its own section with:

  1. A one-paragraph overview of what dispatch shape the scenario stresses and which class of regression it catches.
  2. A table per mode (full and changed) with rows = version (newest first), columns = size (1k / 10k / 100k / 1M). Cells are mean ± stddev, formatted in ms below 1 s and seconds above.
  3. means the version was not measured at that size. n/a means the scenario didn't exist at the tag.

Significant deltas (anything > 20 % across a release) get an investigation write-up under investigations/<YYYY-MM-topic>/ that captures the diagnostic data (traces, flamegraphs, bisect notes).

Source of truth. This file is generated by xtask/scripts/render-history.py after every release. The bench-record.yml workflow's PR includes the per-cell numbers for the maintainer to verify before merging — see ../../RELEASING.md.

Cross-version headline trajectory

1M cells across the most-stressed scenarios. S3 is the realistic-monorepo anchor; S7 is the cross-file-relational cliff that v0.9.5's path-index fix didn't fully cover (and v0.9.8 targets directly); S9 is the nested-polyglot scenario the v0.9.6 scope_filter: primitive exists for.

Version Date 1M S3 full 1M S6 full 1M S7 full 1M S9 full Headline change
v0.13.0 2026-06-17 17.46 s ± 0.16 16.65 s ± 0.03 16.09 s ± 0.10 11.39 s ± 0.05 This release turns the documented surface into generated, drift-proof contracts.
v0.12.0 2026-06-07 17.59 s ± 0.04 16.74 s ± 0.04 16.09 s ± 0.11 11.43 s ± 0.04 The case-study-driven rule-kind expansion, paired with a security cycle that hardens path handling into a real boundary.
v0.11.0 2026-05-28 17.52 s ± 0.13 16.66 s ± 0.06 16.26 s ± 0.20 11.44 s ± 0.03 The LSP + editor-integration release.
v0.10.2 2026-05-21 17.34 s ± 0.13 16.59 s ± 0.03 16.02 s ± 0.12 11.37 s ± 0.07 Targeted follow-up to v0.10.1.
v0.10.1 2026-05-20 17.43 s ± 0.13 16.59 s ± 0.02 16.05 s ± 0.13 11.41 s ± 0.05 Small post-release follow-up to v0.10.0.
v0.10.0 2026-05-20 17.65 s ± 0.06 16.70 s ± 0.02 16.19 s ± 0.09 11.46 s ± 0.04 The "case-study coverage push" minor.

Earlier history (v0.7.x, v0.8.x): no measured perf change beyond v0.5.7; see CHANGELOG.md for the contemporaneous notes.


S1 — Filename hygiene

Eight filename-only rules (filename_case, filename_regex). Pure walker plus glob match — no content read. Narrowest scope alint shares with ls-lint, used as the competitive-comparison anchor. Catches walker and scope-match regressions.

S1 — full

Version 1k 10k 100k 1M
v0.13.0 8 ms ± 1 28 ms ± 2 229 ms ± 7 2.40 s ± 0.00
v0.12.0 7 ms ± 1 26 ms ± 1 224 ms ± 1 2.45 s ± 0.04
v0.11.0 7 ms ± 0 26 ms ± 1 223 ms ± 1 2.37 s ± 0.00
v0.10.2 8 ms ± 1 26 ms ± 1 223 ms ± 1 2.40 s ± 0.00
v0.10.1 7 ms ± 1 27 ms ± 1 223 ms ± 1 2.40 s ± 0.01
v0.10.0 8 ms ± 1 26 ms ± 0 224 ms ± 1 2.41 s ± 0.01

S1 — changed

Version 1k 10k 100k 1M
v0.13.0 19 ms ± 2 46 ms ± 2 397 ms ± 6 4.15 s ± 0.01
v0.12.0 19 ms ± 1 46 ms ± 1 390 ms ± 2 4.17 s ± 0.01
v0.11.0 19 ms ± 1 46 ms ± 1 390 ms ± 2 4.15 s ± 0.00
v0.10.2 19 ms ± 1 46 ms ± 1 391 ms ± 1 4.16 s ± 0.01
v0.10.1 19 ms ± 1 46 ms ± 1 391 ms ± 2 4.18 s ± 0.02
v0.10.0 19 ms ± 1 46 ms ± 1 393 ms ± 2 4.18 s ± 0.01

S2 — Existence + content

Eight existence + content rules (file_exists, file_absent, file_content_forbidden, file_max_size). Walker plus per-file content scan over narrow scopes. Repolinter-comparable shape. Catches content-rule regressions on common shapes.

S2 — full

Version 1k 10k 100k 1M
v0.13.0 10 ms ± 1 37 ms ± 1 326 ms ± 3 3.65 s ± 0.01
v0.12.0 10 ms ± 1 38 ms ± 1 325 ms ± 4 3.64 s ± 0.01
v0.11.0 9 ms ± 1 37 ms ± 1 323 ms ± 2 3.64 s ± 0.02
v0.10.2 10 ms ± 1 37 ms ± 1 324 ms ± 4 3.64 s ± 0.01
v0.10.1 10 ms ± 1 37 ms ± 1 323 ms ± 3 3.65 s ± 0.00
v0.10.0 9 ms ± 1 37 ms ± 1 326 ms ± 3 3.66 s ± 0.01

S2 — changed

Version 1k 10k 100k 1M
v0.13.0 20 ms ± 1 49 ms ± 2 411 ms ± 10 4.24 s ± 0.02
v0.12.0 20 ms ± 1 48 ms ± 1 401 ms ± 3 4.22 s ± 0.00
v0.11.0 20 ms ± 1 48 ms ± 1 400 ms ± 3 4.22 s ± 0.00
v0.10.2 20 ms ± 1 47 ms ± 1 401 ms ± 2 4.23 s ± 0.01
v0.10.1 20 ms ± 1 48 ms ± 1 401 ms ± 2 4.25 s ± 0.01
v0.10.0 19 ms ± 1 48 ms ± 1 402 ms ± 2 4.28 s ± 0.01

S3 — Workspace bundle

extends: oss-baseline + rust + monorepo + cargo-workspace (~34 rules). Heavy mix — content rules over **/*.rs, cross-file for_each_dir over crates/*, toml_path_matches per crate. Realistic monorepo workload; the v0.9.5 cliff (investigations/2026-05-cross-file-rules/) lived here.

S3 — full

Version 1k 10k 100k 1M
v0.13.0 31 ms ± 1 178 ms ± 4 1.67 s ± 0.04 17.46 s ± 0.16
v0.12.0 30 ms ± 1 171 ms ± 1 1.64 s ± 0.00 17.59 s ± 0.04
v0.11.0 31 ms ± 1 173 ms ± 1 1.65 s ± 0.01 17.52 s ± 0.13
v0.10.2 30 ms ± 1 172 ms ± 2 1.63 s ± 0.00 17.34 s ± 0.13
v0.10.1 31 ms ± 2 170 ms ± 1 1.63 s ± 0.01 17.43 s ± 0.13
v0.10.0 30 ms ± 1 171 ms ± 1 1.64 s ± 0.01 17.65 s ± 0.06

S3 — changed

Version 1k 10k 100k 1M
v0.13.0 34 ms ± 1 96 ms ± 1 727 ms ± 7 7.54 s ± 0.01
v0.12.0 33 ms ± 1 95 ms ± 1 723 ms ± 4 7.53 s ± 0.02
v0.11.0 33 ms ± 2 95 ms ± 2 726 ms ± 4 7.51 s ± 0.03
v0.10.2 32 ms ± 2 95 ms ± 2 729 ms ± 3 7.57 s ± 0.06
v0.10.1 33 ms ± 1 96 ms ± 2 727 ms ± 4 7.58 s ± 0.01
v0.10.0 33 ms ± 1 95 ms ± 1 726 ms ± 3 7.58 s ± 0.04

S4 — Agent-era hygiene

Five rules from the v0.6 agent-hygiene bundled ruleset (file_absent, file_content_forbidden). Filename plus content fan-out over agent-shaped trees. Catches agent-era rule shapes.

S4 — full

Version 1k 10k 100k 1M
v0.13.0 9 ms ± 1 28 ms ± 1 233 ms ± 6 2.41 s ± 0.00
v0.12.0 9 ms ± 1 28 ms ± 1 229 ms ± 5 2.40 s ± 0.01
v0.11.0 9 ms ± 1 28 ms ± 1 226 ms ± 3 2.39 s ± 0.00
v0.10.2 9 ms ± 1 28 ms ± 1 229 ms ± 4 2.42 s ± 0.01
v0.10.1 9 ms ± 1 29 ms ± 1 229 ms ± 4 2.42 s ± 0.02
v0.10.0 9 ms ± 0 28 ms ± 1 231 ms ± 5 2.43 s ± 0.01

S4 — changed

Version 1k 10k 100k 1M
v0.13.0 20 ms ± 1 48 ms ± 1 400 ms ± 7 4.16 s ± 0.01
v0.12.0 21 ms ± 1 47 ms ± 1 392 ms ± 2 4.17 s ± 0.03
v0.11.0 19 ms ± 1 46 ms ± 1 392 ms ± 2 4.15 s ± 0.01
v0.10.2 20 ms ± 1 47 ms ± 1 393 ms ± 2 4.17 s ± 0.02
v0.10.1 20 ms ± 1 47 ms ± 1 394 ms ± 2 4.16 s ± 0.01
v0.10.0 20 ms ± 1 47 ms ± 1 394 ms ± 2 4.17 s ± 0.01

S5 — Fix-pass content edits

Four content-edit rules under --fix (final_newline, no_trailing_whitespace, line_endings, no_bom). Read, transform, atomic-rename. The only --fix-mode bench. Catches fix-pipeline regressions.

S5 — full

Version 1k 10k 100k 1M
v0.13.0 15 ms ± 1 114 ms ± 3 1.17 s ± 0.02 12.39 s ± 0.01
v0.12.0 15 ms ± 1 113 ms ± 1 1.17 s ± 0.01 12.45 s ± 0.04
v0.11.0 15 ms ± 1 113 ms ± 1 1.17 s ± 0.01 12.42 s ± 0.01
v0.10.2 16 ms ± 1 112 ms ± 1 1.16 s ± 0.00 12.34 s ± 0.01
v0.10.1 15 ms ± 1 112 ms ± 1 1.16 s ± 0.00 12.38 s ± 0.02
v0.10.0 15 ms ± 1 113 ms ± 1 1.17 s ± 0.00 12.48 s ± 0.02

S5 — changed

Version 1k 10k 100k 1M
v0.13.0 19 ms ± 1 51 ms ± 2 433 ms ± 6 4.58 s ± 0.02
v0.12.0 19 ms ± 1 50 ms ± 1 429 ms ± 2 4.59 s ± 0.02
v0.11.0 19 ms ± 1 50 ms ± 1 429 ms ± 2 4.58 s ± 0.03
v0.10.2 19 ms ± 1 50 ms ± 1 430 ms ± 2 4.59 s ± 0.02
v0.10.1 19 ms ± 1 49 ms ± 1 432 ms ± 3 4.59 s ± 0.01
v0.10.0 19 ms ± 1 49 ms ± 1 431 ms ± 2 4.62 s ± 0.03

S6 — Per-file content fan-out

Thirteen content rules over **/*.rs. Per-file dispatch path width — every .rs file hit by every rule on a single read. Stresses the v0.9.3 dispatch-flip read-coalescing path. Catches per-file inner-loop regressions S3 doesn't surface.

S6 — full

Version 1k 10k 100k 1M
v0.13.0 18 ms ± 1 153 ms ± 5 1.58 s ± 0.03 16.65 s ± 0.03
v0.12.0 19 ms ± 1 150 ms ± 2 1.57 s ± 0.01 16.74 s ± 0.04
v0.11.0 18 ms ± 1 150 ms ± 1 1.56 s ± 0.01 16.66 s ± 0.06
v0.10.2 19 ms ± 1 149 ms ± 1 1.55 s ± 0.00 16.59 s ± 0.03
v0.10.1 19 ms ± 1 148 ms ± 1 1.55 s ± 0.00 16.59 s ± 0.02
v0.10.0 18 ms ± 1 149 ms ± 1 1.56 s ± 0.00 16.70 s ± 0.02

S6 — changed

Version 1k 10k 100k 1M
v0.13.0 20 ms ± 2 54 ms ± 2 484 ms ± 8 5.03 s ± 0.00
v0.12.0 20 ms ± 1 53 ms ± 1 471 ms ± 2 5.03 s ± 0.03
v0.11.0 19 ms ± 1 54 ms ± 1 472 ms ± 2 4.99 s ± 0.01
v0.10.2 20 ms ± 1 53 ms ± 1 472 ms ± 1 5.09 s ± 0.09
v0.10.1 20 ms ± 1 53 ms ± 1 474 ms ± 2 5.02 s ± 0.00
v0.10.0 19 ms ± 1 54 ms ± 1 475 ms ± 2 5.03 s ± 0.02

S7 — Cross-file relational

Six cross-file relational kinds (pair, unique_by, for_each_dir, for_each_file, dir_only_contains, every_matching_has). Various fan-out shapes over the synthetic monorepo. Catches the next O(D × N) cliff after the v0.9.5 path-index fix; the v0.9.7 → v0.9.8 transition's headline cell.

S7 — full

Version 1k 10k 100k 1M
v0.13.0 12 ms ± 1 45 ms ± 2 529 ms ± 14 16.09 s ± 0.10
v0.12.0 12 ms ± 1 45 ms ± 2 512 ms ± 5 16.09 s ± 0.11
v0.11.0 12 ms ± 1 43 ms ± 2 512 ms ± 7 16.26 s ± 0.20
v0.10.2 12 ms ± 1 45 ms ± 2 516 ms ± 4 16.02 s ± 0.12
v0.10.1 12 ms ± 1 43 ms ± 2 512 ms ± 7 16.05 s ± 0.13
v0.10.0 12 ms ± 1 42 ms ± 2 517 ms ± 7 16.19 s ± 0.09

S7 — changed

Version 1k 10k 100k 1M
v0.13.0 23 ms ± 1 66 ms ± 4 707 ms ± 18 18.12 s ± 0.13
v0.12.0 23 ms ± 1 65 ms ± 2 694 ms ± 5 18.11 s ± 0.19
v0.11.0 23 ms ± 1 64 ms ± 2 691 ms ± 5 17.98 s ± 0.09
v0.10.2 24 ms ± 1 66 ms ± 2 694 ms ± 6 18.18 s ± 0.06
v0.10.1 24 ms ± 1 66 ms ± 2 697 ms ± 5 18.07 s ± 0.10
v0.10.0 23 ms ± 1 66 ms ± 2 697 ms ± 5 18.11 s ± 0.08

S8 — Git overlay

S3 reshape plus git_no_denied_paths and git_tracked_only over a real git repo. Same as S3 but with Engine::collect_git_tracked_if_needed and BlameCache active. Catches git-aware dispatch regressions at scale.

S8 — full

Version 1k 10k 100k 1M
v0.13.0 27 ms ± 1 163 ms ± 3 1.55 s ± 0.04 16.79 s ± 0.03
v0.12.0 26 ms ± 1 159 ms ± 2 1.53 s ± 0.02 16.83 s ± 0.04
v0.11.0 27 ms ± 1 160 ms ± 2 1.53 s ± 0.01 16.83 s ± 0.03
v0.10.2 27 ms ± 1 159 ms ± 2 1.51 s ± 0.01 16.76 s ± 0.03
v0.10.1 26 ms ± 0 157 ms ± 2 1.51 s ± 0.01 16.67 s ± 0.30
v0.10.0 26 ms ± 1 159 ms ± 2 1.52 s ± 0.01 16.85 s ± 0.03

S8 — changed

Version 1k 10k 100k 1M
v0.13.0 29 ms ± 2 85 ms ± 3 618 ms ± 10 6.58 s ± 0.01
v0.12.0 29 ms ± 2 83 ms ± 2 605 ms ± 4 6.59 s ± 0.05
v0.11.0 29 ms ± 1 83 ms ± 2 605 ms ± 4 6.52 s ± 0.04
v0.10.2 28 ms ± 1 83 ms ± 1 607 ms ± 5 6.55 s ± 0.02
v0.10.1 29 ms ± 1 83 ms ± 2 610 ms ± 8 6.56 s ± 0.03
v0.10.0 29 ms ± 1 82 ms ± 2 605 ms ± 6 6.60 s ± 0.03

S9 — Nested polyglot

Three competing ecosystem rulesets: extends: rust + node + python (~26 rules) over a polyglot tree (Rust under crates/, Node under packages/, Python under apps/). Per-rule scope_filter: { has_ancestor: <manifest> } ancestor walks. The dispatch shape the v0.9.6 scope_filter: primitive was designed for — without it, every **/*.py rule from python@v1 fires on every .py file in the tree. New in v0.9.6.

S9 — full

Version 1k 10k 100k 1M
v0.13.0 17 ms ± 2 108 ms ± 2 1.08 s ± 0.03 11.39 s ± 0.05
v0.12.0 18 ms ± 1 106 ms ± 1 1.06 s ± 0.00 11.43 s ± 0.04
v0.11.0 17 ms ± 1 106 ms ± 1 1.07 s ± 0.01 11.44 s ± 0.03
v0.10.2 18 ms ± 1 105 ms ± 1 1.05 s ± 0.01 11.37 s ± 0.07
v0.10.1 17 ms ± 1 105 ms ± 1 1.05 s ± 0.01 11.41 s ± 0.05
v0.10.0 17 ms ± 1 106 ms ± 1 1.06 s ± 0.01 11.46 s ± 0.04

S9 — changed

Version 1k 10k 100k 1M
v0.13.0 14 ms ± 1 54 ms ± 1 454 ms ± 8 4.70 s ± 0.02
v0.12.0 14 ms ± 1 53 ms ± 1 443 ms ± 2 4.68 s ± 0.01
v0.11.0 22 ms ± 1 53 ms ± 1 442 ms ± 2 4.69 s ± 0.02
v0.10.2 22 ms ± 1 53 ms ± 1 442 ms ± 2 4.72 s ± 0.01
v0.10.1 22 ms ± 1 54 ms ± 1 442 ms ± 2 4.70 s ± 0.01
v0.10.0 21 ms ± 1 53 ms ± 1 444 ms ± 2 4.71 s ± 0.02

S10 — scope_filter outside per-file dispatch

Five rules from outside the PerFileRule dispatch path (file_max_size, no_empty_files, no_symlinks, filename_case, filename_regex) each with scope_filter: { has_ancestor: <manifest> } over the polyglot tree. Per-rule evaluate() iterating ctx.index.files() with both path-glob AND scope_filter narrowing — the dispatch shape v0.9.9 wired through (v0.9.8 silently dropped scope_filter: on these 17 rule kinds). New in v0.9.9.

S10 — full

Version 1k 10k 100k 1M
v0.13.0 10 ms ± 1 50 ms ± 3 462 ms ± 11 5.06 s ± 0.11
v0.12.0 10 ms ± 1 51 ms ± 4 454 ms ± 13 5.05 s ± 0.11
v0.11.0 10 ms ± 1 52 ms ± 4 456 ms ± 13 5.05 s ± 0.09
v0.10.2 10 ms ± 1 50 ms ± 4 451 ms ± 9 5.08 s ± 0.08
v0.10.1 10 ms ± 1 52 ms ± 4 453 ms ± 11 5.14 s ± 0.08
v0.10.0 10 ms ± 1 51 ms ± 4 452 ms ± 9 5.06 s ± 0.10

S10 — changed

Version 1k 10k 100k 1M
v0.13.0 11 ms ± 1 50 ms ± 2 435 ms ± 11 4.54 s ± 0.01
v0.12.0 11 ms ± 1 49 ms ± 0 431 ms ± 3 4.54 s ± 0.02
v0.11.0 19 ms ± 1 49 ms ± 1 426 ms ± 4 4.56 s ± 0.02
v0.10.2 19 ms ± 1 49 ms ± 1 428 ms ± 5 4.58 s ± 0.02
v0.10.1 20 ms ± 1 49 ms ± 1 429 ms ± 4 4.56 s ± 0.03
v0.10.0 19 ms ± 1 50 ms ± 1 432 ms ± 6 4.57 s ± 0.03

S11 — v0.10 cross-file dispatch class

Three v0.10 cross-file kinds (registry_paths_resolve, cross_file_value_equals, pair_hash) over the regular synthetic monorepo with a manifest.sha256 overlay. Exercises the whole-repo entry points the v0.10 cross-file engine uses, plus the new crate::extract / crate::io::read_capped helpers. Adds to S7 (the v0.2-era cross-file family: pair / unique_by / for_each_* / dir_only_contains / every_matching_has) by covering the v0.10 additions. New in v0.10.0.

S11 — full

Version 1k 10k 100k 1M
v0.13.0 9 ms ± 2 30 ms ± 1 237 ms ± 7 2.37 s ± 0.01
v0.12.0 8 ms ± 1 29 ms ± 1 230 ms ± 3 2.36 s ± 0.00
v0.11.0 8 ms ± 1 30 ms ± 1 229 ms ± 3 2.34 s ± 0.00
v0.10.2 9 ms ± 1 30 ms ± 1 230 ms ± 3 2.36 s ± 0.00
v0.10.1 9 ms ± 1 30 ms ± 1 231 ms ± 4 2.37 s ± 0.01
v0.10.0 9 ms ± 1 30 ms ± 1 232 ms ± 4 2.38 s ± 0.01

S11 — changed

Version 1k 10k 100k 1M
v0.13.0 20 ms ± 1 53 ms ± 2 424 ms ± 8 4.37 s ± 0.02
v0.12.0 21 ms ± 1 51 ms ± 1 418 ms ± 4 4.38 s ± 0.03
v0.11.0 20 ms ± 1 50 ms ± 1 417 ms ± 5 4.36 s ± 0.03
v0.10.2 20 ms ± 1 50 ms ± 1 418 ms ± 4 4.37 s ± 0.03
v0.10.1 20 ms ± 1 51 ms ± 1 416 ms ± 2 4.40 s ± 0.02
v0.10.0 20 ms ± 1 50 ms ± 1 417 ms ± 1 4.39 s ± 0.03

S12 — v0.10 per-file dispatch class

Three v0.10 per-file kinds (ordered_block, import_gate, xml_path_equals + xml_path_matches) over **/*.rs plus a single root-level .csproj overlay (per-package fan-out skipped to keep cross-version file counts stable). Exercises the per-file dispatch path made fast by v0.9.3, with the v0.10-new extraction / regex / XML structured-query paths. Adds to S6 (dense content fan-out on **/*.rs) by covering the v0.10 additions independently of S6's pure-content baseline. New in v0.10.0.

S12 — full

Version 1k 10k 100k 1M
v0.13.0 11 ms ± 1 45 ms ± 1 400 ms ± 7 4.11 s ± 0.01
v0.12.0 10 ms ± 1 45 ms ± 1 393 ms ± 2 4.11 s ± 0.02
v0.11.0 10 ms ± 1 43 ms ± 1 386 ms ± 2 4.02 s ± 0.02
v0.10.2 11 ms ± 1 43 ms ± 1 371 ms ± 1 3.91 s ± 0.02
v0.10.1 10 ms ± 1 42 ms ± 1 372 ms ± 1 3.90 s ± 0.02
v0.10.0 10 ms ± 1 42 ms ± 1 372 ms ± 2 3.94 s ± 0.00

S12 — changed

Version 1k 10k 100k 1M
v0.13.0 21 ms ± 2 49 ms ± 1 426 ms ± 8 4.40 s ± 0.01
v0.12.0 20 ms ± 1 49 ms ± 1 410 ms ± 2 4.40 s ± 0.01
v0.11.0 20 ms ± 1 49 ms ± 1 409 ms ± 1 4.39 s ± 0.02
v0.10.2 20 ms ± 1 48 ms ± 1 410 ms ± 2 4.41 s ± 0.02
v0.10.1 21 ms ± 1 49 ms ± 1 409 ms ± 1 4.40 s ± 0.01
v0.10.0 20 ms ± 1 48 ms ± 1 409 ms ± 1 4.41 s ± 0.01

S13 — v0.10 single-shot dispatch class

Two v0.10 single-shot kinds (generated_file_fresh, command_idempotent) declared with command: ["true"] so the row measures crate::spawn::run_capturing (fork / exec / concurrent pipe-drain / wait / stdout-parse), not the user's tool. Single-shot rules add a fixed cost per run; tree walk dominates the row. Signal of interest is cross-version stability of the spawn path — regressions in crate::spawn or the engine's single-shot dispatch surface here in isolation. New in v0.10.0.

S13 — full

Version 1k 10k 100k 1M
v0.13.0 18 ms ± 1 35 ms ± 1 216 ms ± 5 2.20 s ± 0.01
v0.12.0 18 ms ± 1 35 ms ± 1 213 ms ± 1 2.20 s ± 0.00
v0.11.0 18 ms ± 1 34 ms ± 1 212 ms ± 1 2.19 s ± 0.01
v0.10.2 18 ms ± 1 35 ms ± 1 213 ms ± 1 2.20 s ± 0.00
v0.10.1 18 ms ± 1 35 ms ± 1 213 ms ± 2 2.20 s ± 0.00
v0.10.0 18 ms ± 1 35 ms ± 1 215 ms ± 1 2.22 s ± 0.00

S13 — changed

Version 1k 10k 100k 1M
v0.13.0 30 ms ± 2 57 ms ± 2 409 ms ± 8 4.22 s ± 0.01
v0.12.0 29 ms ± 1 56 ms ± 1 398 ms ± 1 4.23 s ± 0.04
v0.11.0 30 ms ± 1 56 ms ± 1 399 ms ± 2 4.20 s ± 0.02
v0.10.2 29 ms ± 1 56 ms ± 1 401 ms ± 2 4.20 s ± 0.00
v0.10.1 30 ms ± 1 56 ms ± 1 402 ms ± 2 4.22 s ± 0.01
v0.10.0 29 ms ± 1 56 ms ± 1 401 ms ± 2 4.25 s ± 0.01

How to add a row

When a release tag lands, the bench-record.yml workflow (introduced in v0.9.7) auto-runs the publish-grade matrix on the self-hosted Linux runner and opens a PR with the new per-version dir. The maintainer re-renders this file from the merged data:

python3 xtask/scripts/render-history.py > docs/benchmarks/HISTORY.md

See ../../RELEASING.md for the full review checklist (CV check, fingerprint check, investigation hand-off if delta > 20 %).

Cross-version perf investigations