Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PROF-8074] Restore support for Ruby 3.3 #3167

Merged
merged 7 commits into from
Sep 29, 2023

Commits on Sep 28, 2023

  1. Revert "Disable profiler on Ruby 3.3 due to incompatibility"

    This reverts commit 9e812f0.
    ivoanjo committed Sep 28, 2023
    Configuration menu
    Copy the full SHA
    34073b5 View commit details
    Browse the repository at this point in the history
  2. Revert "Don't try to compile profiler on Ruby 3.3"

    This reverts commit 06c2ac6.
    ivoanjo committed Sep 28, 2023
    Configuration menu
    Copy the full SHA
    5d096b0 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    796b651 View commit details
    Browse the repository at this point in the history
  4. [PROF-8074] Restore support for Ruby 3.3

    **What does this PR do?**
    
    Back in #3053, a customer reported that profiling was not working
    on ruby-head (for Ruby 3.3).
    
    At the time, I tracked it down to two issues:
    1. A bunch of headers had changed, and thus we needed a new
       release of `debase-ruby_core_source` to include them
    2. We were getting errors when loading the profiler due to the
       `ruby_current_ec` VM symbol no longer being available.
    
    At the time, I chose to disable profiling on Ruby 3.3 (#3054) until
    we could tackle these two items.
    
    Item 1. was fixed in #3163, that pulls in a new release of
    `debase-ruby_core_source` that includes the 3.3-preview2 headers.
    
    This PR fixes item 2. and re-enables profiling on Ruby 3.3
    (and thus reverts #3054).
    
    **Motivation:**
    
    Make sure we're in good shape for the Ruby 3.3 final release in
    December.
    
    **Additional Notes:**
    
    We didn't use the magic `ruby_current_ec` VM symbol directly.
    Instead, we were using `GET_RACTOR()` and `GET_EC()` which call
    a few methods that are defined as `inline` in `vm_core.h`.
    
    Those methods all relied on `ruby_current_ec`, and thus hiding
    that symbol made them break.
    
    As an alternative, we can get to the same objects by starting
    with the current thread, and navigating the object graph a bit.
    
    The `rb_thread_current()` also relies on `ruby_current_ec` but
    crucially **is not inline** and is actually a public API of the VM,
    so that one kept working.
    
    I hesitated on if we should use `rb_thread_current()` on all
    Rubies with Ractors, or if we should keep the fast path for
    3.0 to 3.2. I ended up deciding to keep the fast path since
    it was quite easy to do, but in the future we could instead
    choose to simplify this whole thing.
    
    P.s.: This is one of those PRs where a lot of work went into
    a handful of unimpressive lines of code 😅 .
    
    **How to test the change?**
    
    Validate that CI is passing on Ruby 3.3!
    
    Fixes #3053
    ivoanjo committed Sep 28, 2023
    Configuration menu
    Copy the full SHA
    f052704 View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    d508be8 View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    6350e08 View commit details
    Browse the repository at this point in the history

Commits on Sep 29, 2023

  1. Configuration menu
    Copy the full SHA
    f1e00ec View commit details
    Browse the repository at this point in the history