-
Notifications
You must be signed in to change notification settings - Fork 6.3k
8369048: GenShen: Defer ShenFreeSet::available() during rebuild #27612
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
base: master
Are you sure you want to change the base?
8369048: GenShen: Defer ShenFreeSet::available() during rebuild #27612
Conversation
Will identify this PR as draft until I complete performance and correctness tests. |
👋 Welcome back kdnilsen! A progress list of the required criteria for merging this PR into |
❗ This change is not yet ready to be integrated. |
I have these results from running Extremem tests on commit 99d0175 ![]() I am going to try an experiment with a different approach. I will remove the synchronization lock and instead will cause the implementation of freeset rebuild to not update available() until after it is done with its work. I think this may address the same problem with less run-time overhead. |
For further context, here are CI pipeline performance summaries for the initial synchronized solution:
and for the "unsynchronized" solution:
The p values for all of these measures are a bit high, based on limited samples of relevant data. The unsynchronized data result is combined with previous measurements taken from the synchronized experiments. |
One other somewhat subjective observation is that the synchronized solution experienced many more "timeout" failures on the CI pipeline than the unsynchronized solution. These timeout failures correlate with stress workloads that exercise the JVM in abnormal/extreme ways. Under these stresses, the unsynchronized mechanism seems to be a bit more robust. |
I'm inclined to prefer the synchronized solution so will revert my most recent three commits. |
This code introduces a new rebuild-freeset lock for purposes of coordinating the freeset rebuild activities and queries as to memory available for allocation in the mutator partition.
This addresses a problem that results if available memory is probed while we are rebuilding the freeset.
Rather than using the existing global heap lock to synchronize these activities, a new more narrowly scoped lock is introduced. This allows the available memory to be probed even when other activities hold the global heap lock for reasons other than rebuilding the freeset, such as when they are allocating memory. It is known that the global heap lock is heavily contended for certain workloads, and using this new lock avoids adding to contention for the global heap lock.
Progress
Issue
Reviewing
Using
git
Checkout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/27612/head:pull/27612
$ git checkout pull/27612
Update a local copy of the PR:
$ git checkout pull/27612
$ git pull https://git.openjdk.org/jdk.git pull/27612/head
Using Skara CLI tools
Checkout this PR locally:
$ git pr checkout 27612
View PR using the GUI difftool:
$ git pr show -t 27612
Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/27612.diff
Using Webrev
Link to Webrev Comment