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

Igor Ignatyev igor.ignatyev at oracle.com
Tue May 17 17:26:27 UTC 2016


Dima,

the fix looks good to me, reviewed.

Thanks,
— Igor

> On May 10, 2016, at 9:37 PM, Dmitry Fazunenko <dmitry.fazunenko at oracle.com> wrote:
> 
> 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