RFR: 8154096: Extend WhiteBox API with methods which retrieve from VM information about available GC

Dmitry Fazunenko dmitry.fazunenko at oracle.com
Tue May 10 18:37:11 UTC 2016


Kim,

I've fixed all your comments:
   http://cr.openjdk.java.net/~dfazunen/8154096/webrev.03/
   http://cr.openjdk.java.net/~dfazunen/8154096/webrev.02vs03/


Answering your question I copy my previous answer:

> ------------------------------------------------------------------------------
>
> Looking at the JDK-8154096 and the CRs it is blocking, I'm failing to
> understand the motivation for the "selected by ergonomics" predicate.
> Why is ergo-selection more interesting than command-line or default
> selection?  And for the described use-case (jtreg @requires
> filtering), why would any of those distinctions be interesting?
>
> ------------------------------------------------------------------------------


This is needed to check the ability to set an alternative collector in 
the next VM start.
How the 'vm.gc' @requires properties is setting now:
jtreg parses given VM flags  for -XX:+Use(.*)GC  pattern. If no matches 
found, 'vm.gc' will be set to null, which means: all tests for any 
collector are applicable. If user specified -XX:+UseParallelGC, jtreg 
will set 'vm.gc' to Parallel, that means that only tests which set 
Parallel collector or do not set any collector are applicable.
This approach has disadvantages:
- on some VMs (like minimal), giving -XX:+UseParallelGC will not have 
any effect, Serial will be used anyway.
   but jtreg is now aware of this, so 'vm.gc' will be set to Parallel
- If a GC has a mode which is turned like: -XX:+UseG1GC -XX:+UseModeOfG1GC,
   jtreg will not be able to handle that correctly, so  'vm.gc' will be 
set to either G1 or ModeOfG1 (depending on the flag order)

Incorrect setting of 'vm.gc' will cause situations when some tests are 
executed in inappropriate configurations and fail.

To address the issues like that, jtreg now allows a custom code to be 
executed prior the tests.
This delegates the responsibility on @requires property setting to test 
suites.
So now we need to write a code to decide whether a collector X could be 
set or not.
The collector X could be set if:
   (currentGC == X) | (X isSupportedGC() && currentGC.isSelectedByErgo)
For that purpose we need to distinguish cases when the current collector 
is set by user or selected by ergo.

Thanks,
Dima

On 30.04.2016 3:03, Kim Barrett wrote:
>> On Apr 29, 2016, at 7:34 AM, Dmitry Fazunenko <dmitry.fazunenko at oracle.com> wrote:
>>
>> Hello,
>>
>> To address the offline comments from Igor I completely reimplemented the fix.
>> The main change is introduction a new class sun.hotspot.gc.GC which could be used by tests to:
>> http://cr.openjdk.java.net/~dfazunen/8154096/webrev.02/test/raw_files/new/test/lib/sun/hotspot/gc/GC.java
>>   - get the currently used GC
>>   - check if the current GC was selected by ergo or set explicitly
>>   - get list of supported GC
>>
>> The new version also minimize the changes to the WhiteBox API
>>
>> So reviewers are still very welcome!
>>
>> http://cr.openjdk.java.net/~dfazunen/8154096/webrev.02/
>> https://bugs.openjdk.java.net/browse/JDK-8154096
> ------------------------------------------------------------------------------
> hotspot/src/share/vm/prims/whitebox.cpp
>   289   } else if (UseParallelGC | UseParallelOldGC) {
>
> Use || rather than | with booleans.
>
> ------------------------------------------------------------------------------
> hotspot/src/share/vm/prims/whitebox.cpp
>   289   } else if (UseParallelGC | UseParallelOldGC) {
>   290     return parallel_code;
>   291   } else if (UseParallelOldGC) {
>   292     return FLAG_IS_ERGO(UseParallelOldGC);
>
> The test on line 291 will never be true, because that case is already
> handled by line 289.
>
> ------------------------------------------------------------------------------
> hotspot/src/share/vm/prims/whitebox.cpp
>   298   assert(false, "No GC selected yet");
> and
>   322   assert(false, "No GC selected yet");
>
> ------------------------------------------------------------------------------
> hotspot/src/share/vm/prims/whitebox.cpp
>   299   return false;
> and
>   323   return false;
>
> Don't use boolean false as an empty bit mask; return 0.
>
> ------------------------------------------------------------------------------
>
> Looking at the JDK-8154096 and the CRs it is blocking, I'm failing to
> understand the motivation for the "selected by ergonomics" predicate.
> Why is ergo-selection more interesting than command-line or default
> selection?  And for the described use-case (jtreg @requires
> filtering), why would any of those distinctions be interesting?
>
> ------------------------------------------------------------------------------
>




More information about the hotspot-gc-dev mailing list