RFR: Cleanup UseShenandoahOWST blocks

Zhengyu Gu zgu at redhat.com
Mon Jul 9 13:27:15 UTC 2018



On 07/09/2018 08:29 AM, Roman Kennke wrote:
>>
>> On 07/09/2018 05:12 AM, Roman Kennke wrote:
>>> Looks good, thank you!
>>>
>>> We should soon consider to go for OWST by default. It's baked long
>>> enough. The only thing to wait for is current upstreaming efforts by
>>> Zhengyu, at which point we can just use upstreams TQ stuff.
>>
>> Looks like that Thomas Schatzl is playing it. He mentioned that he ran
>> into unexplainable hung with source code we probably don't know about.
> 
> Hmm. That might be related to TQs stuff, or maybe not. 1. I've seen an
> upstream bug (but don't remember what it was) about a freeze. 
Humm ... let me search up ...

2. What
> you're upstreaming is not what we have in Shenandoah, right?
I am upstreaming ParallelCleaningTask, so, yes, we have it in Shenandoah.

I would like to study to bit why Shenandoah has *much better* 
termination characteristics vs. upstream, potential some good or bad 
hiding behind it :-)

-Zhengyu

> 
> Thanks, Roman
> 
>>
>> -Zhengyu
>>
>>>
>>> Roman
>>>
>>>
>>>> This applies a few trivial cleanups around UseShenandoahOWST blocks.
>>>> Mostly renames "*_task" ->
>>>> task, and cleaning up useless UseShenandoahOWST in
>>>> ShenandoahTraversalGC::init_traversal_collection:
>>>>
>>>> diff -r fde9a873d896
>>>> src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.cpp
>>>> --- a/src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.cpp
>>>> Mon Jul 09 10:29:38 2018 +0200
>>>> +++ b/src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.cpp
>>>> Mon Jul 09 10:34:32 2018 +0200
>>>> @@ -419,16 +419,16 @@
>>>>
>>>>      task_queues()->reserve(nworkers);
>>>>
>>>>      if (UseShenandoahOWST) {
>>>>        ShenandoahTaskTerminator terminator(nworkers, task_queues());
>>>> -    ShenandoahConcurrentMarkingTask markingTask =
>>>> ShenandoahConcurrentMarkingTask(this,
>>>> &terminator, update_refs);
>>>> -    workers->run_task(&markingTask);
>>>> +    ShenandoahConcurrentMarkingTask task(this, &terminator,
>>>> update_refs);
>>>> +    workers->run_task(&task);
>>>>      } else {
>>>>        ParallelTaskTerminator terminator(nworkers, task_queues());
>>>> -    ShenandoahConcurrentMarkingTask markingTask =
>>>> ShenandoahConcurrentMarkingTask(this,
>>>> &terminator, update_refs);
>>>> -    workers->run_task(&markingTask);
>>>> +    ShenandoahConcurrentMarkingTask task(this, &terminator,
>>>> update_refs);
>>>> +    workers->run_task(&task);
>>>>      }
>>>>
>>>>      assert(task_queues()->is_empty() || sh->cancelled_gc(), "Should
>>>> be empty when not cancelled");
>>>>    }
>>>>
>>>> diff -r fde9a873d896
>>>> src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp
>>>> --- a/src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp
>>>> Mon Jul 09 10:29:38 2018 +0200
>>>> +++ b/src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp
>>>> Mon Jul 09 10:34:32 2018 +0200
>>>> @@ -417,19 +417,12 @@
>>>>        {
>>>>          uint nworkers = _heap->workers()->active_workers();
>>>>          task_queues()->reserve(nworkers);
>>>>          ShenandoahRootProcessor rp(_heap, nworkers,
>>>> ShenandoahPhaseTimings::init_traversal_gc_work);
>>>>
>>>> -      if (UseShenandoahOWST) {
>>>> -        ShenandoahTaskTerminator terminator(nworkers, task_queues());
>>>> -        ShenandoahInitTraversalCollectionTask traversal_task(&rp);
>>>> -        _heap->workers()->run_task(&traversal_task);
>>>> -      } else {
>>>> -        ParallelTaskTerminator terminator(nworkers, task_queues());
>>>> -        ShenandoahInitTraversalCollectionTask traversal_task(&rp);
>>>> -        _heap->workers()->run_task(&traversal_task);
>>>> -      }
>>>> +      ShenandoahInitTraversalCollectionTask traversal_task(&rp);
>>>> +      _heap->workers()->run_task(&traversal_task);
>>>>        }
>>>>
>>>>    #if defined(COMPILER2) || INCLUDE_JVMCI
>>>>        DerivedPointerTable::update_pointers();
>>>>    #endif
>>>> @@ -641,16 +634,16 @@
>>>>      if (!_heap->cancelled_gc()) {
>>>>        uint nworkers = _heap->workers()->active_workers();
>>>>        task_queues()->reserve(nworkers);
>>>>        if (UseShenandoahOWST) {
>>>>          ShenandoahTaskTerminator terminator(nworkers, task_queues());
>>>> -      ShenandoahConcurrentTraversalCollectionTask
>>>> traversal_task(&terminator);
>>>> -      _heap->workers()->run_task(&traversal_task);
>>>> +      ShenandoahConcurrentTraversalCollectionTask task(&terminator);
>>>> +      _heap->workers()->run_task(&task);
>>>>        } else {
>>>>          ParallelTaskTerminator terminator(nworkers, task_queues());
>>>> -      ShenandoahConcurrentTraversalCollectionTask
>>>> traversal_task(&terminator);
>>>> -      _heap->workers()->run_task(&traversal_task);
>>>> +      ShenandoahConcurrentTraversalCollectionTask task(&terminator);
>>>> +      _heap->workers()->run_task(&task);
>>>>        }
>>>>      }
>>>>
>>>>      if (!_heap->cancelled_gc() && ShenandoahPreclean &&
>>>> _heap->process_references()) {
>>>>        ShenandoahEvacOOMScope oom_evac_scope;
>>>> @@ -672,16 +665,16 @@
>>>>
>>>>        // Finish traversal
>>>>        ShenandoahRootProcessor rp(_heap, nworkers,
>>>> ShenandoahPhaseTimings::final_traversal_gc_work);
>>>>        if (UseShenandoahOWST) {
>>>>          ShenandoahTaskTerminator terminator(nworkers, task_queues());
>>>> -      ShenandoahFinalTraversalCollectionTask traversal_task(&rp,
>>>> &terminator);
>>>> -      _heap->workers()->run_task(&traversal_task);
>>>> +      ShenandoahFinalTraversalCollectionTask task(&rp, &terminator);
>>>> +      _heap->workers()->run_task(&task);
>>>>        } else {
>>>>          ParallelTaskTerminator terminator(nworkers, task_queues());
>>>> -      ShenandoahFinalTraversalCollectionTask traversal_task(&rp,
>>>> &terminator);
>>>> -      _heap->workers()->run_task(&traversal_task);
>>>> +      ShenandoahFinalTraversalCollectionTask task(&rp, &terminator);
>>>> +      _heap->workers()->run_task(&task);
>>>>        }
>>>>    #if defined(COMPILER2) || INCLUDE_JVMCI
>>>>        DerivedPointerTable::update_pointers();
>>>>    #endif
>>>>      }
>>>>
>>>>
>>>> Testing: tier1_gc_shenandoah
>>>>
>>>> Thanks,
>>>> -Aleksey
>>>>
>>>
>>>
> 
> 


More information about the shenandoah-dev mailing list