RFR: Disable worker scaling during reference processing in traversal GC

Roman Kennke roman at kennke.org
Sat Aug 4 11:09:57 UTC 2018


> This is not an optimal fix, but we need it to avoid hanging problem with
> traversal GC.
> 
> Currently, we have an EvacOOMScope to guard against possible
> single-threaded reference processing. Unfortunately, if the processing
> is multiple-threaded (by workers)this scope can prevent evac-oom from
> progressing.
> For example, if a worker encounters evac-oom, it will stuck in
> wait_for_no_evac_threads() method, caused by this additional scope,
> which prevents worker's termination, that keeps above evac-oom scope alive.
> 
> This (probably temporary) fix is to disable worker scaling, and only
> enables single-threaded evac-oom scope if reference processing is
> actually single-threaded.

Disabling worker-scaling seems bad.

A better fix would be to execute 1-threaded processing in a single
worker instead of the VMThread. Maybe we can change RP to (optionally)
do that? It would also simplify the code by avoiding special cases 1 vs.
multi-threading.

> Webrev:
> http://cr.openjdk.java.net/~zgu/shenandoah/disable_rp_processing_worker_scale/webrev.00/

Please push this (hangs are less acceptable than suboptimal code), but
also please work on a better fix.

Roman



More information about the shenandoah-dev mailing list