-
Notifications
You must be signed in to change notification settings - Fork 6.1k
8370041: GenShen: Filter young pointers from thread local SATB buffers when only marking old #27983
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
Open
earthling-amzn
wants to merge
21
commits into
openjdk:master
Choose a base branch
from
earthling-amzn:piggyback-satb-flush-on-update-roots
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+121
−211
Open
Changes from all commits
Commits
Show all changes
21 commits
Select commit
Hold shift + click to select a range
8493d54
Filter out young pointers from thread local SATB buffers if young is …
earthling-amzn ac36718
Temporarily increase log level
earthling-amzn bdbd8e3
Remove instrumentation
earthling-amzn 039a08d
Comment out all calls to transfer old pointers out of SATB
earthling-amzn bbf207c
Need to flush thread local SATB buffers before young marking
earthling-amzn 1301df4
Avoid checking gc-state every time we filter a SATB buffer
earthling-amzn eb65003
Stop processing completed SATB buffers, they should no longer have ba…
earthling-amzn 05aa120
Manage satb filter at safepoint exit
earthling-amzn 004a954
Remove unused code
earthling-amzn 03a4dad
Flush old satb after update references
earthling-amzn e4f4f8a
Try piggybacking satb flush on update roots
earthling-amzn 584b532
Oops, move inline definition out of ifdef ASSERT
earthling-amzn bafd55d
Fix assertion
earthling-amzn feeeaaf
Merge remote-tracking branch 'jdk/master' into piggyback-satb-flush-o…
earthling-amzn f47e976
Cleanup and comments
earthling-amzn 72d89d4
Only flush satb once during degenerated cycle
earthling-amzn 48d4941
Remove duplicate satb flush closure
earthling-amzn ec58b72
Fix typo in comment
earthling-amzn ef21a81
Flush SATB buffers upon entering degenerated cycle when old marking i…
earthling-amzn 01f0f97
Merge remote-tracking branch 'jdk/master' into piggyback-satb-flush-o…
earthling-amzn 4bd602d
Merge remote-tracking branch 'jdk/master' into piggyback-satb-flush-o…
earthling-amzn File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
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
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
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
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
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
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
Oops, something went wrong.
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.
Uh oh!
There was an error while loading. Please reload this page.
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.
Might be worth mentioning that there may be some additional analysis and code required when we use the forwarding table to recycle cset regions during evacuation and/or updating. If one of these regions becomes old before the SATB buffers have been flushed, then a young cset pointer that lingers in a SATB buffer will "all of a sudden" look like a valid old pointer and will not be purged from the SATB buffer. When we subsequently scan the "object" referenced by this obsolete pointer, we are likely to find "garbage memory", possibly resulting in a crash.
I am thinking that an initial fix might be to do this flushing at init-update-refs instead of at final update refs, and to not recycle cset regions until evacuation is all done. Is there a different handshake there that we might piggyback on?
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.
Hmm, that's a good point about recycling regions concurrently. I don't think we can flush before
init-update-refsbecause forwarded pointers still exist and the SATB barrier doesn't try to resolve them. That is to say, "bad" pointers can be created throughout the update-refs phase.Even in the (hypothetical) scenario with a forwarding table, a region would only become
oldthrough an in-place-promotion (in which case, it will never have been recycled) or we will be doing a mixed evacuation. If we are running a mixed evacuation, we will already have finished marking old.