Integrated: 8315503: G1: Code root scan causes long GC pauses due to imbalanced iteration

Thomas Schatzl tschatzl at openjdk.org
Mon Oct 2 08:33:16 UTC 2023


On Tue, 19 Sep 2023 08:04:23 GMT, Thomas Schatzl <tschatzl at openjdk.org> wrote:

> Hi all,
> 
>   please review this change that modifies the code root (remembered) set to use the CHT as internal representation.
> 
> This removes lots of locking (inhibiting throughput), provides automatic balancing for the code root scan phase, and (parallel) bulk unregistering of nmethdos during code cache unloading improving performance of various pauses that deal with code root sets.
> 
> With a stress test that frequently loads and unloads 6000 classes and associated methods from them we could previously see the following issues:
> 
> During collection pauses:
> 
> [4179,965s][gc,phases ] GC(273) Evacuate Collection Set: 812,18ms
> [..]
> [4179,965s][gc,phases ] GC(273) Code Root Scan (ms): Min: 0,00, Avg: 59,03, Max: 775,12, Diff: 775,12, Sum: 944,44, Workers: 16
> [...]
> [4179,965s][gc,phases ] GC(273) Termination (ms): Min: 0,03, Avg: 643,90, Max: 690,96, Diff: 690,93, Sum: 10302,47, Workers: 16
> 
> 
> Code root scan now reduces to ~22ms max on average in this case.
> 
> We have recently seen some imbalances in code root scan and long Remark pauses (thankfully not to that extreme) in other real-world applications too:
> 
> [2466.979s][gc,phases      ] GC(131)     Code Root Scan (ms):           Min:  0.0, Avg:  5.7, Max: 46.4, Diff: 46.4, Sum: 57.0, Workers: 10
> 
> 
> Some random comment:
> * the mutex for the CHT had to be decreased in priority by one to not conflict with `CodeCache_lock`. This does not seem to be detrimental otherwise. At the same time, I had to move the locks at `nosafepoint-3` to `nosafepoint-4` as well to keep previous ordering. All mutexes with uses of `nosafepoint` as their rank seem to be good now.
> 
> Testing: tier1-5
> 
> Thanks,
>   Thomas

This pull request has now been integrated.

Changeset: 795e5dcc
Author:    Thomas Schatzl <tschatzl at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/795e5dcc856491031b87a1f2a942681a582673ab
Stats:     382 lines in 13 files changed: 218 ins; 114 del; 50 mod

8315503: G1: Code root scan causes long GC pauses due to imbalanced iteration

Co-authored-by: Ivan Walulya <iwalulya at openjdk.org>
Reviewed-by: iwalulya, ayang

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

PR: https://git.openjdk.org/jdk/pull/15811


More information about the hotspot-gc-dev mailing list