-
Notifications
You must be signed in to change notification settings - Fork 6.2k
8371702: ZGC: NUMA-Affinity for Worker Threads in the Relocation Phase #28262
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
8371702: ZGC: NUMA-Affinity for Worker Threads in the Relocation Phase #28262
Conversation
|
👋 Welcome back jsikstro! A progress list of the required criteria for merging this PR into |
|
@jsikstro This change now passes all automated pre-integration checks. ℹ️ This project also has non-automated pre-integration requirements. Please see the file CONTRIBUTING.md for details. After integration, the commit message for the final commit will be: You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed. At the time when this comment was updated there had been 54 new commits pushed to the
As there are no conflicts, your changes will automatically be rebased on top of these commits when integrating. If you prefer to avoid this automatic rebasing, please check the documentation for the /integrate command for further details. ➡️ To integrate this PR with the above commit message to the |
Webrevs
|
|
/contributor add @xmas92 |
|
@jsikstro |
|
The parent pull request that this pull request depends on has now been integrated and the target branch of this pull request has been updated. This means that changes from the dependent pull request can start to show up as belonging to this pull request, which may be confusing for reviewers. To remedy this situation, simply merge the latest changes from the new target branch into this pull request by running commands similar to these in the local repository for your personal fork: git checkout JDK-8371702_zgc_narc_regression_fix
git fetch https://git.openjdk.org/jdk.git master
git merge FETCH_HEAD
# if there are conflicts, follow the instructions given by git merge
git commit -m "Merge master"
git push |
|
@jsikstro this pull request can not be integrated into git checkout JDK-8371702_zgc_narc_regression_fix
git fetch https://git.openjdk.org/jdk.git master
git merge FETCH_HEAD
# resolve conflicts and follow the instructions given by git merge
git commit -m "Merge master"
git push |
|
|
This reverts commit e5d0d9e.
|
After some more performance testing, I have decided to revert back to my original patch since we don't get as reliably good result with the changes that Axel proposed. I think Axel's changes are good, but there's something that is not obvious that is affecting performance negatively inside the loop that takes care of forwardings. To get this in JDK26 without more struggle I think we should take this as is and follow-up in a future enhancement to make the code in this are nicer. |
xmas92
left a comment
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 good. Just a style comment.
fisk
left a comment
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 good.
|
Going to push as commit de546d0.
Your commit was automatically rebased without conflicts. |
Hello,
The main goal of this PR is to solve a performance regression in relatively small environments on a NUMA machine. See the associated issue for a more detailed explanation on regression itself.
I propose we add functionality to set the affinity of worker threads in the Relocation Phase of ZGC so that the worker threads are always accessing NUMA-local memory when relocating objects. As soon as a worker threads is about to start relocating a new forwarding entry (or just page), it makes sure that it has the appropriate affinity set. At the most, each worker thread will set its own affinity the same number of times as there are NUMA nodes on the system. When the threads are about to exit the Relocation Phase (i.e. by completing
ZRelocateTask), they "strip" their affinity so that they are allowed to run on any CPU that they were originally allowed to run on.I've done significant performance testing, which solves the observed regression and gives an additional performance boost in the same environments. I have not been able to observe similar boosts in performance on much larger environments (>=70 CPUs and >32GB memory) and also no regressions.
Progress
Issue
Reviewers
Contributors
<aboldtch@openjdk.org>Reviewing
Using
gitCheckout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/28262/head:pull/28262$ git checkout pull/28262Update a local copy of the PR:
$ git checkout pull/28262$ git pull https://git.openjdk.org/jdk.git pull/28262/headUsing Skara CLI tools
Checkout this PR locally:
$ git pr checkout 28262View PR using the GUI difftool:
$ git pr show -t 28262Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/28262.diff
Using Webrev
Link to Webrev Comment