Pass runtime state instead of repeatedly fetching it from Thread.current #4621
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I ran the benchmarks with YJIT turned on and found that
Thread#[]
was one of the top methods. I thought I might minimize the hits to that by refactoring a bit. In the end, the change was negligible. I think the reason is because, with YJIT running, most of the runtime ends in "misses," which I'm guessing is optimized code that stackprof can't see.Large Result Benchmark
Before, YJIT (9.453 i/s)
Before, No YJIT (4.943 i/s)
After, YJIT (9.558 i/s)
After, No YJIT (5.188 i/s)
Introspection Benchmark
Before, YJIT (6.369 (± 0.0%) i/s)
Before, No YJIT (2.766 (± 0.0%) i/s)
After, YJIT (6.450 (± 0.0%) i/s)
After, No YJIT (2.791 (± 0.0%) i/s)
It seems like introspection even got slower, that's a bit of a surprise to me because I would have expected that case to benefit from fewer needless calls to re-fetch state.I updated the benchmark after removing another write to state and it's looking faster or the same now.