RFR: 8322630: Remove ICStubs and related safepoints
Fei Yang
fyang at openjdk.org
Mon Jan 29 04:32:37 UTC 2024
On Wed, 24 Jan 2024 18:29:22 GMT, Erik Österlund <eosterlund at openjdk.org> wrote:
>> ICStubs solve an atomicity problem when setting both the destination and data of an inline cache. Unfortunately, it also leads to occasional safepoint carpets when multiple threads need to ICRefill the stubs at the same time, and spurious GuaranteedSafepointInterval "Cleanup" safepoints every second. This patch changes inline caches to not change the data part at all during the nmethod life cycle, hence removing the need for ICStubs.
>>
>> The new scheme is less stateful. Instead of adding and removing callsite metadata back and forth when transitioning inline cache states, it installs all state any shape of call will ever need at resolution time in a struct that I call CompiledICData. This reduces inline cache state changes to simply changing the destination of the call, and it doesn't really matter what state transitions to what other state.
>>
>> With this patch, we get rid of ICStub and ICBuffer classes and the related ICRefill and almost all Cleanup safepoints in practice. It also makes the inline cache code much simpler.
>>
>> I have tested the changes from tier1-7, and run through full aurora performance tests.
>
> Thank you Thomas for having a look.
>
> I think that fixing the issue in G1 alone takes us pretty far. If you really care about latency in your non-small app that unloads tens of thousands of classes at a time, then it seems just plain weird to sit there with Serial or Parallel complaining about latencies.
> I believe this was the last major piece in task we started over 5y ago of removing runtime safepoint and latencies. Or as some might say, we finally have a runtime good enough to run ZGC ;) (and Shenandoah). Thank you @fisk for completing this milestone!
>
> Risc-v passes my testing. (vf2 (t1) + qemu (t1-2), ran twice, once on v3 branch and once this pr)
>
> @RealFYang can you please review RV changes?
@robehn @fisk : I went through the RV changes and I saw small code cleanup could be done.
[rv-extra-cleanup.diff.txt](https://github.com/openjdk/jdk/files/14079614/rv-extra-cleanup.diff.txt)
BTW: I also performed tier1-3 and hotspot:tier4 tests on hifive unmatched board, result is good.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/17495#issuecomment-1913942094
More information about the shenandoah-dev
mailing list