[16] RFR: 8247319: Remove on-stack nmethod hotness counter sampling from safepoints
Erik Österlund
erik.osterlund at oracle.com
Fri Jun 12 07:29:16 UTC 2020
Hi,
The sweeper is moving away from using safepoints for its heuristics. It
used to count safepoints to figure out when to sweep, but no longer does
that. At the same time, we have for a while been removing more and more
safepoints. Safepoints are becoming increasingly rare events, dominated
by when we need to GC (GuaranteedSafepointInterval is going to
disappear). The frequency of how often we need to GC does not have an
obvious connection to how often we need to sweep the code cache... any more.
What still remains from the safepoint-based heuristics is the nmethod
hotness counter sampling that is performed in safepoint cleanup. I would
like to get rid of this.
The rationale is that the use of hotness counters is kicking in when the
code cache is starting to fill up quite a bit, and there is a need to
kill off nmethods heuristically, rather than because they are invalid.
But when the code cache fills up, we sweep more and more aggressively.
And during these sweeper cycles, we perform nmethod marking using
handshakes. That operation also fills in hotness counters for all
sampled nmethods.
In other words, when there is need for acting on the hotness counters,
we are in a state where we may be getting more nmethod hotness counter
sample information from the sweeping cycles than we are from safepoint
sampling. Conversely, when code cache pressure is high and we need more
samples, we might end up getting very few from safepoint based sampling
(because the heap is large). The correlation between safepoint frequency
and code cache pressure is simply not there any more. And for us to walk
all stacks in the system in every single safepoint (which for ZGC is
starting to dominate pauses when I remove our stack sampling from
safepoints), there better be a really good reason to do this sampling in
safepoints. And there simply isn't. So I propose we delete it, in favour
of using the hotness counter samples we get from the sweeping cycles
instead, that are indeed proportional in frequency, to the code cache
pressure.
Bug:
https://bugs.openjdk.java.net/browse/JDK-8247319
Webrev:
http://cr.openjdk.java.net/~eosterlund/8247319/webrev.00/
Thanks,
/Erik
More information about the hotspot-dev
mailing list