8311163: Parallel: Improve large object handling during evacuation#20720
8311163: Parallel: Improve large object handling during evacuation#20720kimbarrett wants to merge 2 commits intoopenjdk:masterfrom
Conversation
|
👋 Welcome back kbarrett! A progress list of the required criteria for merging this PR into |
|
@kimbarrett 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 105 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 |
|
@kimbarrett The following label 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 list. If you would like to change these labels, use the /label pull request command. |
Webrevs
|
|
```
# baseline
[0.002s][info][gc] Using Parallel
[1.252s][info][gc] GC(0) Pause Young (Allocation Failure) 381M->296M(479M) 50.696ms
[1.490s][info][gc] GC(1) Pause Young (Allocation Failure) 422M->422M(674M) 165.177ms
[1.864s][info][gc] GC(2) Pause Young (Allocation Failure) 673M->674M(925M) 212.106ms
[2.243s][info][gc] GC(3) Pause Young (Allocation Failure) 925M->925M(1428M) 229.982ms
|
|
Using |
No, I'm not seeing anything like that. Indeed, I'm seeing strongly the These results are pretty stable across 10-12 runs. Regardless of which variant For GC(0), the new variant is consistently faster, though the fastest old time For GC(1), the two variants are pretty similar. For GC(2), the new variant is consistently more than a factor of 2 faster, and Digging a bit deeper, here are sample times for the Scavenge phase. I haven't found a way to get more detailed timing information there. In I rebuilt the variants with -DTASKQUEUE_STATS and ran with gc+task+stats=trace The number of partial array steals is about the same. So I don't yet know why the change is so beneficial for GC(2). |
|
I did some runs with 1, 2, 4, 6, 12 and 25 parallel workers and I can't see regressions either; the changes seem to be better always. The only difference from your runs is that with |
|
The old code seems to only ever push a single continuation task, while the new code pushes multiple (after the first one), and tries to keep them at |
|
Using another box (AMD), the improvement becomes clear.
With |
| _partial_array_state_allocator->release(_partial_array_state_allocator_index, state); | ||
| } | ||
|
|
||
| void PSPromotionManager::push_objArray(oop old_obj, oop new_obj, size_t obj_size) { |
There was a problem hiding this comment.
I'd originally intended to compute the array_length from this argument, but that's kind of messy so I went
with the simpler approach of just fetching it from one of the objects. I've removed the argument.
|
Thanks for reviews @albertnetymk and @tschatzl |
|
/integrate |
|
Going to push as commit 4f071ce.
Your commit was automatically rebased without conflicts. |
|
@kimbarrett Pushed as commit 4f071ce. 💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored. |
Please review this change to ParallelGC young generation collection's handling
of large objArrays, to now use the infrastructure provided by JDK-8253237 and
JDK-8337709. (That's the same infrastructure used by G1 young/mixed
collections.)
Testing: mach5 tier1-5
Progress
Issue
Reviewers
Reviewing
Using
gitCheckout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/20720/head:pull/20720$ git checkout pull/20720Update a local copy of the PR:
$ git checkout pull/20720$ git pull https://git.openjdk.org/jdk.git pull/20720/headUsing Skara CLI tools
Checkout this PR locally:
$ git pr checkout 20720View PR using the GUI difftool:
$ git pr show -t 20720Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/20720.diff
Webrev
Link to Webrev Comment