RFR: 8080106: Refactor setup of parallel GC threads

Stefan Karlsson stefan.karlsson at oracle.com
Wed May 20 11:50:19 UTC 2015


Hi all,

Here are the fixes I made after the code review comments from Jon and Kim:

http://cr.openjdk.java.net/~stefank/8080110/webrev.01.delta/
http://cr.openjdk.java.net/~stefank/8080110/webrev.01/

http://cr.openjdk.java.net/~stefank/8080112/webrev.01.delta/
http://cr.openjdk.java.net/~stefank/8080112/webrev.01/

http://cr.openjdk.java.net/~stefank/8080113/webrev.01.delta/
http://cr.openjdk.java.net/~stefank/8080113/webrev.01/

Entire patch:
http://cr.openjdk.java.net/~stefank/8080106/webrev.01/

Thanks,
StefanK


On 2015-05-13 15:17, Stefan Karlsson wrote:
> Hi all,
>
> Please review these patches to unify the ways we specify the number of 
> used worker threads. The main goal for these patches is to get rid of 
> CollectedHeap::set_par_threads() and CollectedHeap::n_par_threads().
>
> The RFE has been split into multiple sub-tasks:
>  8080109: Use single-threaded code in 
> Threads::possibly_parallel_oops_do when running with only one worker 
> thread
>  8080110: Remove usage of CollectedHeap::n_par_threads() from root 
> processing
>  8080111: Remove SubTaskDone::_n_threads
>  8080112: Replace and remove the last usages of 
> CollectedHeap::n_par_threads()
>  8080113: Remove CollectedHeap::set_par_threads()
>
> See the description below for each individual patch:
>
> ---
> http://cr.openjdk.java.net/~stefank/8080109/webrev.00
> 8080109: Use single-threaded code in 
> Threads::possibly_parallel_oops_do when running with only one worker 
> thread
>
> Today, the root processing code differentiates between two types of 
> single-threaded executions:
>
> 1) n_par_threads() == 0, used from Serial GC and other code paths that 
> executes the root processing from the VM Thread.
> 2) n_par_threads() == 1, used from non-Serial GCs when the 
> root_processing is executed by one GC worker thread.
>
> Today, the only code difference is that the latter will use cmpxchg to 
> claim the threads in Threads::possibly_parallel_oops_do.
>
> I propose that we use the same code for both values of 
> n_par_threads(), and only use the cmpxchg version if we are running 
> with more than one worker thread.
>
> ---
> http://cr.openjdk.java.net/~stefank/8080110/webrev.00
> 8080110: Remove usage of CollectedHeap::n_par_threads() from root 
> processing
>
> Remove the explicit usages of CollectedHeap::n_par_threads() from the 
> root processing code.
>
> The proposal is to pass the number of worker threads via the 
> StrongRootsScope object. The StrongRootsScope object is already setup 
> from single-threaded code where we know how many worker threads are 
> going to be used.
>
> ---
> http://cr.openjdk.java.net/~stefank/8080111/webrev.00
> 8080111: Remove SubTaskDone::_n_threads
>
> Remove the need to keep track of the number of worker threads 
> currently executing in the sub-tasks of the root processing. Instead 
> use the information that is already stored in StrongRootsScope.
>
> ---
> http://cr.openjdk.java.net/~stefank/8080112/webrev.00
> 8080112: Replace and remove the last usages of 
> CollectedHeap::n_par_threads()
>
> Replace and remove the last usages of CollectedHeap::n_par_threads().
>
> The number of used threads are passed down as arguments to the 
> functions that need to know how many threads are currently executing 
> in parallel.
>
> ---
> http://cr.openjdk.java.net/~stefank/8080113/webrev.00
> 8080113: Remove CollectedHeap::set_par_threads()
>
> Remove all the calls to the set_par_threads() functions.
> ---
>
> The combined webrev can be found at:
> http://cr.openjdk.java.net/~stefank/8080106/webrev.00/
>
> Tested with JPRT and gc-test-suite
>
> Thanks,
> StefanK




More information about the hotspot-gc-dev mailing list