RFR(S): 8174856: [TESTBUG] Missing DefineClass instances

Dmitry Dmitriev dmitry.dmitriev at oracle.com
Wed Feb 15 17:46:47 UTC 2017


Hello Volker,

I think this can be simplified by using isComp() method of Platform 
class from jdk.test.lib package(test/lib/jdk/test/lib/Platform.java). 
Also, I think it is possible to specify VM mode in @requires tag(I think 
it's best solution to exclude test with "-Xcomp" flag), but I need to 
check that tomorrow.

Thank you,
Dmitry

On 15.02.2017 20:32, Volker Simonis wrote:
> Hi,
>
> so here's an alternative version which doesn't execute the tests in -Xcomp mode:
>
> http://cr.openjdk.java.net/~simonis/webrevs/2017/8174856.v1/
>
> Instead of using a wrapper test which seems overly complicated to me
> :) I just use MX to query the command line and return if either
> '-Xcomp' or '-XX:-UseInterpreter' was specified.
>
> Please choose whichever of the two versions you like.
>
> Regards,
> Volker
>
> PS: it would be great if you could run the exact test that failed
> before just in case there will be other problems as well. I've just
> checked that the test now succeed in both, normal and '-Xcomp' mode.
>
>
> On Wed, Feb 15, 2017 at 10:17 AM, David Holmes <david.holmes at oracle.com> wrote:
>> Hi Volker,
>>
>> On 15/02/2017 5:51 PM, Volker Simonis wrote:
>>> On Wed, Feb 15, 2017 at 12:46 AM, David Holmes <david.holmes at oracle.com>
>>> wrote:
>>>> Hi Volker,
>>>>
>>>> Can we just skip the test in -Xcomp mode?
>>>>
>>> That would be fine for me, but how would I detect that? -Xcomp is not
>>> a VM flag, it is specially handled at startup and sets the following
>>> actual flags:
>>>
>>>    case _comp:
>>>      UseInterpreter           = false;
>>>      BackgroundCompilation    = false;
>>>      ClipInlining             = false;
>>>      if (TieredCompilation) {
>>>        Tier3InvokeNotifyFreqLog = 0;
>>>        Tier4InvocationThreshold = 0;
>>>      }
>>>
>>> Do you think it is safe to check for all these flags and skip the test
>>> if they are set correspondingly?
>>
>> A simpler approach would be to run a wrapper test in driver mode, so no VM
>> flags are passed through, and then exec the real test in a VM with minimal
>> flags set.
>>
>>> Why do you actually think we should skip the test in -Xcomp mode? Do
>>> you think it became too complicated/unstable? The good thing about
>>> running it in -Xcomp mode is that it now also checks that we get rid
>>> of the instance classes which are referenced by the nmethods.
>>
>> Xcomp is a stress mode that can sometimes change the normal way things work,
>> so we sometimes end up not actually testing what we intended to test when
>> run in Xcomp mode.
>>
>> In this case I don't know enough about what is happening to evaluate the
>> techniques you have used to deal with Xcomp mode. So I can't review this
>> as-is.
>>
>> Would love to get other opinions on this.
>>
>> Thanks,
>> David
>>
>>
>>> But as I said, I'm open for both solutions. Please let me know what you
>>> think.
>>>
>>> Regards,
>>> Volker
>>>
>>>> David
>>>>
>>>>
>>>> On 15/02/2017 4:31 AM, Volker Simonis wrote:
>>>>>
>>>>> Hi,
>>>>>
>>>>> can I please have a reviewer and sponsor for the following fix:
>>>>>
>>>>> http://cr.openjdk.java.net/~simonis/webrevs/2017/8174856/
>>>>> https://bugs.openjdk.java.net/browse/JDK-8174856
>>>>>
>>>>> The runtime/Metaspace/DefineClass.java test introduced with 8173743
>>>>> fails if run in '-Xcomp' mode. There are actually two problems we
>>>>> observe:
>>>>>
>>>>> - for the "defineClass" and "defineClassParallel" cases we observe
>>>>> fewer instance classes than expected. This is because in -Xcomp mode
>>>>> the functions get compiled and deoptimized, but because we don't
>>>>> really use the defined classes, they are already removed before our
>>>>> first check. This problem can be easily fixed by inserting the classes
>>>>> into a global static list.
>>>>>
>>>>> - for the "redefineClass" case, if run in -Xcomp mode, the problem is
>>>>> that we get 10 different nmethods for each version of the class
>>>>> redefinition, and these nmethods keep the instance classes alive, even
>>>>> after their activation has been removed from the stack. The problem
>>>>> can be solved by manually deoptimizing the methods and subsequent
>>>>> sweeping of the code cache. Notice that this has to be done at least
>>>>> three times, because during every sweep process, the nmethods first
>>>>> transition from "non-entrant" to "zombie" before they are finally
>>>>> cleaned.
>>>>>
>>>>> Thank you and best regards,
>>>>> Volker
>>>>>



More information about the hotspot-runtime-dev mailing list