RFR: 8256938: Improve remembered set sampling task scheduling

Albert Mingkun Yang ayang at openjdk.java.net
Wed Nov 25 14:00:03 UTC 2020


On Wed, 25 Nov 2020 09:37:25 GMT, Stefan Johansson <sjohanss at openjdk.org> wrote:

> Please review this change to the remembered set sampling task scheduling.
> 
> The sampling tasks joins the suspendible thread set (STS) and if it needs to yield during the sampling it aborts and reschedules. This is the expected behavior and will lead to the sampling happening roughly G1ConcRefinementServiceIntervalMillis after the pause ended. But in the case where the task is started during a GC (can happen since the whole service thread isn't joined to the STS) the sampling will start right after the pause has finished. This enhancement changes this by checking when the last pause occurred and reschedules the task to take place G1ConcRefinementServiceIntervalMillis after the GC ended.
> 
> **Testing**
> Tier 1-3 and manual verification looking at logs.

Changes requested by ayang (Author).

src/hotspot/share/gc/g1/g1RemSet.cpp line 593:

> 591:       schedule(reschedule_delay_ms());
> 592:       return;
> 593:     }

I would prefer not having `should_reschedule` and reuse the return value of `reschedule_delay_ms`, but up to you.

delay_ms = reschedule_delay_ms();
// only reschedule when ...
if (delay_ms > 1) {
  schedule(delay_ms);
  return;
}
Second point, why 1 in `reschedule_delay_ms() > 1`, but not 0?

-------------

PR: https://git.openjdk.java.net/jdk/pull/1428



More information about the hotspot-gc-dev mailing list