RFR: 8253180: ZGC: Implementation of JEP 376: ZGC: Concurrent Thread-Stack Processing [v13]
Erik Österlund
eosterlund at openjdk.java.net
Fri Oct 9 07:56:39 UTC 2020
> This PR the implementation of "JEP 376: ZGC: Concurrent Thread-Stack Processing" (cf.
> https://openjdk.java.net/jeps/376).
> Basically, this patch modifies the epilog safepoint when returning from a frame (supporting interpreter frames, c1, c2,
> and native wrapper frames), to compare the stack pointer against a thread-local value. This turns return polls into
> more of a swiss army knife that can be used to poll for safepoints, handshakes, but also returns into not yet safe to
> expose frames, denoted by a "stack watermark". ZGC will leave frames (and other thread oops) in a state of a mess in
> the GC checkpoint safepoints, rather than processing all threads and their stacks. Processing is initialized
> automagically when threads wake up for a safepoint, or get poked by a handshake or safepoint. Said initialization
> processes a few (3) frames and other thread oops. The rest - the bulk of the frame processing, is deferred until it is
> actually needed. It is needed when a frame is exposed to either 1) execution (returns or unwinding due to exception
> handling), or 2) stack walker APIs. A hook is then run to go and finish the lazy processing of frames. Mutator and GC
> threads can compete for processing. The processing is therefore performed under a per-thread lock. Note that disarming
> of the poll word (that the returns are comparing against) is only performed by the thread itself. So sliding the
> watermark up will require one runtime call for a thread to note that nothing needs to be done, and then update the poll
> word accordingly. Downgrading the poll word concurrently by other threads was simply not worth the complexity it
> brought (and is only possible on TSO machines). So left that one out.
Erik Österlund has updated the pull request with a new target base due to a merge or a rebase. The pull request now
contains 19 commits:
- Merge branch 'master' into 8253180_conc_stack_scanning
- Review: Andrew CR 1
- Review: David CR 1
- Review: Deal with new assert from mainline
- Merge branch 'master' into 8253180_conc_stack_scanning
- Review: StackWalker hook
- Review: Kim CR 1 and exception handling fix
- Review: Move barrier detach
- Review: Remove assert that has outstayed its welcome
- Merge branch 'master' into 8253180_conc_stack_scanning
- ... and 9 more: https://git.openjdk.java.net/jdk/compare/a2f65190...66070372
-------------
Changes: https://git.openjdk.java.net/jdk/pull/296/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=296&range=12
Stats: 2740 lines in 131 files changed: 2167 ins; 311 del; 262 mod
Patch: https://git.openjdk.java.net/jdk/pull/296.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/296/head:pull/296
PR: https://git.openjdk.java.net/jdk/pull/296
More information about the serviceability-dev
mailing list