[11u] RFR: 8254185: Fix Code cache sweeper heuristics for JDK 11
Tobias Hartmann
tobias.hartmann at oracle.com
Mon Oct 12 12:29:11 UTC 2020
Hi Nils,
looks good to me.
Best regards,
Tobias
On 09.10.20 16:34, Nils Eliasson wrote:
> Hi,
>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8254185
> Webrev: http://cr.openjdk.java.net/~neliasso/8254185/webrev.01/
>
> This fix is a replacement for JDK-8244660 that I consider to risky to back port.
>
> This issue can't be seen unless JDK-8254185 is applied. That bug causes the sweeper to trigger on
> every code cache allocation. When JDK-8254185 is applied then no sweeps can be observed at all.
>
> The main issue is that the sweeper thread is never woken. And if it isn't woken, it can't check the
> counters to see if it is time to sweep.
>
> This fix include two changes:
>
> 1) Notifying waiters on the codecache_lock when a threshold for reclaimed nmethods has been reached.
> This fix is enough on its own.
>
> In JDK 15 I introduced a new lock for the sweeper because a adding a notify in
> NMethodSweeper::possibly_enable_sweeper conflicted with the compiledMethod_lock in add_osr_method.
> That lock was added when deoptimization was converted to using handshakes. So in 11 it is still ok
> to use the codecache_lock.
>
> 2) Moving the updates of _total_nof_code_cache_sweeps and _last_sweep inside block that is only run
> when doing a sweep.
> This change just makes the counters update as expected. _last_sweep is used to trigger sweeps after
> a number of safepoints. This is counted by _time_counter. But since updates of _time_counter doesn't
> wake the sweeper - it still doesn't work.
>
> In JDK 15 I removed all of this code since we can't even rely on safepoints happening at all. I
> don't want to introduce any bugs in JDK 11 by mistake - so I am leaving it as it is.
>
> Please review.
>
> Best regards,
> Nils Eliasson
>
More information about the jdk-updates-dev
mailing list