Integrated: 8253971: ZGC: Flush mark stacks after processing concurrent roots
Per Liden
pliden at openjdk.java.net
Mon Oct 5 13:22:45 UTC 2020
On Sat, 3 Oct 2020 13:02:39 GMT, Per Liden <pliden at openjdk.org> wrote:
> I looked into why almost all mark cycles see non-zero "mark completions". In other words, we almost always have some
> amount of mark work left to handle in the mark end pause. It turns out that worker threads don't flush their mark
> stacks in ZMarkConcurrentRootsTask::work(), which means they can hide work (in their thread local mark stacks) until
> those stacks are finally flushed out in ZMark::try_end(). The reason work can be hidden is that the set of worker
> threads executing ZMarkConcurrentRootsTask is not necessarily the same set of worker threads executing ZMarkTask. As a
> result, the mark end pause often becomes longer than it otherwise would have. After fixing this, I did some tests with
> Dacapo, which shows the following improvement: Before: Mark End Pause (avg/max): 0.391 / 1.142 ms After: Mark End
> Pause (avg/max): 0.130 / 0.294 ms
This pull request has now been integrated.
Changeset: 65cab55c
Author: Per Liden <pliden at openjdk.org>
URL: https://git.openjdk.java.net/jdk/commit/65cab55c
Stats: 8 lines in 1 file changed: 8 ins; 0 del; 0 mod
8253971: ZGC: Flush mark stacks after processing concurrent roots
Reviewed-by: ayang, eosterlund
-------------
PR: https://git.openjdk.java.net/jdk/pull/495
More information about the hotspot-gc-dev
mailing list