Skip to content

Conversation

@d-netto
Copy link

@d-netto d-netto commented Nov 20, 2025

Summary

This PR ports the 1.9 GC heuristics code (also used by 1.10.2+RAI) to 1.12.1+RAI. For context: Julia 1.12 uses a variant of MemBalancer with a few guardrails added by this PR.

Correctness Assessment

I was able to build Julia with this patch. I also ran the GCBenchmarks to assess correctness and didn't observe any correctness bugs.

Performance Assessment

I ran the GCBenchmarks with this PR, and compared its performance with our branch of Julia 1.10 (1.10.2+RAI). It's not an apples-to-apples comparison, but it should let us check if GC performance hasn't regressed significantly between these two versions.

I summarized GC time for each benchmark in the table below. All benchmarks were run with a single mutator and GC thread:

----------------------------------------------------------------------------------------------------
| Benchmark                 | GC Time 1.10.2+RAI (ms)  | GC Time 1.12.1+RAI (ms)                  |
|---------------------------|--------------------------|------------------------------------------|
| append.jl                 | 72.2861                  | 94.7843                                   |
| issue-52937.jl            | 618.7                    | 687.381                                   |
| list.jl                   | 1262.47                  | 888.537                                   |
| many_refs.jl              | 844.966                  | 899.122                                   |
| mergesort_parallel.jl     | 935.442                  | 9068.74                                   |
| mm_divide_and_conquer.jl  | 5.45808                  | 8.29879                                   |
| objarray.jl               | 23284.6                  | 14739.2                                   |
| pidigits.jl               | 382.005                  | 468.098                                   |
| pollard.jl                | 134.255                  | 143.216                                   |
| single_ref.jl             | 322.017                  | 364.897                                   |
| strings.jl                | 2185.21                  | 2723.53                                   |
| tree_immutable.jl         | 624.671                  | 539.895                                   |
| tree_mutable.jl           | 1501.02                  | 1549.64                                   |
| tree.jl                   | 384.247                  | 358.776                                   |
----------------------------------------------------------------------------------------------------

@NHDaly
Copy link
Member

NHDaly commented Dec 4, 2025

Per @d-netto:

The PR is good enough to build Julia and run the GCBenchmarks, but I don’t know if it’s stable or performant enough to pass the RAICode tests.
I believe it’s fine to merge and start testing on RAICode, but certainly not fine to deploy to production :).

@github-actions
Copy link

github-actions bot commented Jan 4, 2026

This PR is stale because it has been open 30 days with no activity. Comment or remove stale label, or this PR will be closed in 5 days.

@github-actions github-actions bot added the stale This pull request is inactive label Jan 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

stale This pull request is inactive

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants