Skip to content

T1211: callgrind-only perf CI with JVM vs clojure-rs comparison - #37

Merged
m-hu merged 4 commits into
masterfrom
T1211-callgrind-compare-clojure-rs
Nov 2, 2026
Merged

m-hu merged 4 commits into
masterfrom
T1211-callgrind-compare-clojure-rs

Conversation

@m-hu

@m-hu m-hu commented Nov 2, 2026

Copy link
Copy Markdown
Collaborator

Consolidates perf CI onto the deterministic callgrind sweep and adds the Rust port as a second measured runtime, so callgrind_instructions and callgrind_allocated_bytes for JVM Clojure vs clojure-rs overlay per benchmark via Bencher testbeds.

What changed

  • Workflow (.github/workflows/test.yml): drops the perf/report jobs; perf-callgrind is now the only perf signal at 8 shards x {jvm, clojure-rs}; report-callgrind merges per runtime. clojure-rs builds interpreter-only (--no-default-features, no LLVM) from pinned CLOJURE_RS_SHA; testbeds derive as ubuntu-latest-<runtime>.
  • snip: the callgrind phase branches on the resolved argv0 — JVM keeps -Xint+EpsilonGC, native legs take plain callgrind plus one LD_PRELOAD allocation-counting run (embedded C shim). Classpath resolution is tolerated when the template has no {cp} hole; provenance gains runtime_version; ToolVersion 4 -> 5.
  • README: documents the single-signal pipeline and the pin-bump process.

Spec: docs/t1211/specification.md. Task: https://orsay.hhh.pa/T1211

Validation

  • go test ./... green; snip measure --self-test: 0 failed (incl. new alloc-shim parser checks); snip ssa: 7 passed with real jars.
  • Off-tree end-to-end probe with GNU time + a fake native runner: native leg exits 0 with correct provenance; JVM leg without jars still fails fast on the classpath gate.
  • Shim C compiles warning-free (-Wall -Wextra); live LD_PRELOAD test runs on Linux (skipped on macOS).

Merge prerequisites (admin, at merge time)

  • Master branch protection still requires test, perf (0..3), report (jvm): replace the perf/report contexts with the new perf-callgrind (...) / report-callgrind (...) check names from this PR.
  • Optionally retire the master allocated_bytes Bencher threshold once reporting stops.

m-hu added 3 commits November 2, 2026 12:36
Ref T1211

AI-Tool: Muse Code 1.4.14-R7309.1 (Meta Muse Spark)
Branch the callgrind phase on the resolved argv0: JVM legs keep the -Xint+EpsilonGC recipe, native legs take plain callgrind plus one LD_PRELOAD allocation-counting run (embedded C shim, cumulative malloc-request total). Classpath resolution is tolerated when the template has no {cp} hole; provenance gains runtime_version and ToolVersion bumps to 5.

Ref T1211

AI-Tool: Muse Code 1.4.14-R7309.1 (Meta Muse Spark)
Drop the perf/report jobs; perf-callgrind becomes the only perf signal at 8 shards x {jvm, clojure-rs}, with the Rust port built interpreter-only from a pinned SHA and testbeds derived as ubuntu-latest-<runtime>. report-callgrind merges per runtime; README documents the single-signal pipeline.

Ref T1211

AI-Tool: Muse Code 1.4.14-R7309.1 (Meta Muse Spark)
@github-actions

github-actions Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

🐰 Bencher Report

Projectclojure-code-snippet
BranchT1211-callgrind-compare-clojure-rs
Commit896c1e6
ReportTestbedAdapterStatus
1ubuntu-latest-clojure-rsJSON✅ No Alerts
2ubuntu-latest-jvmJSON✅ No Alerts

⚠️ WARNING: Truncated view!

The full continuous benchmarking report exceeds the maximum length allowed on this platform.

Move CLOJURE_RS_SHA from 0dbb78a to 7e13b3e (upstream #209: FxHash registries, lock-free env frames, Arc-shared AST; 2-20x faster). Validated locally first: new binary builds --no-default-features and reproduces old outputs byte-for-byte on startup, suffix-array and disjoint-set probes.

Ref T1211

AI-Tool: Muse Code 1.4.14-R7309.1 (Meta Muse Spark)
@m-hu
m-hu merged commit 2b01c19 into master Nov 2, 2026
25 checks passed
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