RFR (round 3), JDK-8214259: Implementation: JEP 189: Shenandoah: A Low-Pause Garbage Collector
Per Liden
per.liden at oracle.com
Fri Nov 30 09:34:19 UTC 2018
Hi Roman,
On 11/30/18 10:09 AM, Roman Kennke wrote:
> Hi Per,
>
> Thanks for taking time to look at this!
>
> We will take care of all the issues you mentioned.
>
> Regarding the flags, I think they are useful as they are now. Shenandoah
> can be run in 'passive' mode, which doesn't involve any concurrent GC
> (iow, it runs kindof like Parallel GC). In this mode we can selectively
> turn on/off different kinds of barriers. This is useful:
> - for debugging. if we see a crash and we suspect it's caused by a
> certain type of barrier, we can turn on/off those barriers to narrow down
> - for performance experiments: passive w/o any barriers give a good
> baseline against which we can measure impact of types of barriers.
>
> Debugging may or may not be useful in develop mode (some bugs only show
> up in product build), performance work quite definitely is not useful in
> develop builds, and therefore I think it makes sense to keep them as
> diagnostic, because that is what they are: diagnostic flags.
>
> Makes sense?
I can see how these flags can be useful. But I think you might be in
violating-spec-territory here, if you're allowing users to turn on flags
that crash the VM. If they are safe to use in 'passive' mode, then I
think there should be code in shenandoahArguments.cpp that
rejects/corrects flag combinations that are unstable.
I think the correct way to think about this is: We should pass the TCK,
regardless of which features are enabled/disabled (unless the VM barfs
at start-up because the chosen combination of flags are incompatible or
isn't supported in the current environment, etc).
CC:ing Mikael here, who might be able to shed some light on what's ok
and not ok here.
cheers,
Per
>
> Thanks,
> Roman
>
>
>> On 11/29/18 9:41 PM, Roman Kennke wrote:
>> [...]
>>> http://cr.openjdk.java.net/~rkennke/shenandoah-upstream/03/
>>
>> Some comments (I didn't look at the compiler part):
>>
>>
>> src/hotspot/share/gc/shared/barrierSetConfig.hpp
>> src/hotspot/share/gc/shared/barrierSetConfig.inline.hpp
>> -------------------------------------------------------
>> Please insert the Shenandoah lines so that the lists remain
>> alphabetically sorted on GC names.
>>
>>
>> src/hotspot/share/gc/shared/gcCause.cpp
>> ---------------------------------------
>> Add the Shenandoah stuff after _dcmd_gc_run to match the order in the
>> header file.
>>
>>
>> src/hotspot/share/gc/shared/gcConfig.cpp
>> ----------------------------------------
>> Please insert the Shenandoah lines so that the lists remain
>> alphabetically sorted on GC names. Only the last change is in the right
>> place now.
>>
>>
>> src/hotspot/share/gc/shared/gcTrace.hpp
>> ---------------------------------------
>> Please move this new class to a gc/shenandoah/shanandoahTrace.hpp file
>> (or something similar).
>>
>>
>> src/hotspot/share/gc/shared/gc_globals.hpp
>> src/hotspot/share/gc/shared/vmStructs_gc.hpp
>> ------------------------------------------
>> Please insert the INCLUDE_SHENANDOAHGC/SHENANDOAHGC_ONLY stuff so that
>> the lists remain alphabetically sorted on GC names.
>>
>>
>> src/hotspot/share/utilities/globalDefinitions.hpp
>> -------------------------------------------------
>> I think you want to call the new macro UINT64_FORMAT_X_W, to maintain
>> similarity to it's sibling UINT64_FORMAT_X. Also please adjust the
>> indentation/alignment so the list of macros remains nicely structured.
>>
>>
>> src/hotspot/share/utilities/macros.hpp
>> --------------------------------------
>> Please insert the Shenandoah lines so that the lists remain
>> alphabetically sorted on GC names.
>>
>>
>> src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shenandoah/ShenandoahHeap.java
>>
>> src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shenandoah/ShenandoahHeapRegion.java
>>
>> -------------------------------------------------------------------------------
>>
>> Since the heap walking is now disabled, it looks like there's quite a
>> bit of code here that can be removed.
>>
>>
>> test/hotspot/jtreg/*
>> --------------------
>> As Aleksey and I discussed in a separate thread. Using
>> 'vm.gc.Shenandoah' does not mean the same thing as 'vm.gc ==
>> "Shenandoah"', and you typically want to use 'vm.gc == "Shenandoah"' in
>> most cases (I did't check all), like in tests that aren't Shenandoah
>> specific.
>>
>>
>> src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp
>> ------------------------------------------------------
>> I don't think you want to expose the following flags. Setting any of
>> them to false will crash the VM, right? If you really want to keep them
>> I'd suggest you make them develop-flags.
>>
>> 346 diagnostic(bool, ShenandoahSATBBarrier, true, \
>> 347 "Turn on/off SATB barriers in Shenandoah") \
>> 348 \
>> 349 diagnostic(bool, ShenandoahKeepAliveBarrier, true, \
>> 350 "Turn on/off keep alive barriers in Shenandoah") \
>> 351 \
>> 352 diagnostic(bool, ShenandoahWriteBarrier, true, \
>> 353 "Turn on/off write barriers in Shenandoah") \
>> 354 \
>> 355 diagnostic(bool, ShenandoahReadBarrier, true, \
>> 356 "Turn on/off read barriers in Shenandoah") \
>> 357 \
>> 358 diagnostic(bool, ShenandoahStoreValEnqueueBarrier, false, \
>> 359 "Turn on/off enqueuing of oops for storeval barriers")
>> \
>> 360 \
>> 361 diagnostic(bool, ShenandoahStoreValReadBarrier, true, \
>> 362 "Turn on/off store val read barriers in Shenandoah")
>> \
>> 363 \
>> 364 diagnostic(bool, ShenandoahCASBarrier, true, \
>> 365 "Turn on/off CAS barriers in Shenandoah") \
>> 366 \
>> 367 diagnostic(bool, ShenandoahAcmpBarrier, true, \
>> 368 "Turn on/off acmp barriers in Shenandoah") \
>> 369 \
>> 370 diagnostic(bool, ShenandoahCloneBarrier, true, \
>> 371 "Turn on/off clone barriers in Shenandoah") \
>>
>>
>> cheers,
>> Per
>
More information about the serviceability-dev
mailing list