-
Notifications
You must be signed in to change notification settings - Fork 6.2k
8350314: Shenandoah: Capture thread state sync times in GC timings #23759
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
Conversation
|
👋 Welcome back xpeng! A progress list of the required criteria for merging this PR into |
|
@pengxiaolong 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 46 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. As you do not have Committer status in this project an existing Committer must agree to sponsor your change. Possible candidates are the reviewers of this PR (@earthling-amzn, @ysramakrishna, @shipilev) but any other Committer may sponsor as well. ➡️ To flag this PR as ready for integration with the above commit message, type |
|
@pengxiaolong The following labels will be automatically applied to this pull request:
When this pull request is ready to be reviewed, an "RFR" email will be sent to the corresponding mailing lists. If you would like to change these labels, use the /label pull request command. |
Webrevs
|
earthling-amzn
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.
Did we really see propagate_gc_state_to_all_threads taking a long time? Or was it exiting the safepoint (i.e., after the state had been propagated) that took a long time?
No, we discussed it last week in Slack channel, it was the |
earthling-amzn
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.
Propagating gc state for init update refs is vestigial.
earthling-amzn
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.
Thank you for the changes.
|
Changes are fine. This jumped out in yr sample output: which seemed kinda interesting. I assume this is just a consequence of the very little work (and extremely brief time in this phase) here, and can be ignored in this sample output from likely a toy GC, or one where you may have artificially boosted the number of worker threads. Still I thought I'd ask in case you've seen this with bigger timings or more work in any of these phases with low fractional speed-ups. |
ysramakrishna
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.
LGTM
| Handshake::execute(&prepare_for_update_refs); | ||
|
|
||
| _update_refs_iterator.reset(); | ||
| _gc_state_changed = false; |
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.
Sorry, what is this and why do we need it. When was it set?
In set_update_refs_in_progress() ?
May be we need a better abstraction to toggle the state_changed boolean. This seems error prone.
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.
You are right, we don't need to set _gc_state_changed to false here, because concurrent_prepare_for_update_refs calls ShenandoahHeap::set_gc_state_concurrent to set gc state, ShenandoahHeap::set_gc_state_concurrent doesn't change _gc_state_changed to true, hence there is no need to reset it false here.
I'm not sure how parallelism is calculated, but I think it is caused by the test I was running, the test is very simple and there are only small number of live objects after mark. |
…e timings of gc state propagation
shipilev
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.
I am good with this, thanks. Only one minor nit remains.
|
Thanks all for the reviews! /integrate |
|
@pengxiaolong |
Yes that explains it, thanks. (PS: Parallelism (or really parallel speed-up) is calculated as the ratio of total thread virtual time to the wall-clock (elapsed) time, IIRC. As you noted work in this specific workload is too small for the parallel task overhead, as indicated by the micro-seconds worth of time.) |
|
/sponsor |
|
Going to push as commit 01bd7e4.
Your commit was automatically rebased without conflicts. |
|
@shipilev @pengxiaolong Pushed as commit 01bd7e4. 💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored. |
The change is to improve the observability of Shenandoah GC, basically there are three changes for Shenandoah GC timings in this PR:
propagate_gc_state_to_all_threadsfrom "init_update_refs", which handles gc state in handshake already.With the change, the new GC timing log will be like:
Test
Progress
Issue
Reviewers
Reviewing
Using
gitCheckout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/23759/head:pull/23759$ git checkout pull/23759Update a local copy of the PR:
$ git checkout pull/23759$ git pull https://git.openjdk.org/jdk.git pull/23759/headUsing Skara CLI tools
Checkout this PR locally:
$ git pr checkout 23759View PR using the GUI difftool:
$ git pr show -t 23759Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/23759.diff
Using Webrev
Link to Webrev Comment