Skip to main content

Draton GC Benchmarks - 2026-03-18

This report publishes the next public GC benchmark snapshot for commit f90dcdc.

This pass was intentionally narrower than the earlier March 18 hasher work:

  • fuse young survivor promotion into the scan loop instead of building a separate promotion list first
  • stop pushing pointer-free objects onto the major mark stack
  • keep active major-cycle allocations and protect() semantics safe while that mark-stack optimization is in place

The result is mixed, and this report keeps that visible instead of smoothing it over.

Published artifacts

GitHub Actions run

  • workflow: gc-perf
  • run id: 23230366650
  • repository commit: f90dcdc
  • result: success

GitHub Actions scorecard summary

Current run:

Scenarioelapsed_ns
young-burst3525346
promotion-chain15976933
barrier-churn7115994
old-reuse-churn27672566
large-object-burst4179019

Delta against the previous public run 23228923625:

ScenarioPrevious elapsed_nsCurrent elapsed_nsChange
young-burst334743835253465.31% slower
promotion-chain183993591597693313.17% faster
barrier-churn727697071159942.21% faster
old-reuse-churn311307492767256611.11% faster
large-object-burst406266241790192.86% slower

Interpretation:

  • the promotion-heavy path improved again on the same runner
  • old-generation reuse also improved materially
  • young-only and large-object-only scenarios regressed slightly in this pass
  • the net effect is mixed rather than a clean across-the-board win

Toolchain-facing workloads in the same run:

WorkloadStatusbuild_elapsed_nsrun_elapsed_nsExtra
gc_stress_linked_listok357565167271800659exit code 50
selfhost_bootstrapblocked80490507928-LLVM ERROR: unknown special variable

GitHub Actions OCaml comparison

Current run summary:

  • status: ok
  • scorecard_result: mixed
  • draton_wins: 0
  • scenario_count: 3
  • geometric_mean_ocaml_over_draton_median_speed_ratio: 0.26372264511307886

Per-scenario medians:

ScenarioDraton median nsOCaml median nsocaml_over_draton_median_speed_ratioResult
young-burst6479433578660.5523109285847675Draton slower
promotion-chain17065541308910.07669900864549262Draton much slower
barrier-churn8821313819460.43298104249822306Draton slower

Delta against the previous public run 23228923625:

MetricPreviousCurrentChange
young-burst ratio0.54000717407377590.55231092858476752.28% better
promotion-chain ratio0.085260012861207980.0766990086454926210.04% worse
barrier-churn ratio0.471829185530878440.432981042498223068.24% worse
geometric mean ratio0.27902508011502240.263722645113078865.48% worse

Interpretation:

  • the shared OCaml comparison is still honest and still unfavorable overall
  • the scorecard-side promotion improvement did not translate into a better relative OCaml result on this run
  • the current pass is therefore a targeted runtime improvement, not a proof that Draton is now closing the whole gap

Local release spot checks

Direct release-binary spot checks on the same commit during development were:

ScenarioDirect run elapsed_ns
young-burst1702670
promotion-chain2570247
barrier-churn2489458

These local numbers were useful to validate direction while iterating, but the GitHub Actions data above remains the authoritative same-runner comparison.

Current honest status

  • Draton improved some hot runtime paths again, especially promotion and old-gen reuse.
  • Draton still does not beat OCaml on the shared microbench suite.
  • selfhost_bootstrap is still blocked in the scorecard for the same LLVM reason as before.