-
-
Notifications
You must be signed in to change notification settings - Fork 30.4k
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
gh-126195: Use pthread_jit_write_protect_np on macOS #126196
gh-126195: Use pthread_jit_write_protect_np on macOS #126196
Conversation
We should probably do one last benchmarking run on macOS for this PR. Unfortunately our Mac benchmark machine is offline at the moment -- I'm waiting for someone to physically go and see what's up. Hopefully less than a couple days or so. |
JIT tests are failing and I have a partial fix at #126166 (comment). But it doesn't work on Windows because I'm not sure how to detect the JIT is running on there. |
The machine is back up and I'm running the benchmarks now. |
I think the benchmarks are hitting the tests being broken on main -- failing in the |
Merging main to get rid of failures in test_embed |
I've updated the branch to check if errors disappeared... |
When looking this up, it seems that the documented way to do this now is the Probably makes sense to land this now, then explore the other API after. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
One issue with an error path, and a couple of suggestions.
A Python core developer has requested some changes be made to your pull request before we can consider merging it. If you could please address their requests along with any other requests in other reviews from core developers that would be appreciated. Once you have made the requested changes, please leave a comment on this pull request containing the phrase |
BTW, benchmarking results for anyone curious: https://github.com/faster-cpython/benchmarking-public/blob/main/results/bm-20241018-3.14.0a1%2B-f74cd79-JIT/bm-20241018-darwin-arm64-diegorusso-pthread-3.14.0a1%2B-f74cd79-vs-base.svg |
Replace mprotect with pthread_jit_write_protect_np on MacOS Apple Silicon. Improve JIT performance by ~1.4% on this platform.
3d384fa
to
507e662
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks great! Just a couple of cosmetic suggestions, then I'll go ahead and merge.
Thanks for tackling this!
Misc/NEWS.d/next/Core_and_Builtins/2024-10-30-18-16-10.gh-issue-126195.6ezBpr.rst
Outdated
Show resolved
Hide resolved
Python/jit.c
Outdated
int status = mark_executable(memory, total_size); | ||
#ifdef MAP_JIT | ||
pthread_jit_write_protect_np(1); | ||
#endif | ||
if (status) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should work, right? Then we don't need status
:
int status = mark_executable(memory, total_size); | |
#ifdef MAP_JIT | |
pthread_jit_write_protect_np(1); | |
#endif | |
if (status) { | |
#ifdef MAP_JIT | |
pthread_jit_write_protect_np(1); | |
#endif | |
if (mark_executable(memory, total_size)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think this is the same thing. if we place pthread_jit_write_protect_np(1)
in mark_executable
, this would be just after the clear cache. The solution you suggested would place it before the clear cache and It could raise an error as it enable the write protection and then the clear cache.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think it matters which order they occur in (it's not like the cache invalidation tries to execute the code or anything). I just tried it locally and didn't experience any issues.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I tried not to change the previous code logic, but anyway you are right, it works in our internal CI as well. Unless there are other requests, I think this was the last request for change.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks!
Replace mprotect with pthread_jit_write_protect_np on MacOS Apple Silicon.
Improve JIT performance by ~1.4% on this platform.