RFR: 8300926: Several startup regressions ~6-70% in 21-b6 all platforms
Robbin Ehn
rehn at openjdk.org
Thu Feb 16 12:51:24 UTC 2023
Hi all, please consider.
The original issue was when thread 1 asked to deopt nmethod set X and thread 2 asked for the same or a subset of X.
All method will already be marked, but the actual deoptimizing, not entrant, patching PC on stacks and patching post call nops, was not done yet. Which meant thread 2 could 'pass' thread 1.
Most places did deopt under Compile_lock, thus this is not an issue, but WB and clearCallSiteContext do not.
Since a handshakes may take long before completion and Compile_lock is used for so much more than deopts,
the fix in https://bugs.openjdk.org/browse/JDK-8299074 instead always emitted a handshake even when everything was already marked.
This turnout to be problematic in the startup, for example the number of deopt handshakes in jetty dry run startup went from 5 to 39 handshakes.
This fix first adds a barrier for which you do not pass until the requested deopts have happened and it coalesces the handshakes.
Secondly it moves handshakes part out of the Compile_lock where it is possible.
Which means we fix the performance bug and we reduce the contention on Compile_lock, meaning higher throughput in compiler and things such as class-loading.
It passes t1-t7 with flying colours! t8 still not completed and I'm redoing some testing due to last minute simplifications.
Thanks, Robbin
-------------
Commit messages:
- Fixed WS
- Deopt scopes
Changes: https://git.openjdk.org/jdk/pull/12585/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=12585&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8300926
Stats: 380 lines in 24 files changed: 192 ins; 91 del; 97 mod
Patch: https://git.openjdk.org/jdk/pull/12585.diff
Fetch: git fetch https://git.openjdk.org/jdk pull/12585/head:pull/12585
PR: https://git.openjdk.org/jdk/pull/12585
More information about the serviceability-dev
mailing list