Loader optimizations#11238
Open
josevalim wants to merge 2 commits into
Open
Conversation
Replace the per-label hash map used during JIT code loading with a vector indexed by label number. The loader allocates the label table once after the label count is known, making repeated label address lookups direct indexed loads instead of hash lookups while preserving the existing label-number validation. Benchmark: generated 100 modules with 100 exported functions each and timed 80 iterations of purging and loading all modules in order via code:load_abs/1 on aarch64-apple-darwin24.6.0. Baseline median/avg/p90: 41,211 / 41,633 / 44,106 us. Candidate median/avg/p90: 37,577 / 38,243 / 40,859 us.
JIT metadata line entries already reference source files by index in the module line table. Preserve that shape in the intermediate JIT metadata representation by storing one converted file table alongside the ranges, and have each LineData entry keep the file index. This avoids converting and copying the same filename into every line entry while keeping the final expansion at the GDB/perf metadata writers, where those external formats require filename bytes. Benchmark: generated 100 modules with 100 exported functions each and timed 80 iterations of purging and loading all modules in order via code:load_abs/1 on aarch64-apple-darwin24.6.0. Baseline median/avg/p90: 37,577 / 38,243 / 40,859 us. Candidate median/avg/p90: 36,122 / 36,664 / 39,144 us.
Contributor
CT Test Results 3 files 136 suites 50m 19s ⏱️ For more details on these failures, see this check. Results for commit 2a016a5. ♻️ This comment has been updated with latest results. To speed up review, make sure that you have read Contributing to Erlang/OTP and that all checks pass. See the TESTING and DEVELOPMENT HowTo guides for details about how to run test locally. Artifacts// Erlang/OTP Github Action Bot |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
This pull request includes two commits that optimize code loading. I recommend viewing the commits in isolation, I can also submit each as a separate pull request if preferred.
Disclaimer: @hugobarauna used Claude Fable to find possible improvements. I have then separately verified the improvements on another machine and refactored them into two isolated commits.
The initial exploration also surfaced a significant improvement on code staging but I don't feel confident judging that one.