RFR (M) 8202813: Move vm_weak processing from SystemDictionary to WeakProcessor
Stefan Johansson
stefan.johansson at oracle.com
Tue May 29 12:38:03 UTC 2018
On 2018-05-29 13:46, coleen.phillimore at oracle.com wrote:
>
>
> On 5/29/18 6:27 AM, Stefan Johansson wrote:
>> Hi Coleen,
>>
>> On 2018-05-25 17:32, coleen.phillimore at oracle.com wrote:
>>> Summary: SystemDictionary has all strong roots. The weak oop_storage
>>> is processed by the WeakProcessor so it can be scanned and cleared
>>> concurrently and/or by parallel threads.
>>>
>>> Please see bug for explanation.
>>>
>>> open webrev at http://cr.openjdk.java.net/~coleenp/8202813.01/webrev
>>> bug link https://bugs.openjdk.java.net/browse/JDK-8202813
>>>
>>> There might be more GC code that can be cleaned out since
>>> G1RootClosures->weak_oops() seems unused now, but I'd like to defer
>>> that to a smaller cleanup. Also ClassLoaderData is still processed
>>> inconsistently by the GCs, which would be nice to clean up.
>>>
>>> Tested with mach5 hs-tier1-5 with no failures. Per's gc-test-suite,
>>> dev-submit for performance testing, and runThese with all collectors,
>>> with and without -XX:-ClassUnloading. Also tested with class
>>> unloading gc tests (which are also in hs-tier number tests).
>>
>> The changes looks good, just a couple of questions:
>> * In your performance runs did you check the pause times? From what I
>> can see some of the processing have moved from a parallel phase to a
>> serial one, which could be problematic if the vm_weak_oop_storage is
>> large.
>
> Thank you for looking at this Stefan. The
> SystemDictionary::vm_weak_oop_storage is not large (~500 entries avg in
> my measurements with SPECjbb2015). I don't think it benefited from
> parallelism. That said, I don't think processing the few strong roots
> in SystemDictionary are worth processing in their own thread anymore
> either (it used to be a lot larger when this was all set up). It might
> make sense to move all of these strong roots together into Universe.
>
> The goal is to make the oop_storage processing parallel, which Kim is
> working on, and not have these separate.
>
Sounds good.
> I did generate all of the gc.log files from a performance run but
> haven't dug them out yet. Eric Caspole's been helping me graph the
> pause times so can we talk offline for what to look for in these files?
>
Graphs are always nice :) One good thing, that works again with the
latest JFR changes, is to do the aurora-perf runs with JFR enabled. That
will give some basic GC events which are automatically parsed and
displayed in the report. That makes it a lot easier to spot pause time
regressions since they seldom show up in the benchmark result.
What I would look out for is longer Young GC pause times, looking at the
average over a run is usually a good first step.
>>
>> * When turning of ClassUnloading we treated the vm_weak_oop_storage as
>> strong roots in the past, was that not needed? I don't see this being
>> done after this change.
>
> It's not needed because the oops in the vm_weak_oop_storage relating to
> ClassUnloading will be marked when we process the ClassLoaderDataGraph
> so this extra walk only marked the additional ResolvedMethodTable oops.
> This table has appropriate NULL checks and should probably be removed
> from SystemDictionary. It was added there for convenience.
>
Thanks for the explanation, with that the change looks good code wise
and if you feel comfortable with the performance I don't see any problem
moving forward with the change.
Cheers,
Stefan
> Thank you!
> Coleen
>
>>
>> Thanks,
>> Stefan
>>
>>>
>>> Thanks,
>>> Coleen
>
More information about the hotspot-dev
mailing list