Skip to main content

Draton GC Benchmarks - 2026-03-18

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

The purpose is still transparency:

  • publish the new GitHub Actions scorecard for the current head
  • publish the new GitHub Actions OCaml comparison for the current head
  • show the delta against the last published run instead of only showing the current numbers
  • keep the unfavorable result visible: Draton still loses all three OCaml microbench scenarios in this run

Published artifacts​

What changed in this pass​

This benchmark snapshot includes one more runtime optimization pass on top of the earlier March 17 baseline:

  • internal GC maps for roots, forwarding entries, large objects, and type descriptors now use a dedicated fast hasher instead of the default HashMap hasher
  • hot collector paths no longer clone TypeDescriptor values just to walk pointer offsets

That change targets exactly the remaining hot paths that still looked expensive:

  • root/protect lookup overhead
  • forwarding lookup overhead during promotion
  • descriptor lookup overhead during tracing and fixup

GitHub Actions run​

  • workflow: gc-perf
  • run id: 23228923625
  • repository commit: e8f4d9e
  • result: success

GitHub Actions scorecard summary​

Current run:

Scenarioelapsed_ns
young-burst3347438
promotion-chain18399359
barrier-churn7276970
old-reuse-churn31130749
large-object-burst4062662

Delta against the previous public run 23203853670:

ScenarioPrevious elapsed_nsCurrent elapsed_nsImprovement
young-burst338723233474381.17% faster
promotion-chain286682181839935935.82% faster
barrier-churn9783746727697025.62% faster
old-reuse-churn477908433113074934.86% faster
large-object-burst440233840626627.71% faster

Toolchain-facing workloads in the same run:

WorkloadStatusbuild_elapsed_nsrun_elapsed_nsExtra
gc_stress_linked_listok173002645521718897exit code 50
selfhost_bootstrapblocked78657157430-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.2790250801150224

Per-scenario medians:

ScenarioDraton median nsOCaml median nsocaml_over_draton_median_speed_ratioResult
young-burst6830153688330.5400071740737759Draton slower
promotion-chain18987331618860.08526001286120798Draton much slower
barrier-churn8605364060260.47182918553087844Draton slower

Delta against the previous public run 23203853670:

MetricPreviousCurrentChange
young-burst ratio0.51878534355875750.54000717407377594.09% better
promotion-chain ratio0.048012321234682510.0852600128612079877.58% better
barrier-churn ratio0.37199739358226130.4718291855308784426.84% better
geometric mean ratio0.210035851973816440.279025080115022432.85% better

Interpretation:

  • the new pass clearly improved Draton on all three shared OCaml scenarios
  • the biggest gain is still on promotion-chain
  • this is real progress, not a benchmark harness change
  • Draton is still slower than OCaml on all three scenarios in this run

Local spot checks​

The full local scorecard still takes longer because the script also walks the blocked self-host bootstrap path. For quick validation on the same commit, the direct scenario spot checks on the local machine were:

ScenarioDirect run elapsed_ns
young-burst5778731
promotion-chain31835046
barrier-churn15307658

These local numbers are useful for sanity-checking the direction of change, but the GitHub Actions OCaml compare above remains the authoritative same-machine comparison.

Current honest status​

  • Draton is faster than before on the published scorecard.
  • 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.