RFR(XS) 8193577: nsk/jvmti/IterateThroughHeap/filter-tagged fails with Graal in Xcomp mode

dean.long at oracle.com dean.long at oracle.com
Thu Nov 29 15:42:58 UTC 2018


OK your fix looks good.

dl

On 11/28/18 10:57 PM, Igor Veresov wrote:
> It would work right now. But I don’t want us fixing it again when 
> somebody implements effectively final optimization in Graal.
>
> igor
>
>
>
>> On Nov 28, 2018, at 10:02 PM, dean.long at oracle.com 
>> <mailto:dean.long at oracle.com> wrote:
>>
>> I like it better.  But do you really need to use JNI to reset the 
>> values?  If you had
>>
>> static int POISON = 0x1234;  // not final
>>
>> class TaggedClass {
>>       static int field1 = 0xC0DE01 + POISON;
>>
>> in HeapFilter.java, is the compiler smart enough to treat the value 
>> as constant until it changes?
>>
>> dl
>>
>> On 11/28/18 9:26 PM, Igor Veresov wrote:
>>> Alright, how about the following solution: 
>>> http://cr.openjdk.java.net/~iveresov/8193577/webrev.01/
>>>
>>> igor
>>>
>>>
>>>
>>>> On Nov 28, 2018, at 4:59 PM, Igor Veresov <igor.veresov at oracle.com 
>>>> <mailto:igor.veresov at oracle.com>> wrote:
>>>>
>>>> I don’t want to make it Graal specific. I think I’ll just do field 
>>>> assignments in native so that it’s all invisible to the compiler.
>>>>
>>>> igor
>>>>
>>>>
>>>>
>>>>> On Nov 28, 2018, at 3:25 PM, serguei.spitsyn at oracle.com 
>>>>> <mailto:serguei.spitsyn at oracle.com> wrote:
>>>>>
>>>>> On 11/28/18 15:16, dean.long at oracle.com wrote:
>>>>>> It sounds like the test could also fail with C2 if the fields are 
>>>>>> in a virtual object that was eliminated.  I'm OK with your fix, 
>>>>>> but I would feel a little better if we only relaxed the check for 
>>>>>> Graal.  I guess you'd need to use the whitebox api for that.
>>>>>
>>>>> I was thinking about the same.
>>>>> Relaxing this just for Graal sounds good.
>>>>> On the other hand, making the test to know about Graal looks a 
>>>>> little bit strange. :)
>>>>>
>>>>> Thanks,
>>>>> Serguei
>>>>>
>>>>>>
>>>>>> dl
>>>>>>
>>>>>> On 11/28/18 2:28 PM, Igor Veresov wrote:
>>>>>>> Oh, I haven’t understood your idea before pressing reply. Yes, 
>>>>>>> we can match the objects by matching their shape, but it’s also 
>>>>>>> not an exact solution prone to erroneous matches. Especially 
>>>>>>> considering the iteration API does callbacks for the fields out 
>>>>>>> of order - it does primitives, strings, arrays, in that order.
>>>>>>>
>>>>>>> There are also ways to make it fail with Graal that are not 
>>>>>>> related to constant representation. Graal treats allocations as 
>>>>>>> side effect free. So it’s possible to allocate something and 
>>>>>>> then deopt to a point before the allocation and redo the 
>>>>>>> allocation in the interpreter. In this case there are going to 
>>>>>>> be multiple objects on the heap with only one of them being 
>>>>>>> reachable.
>>>>>>>
>>>>>>> igor
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>> On Nov 28, 2018, at 2:08 PM, Igor Veresov 
>>>>>>>> <igor.veresov at oracle.com <mailto:igor.veresov at oracle.com>> wrote:
>>>>>>>>
>>>>>>>> I don’t think there is a way to identify an untagged object. 
>>>>>>>> There is nothing that is passed in the callback to allow that.
>>>>>>>>
>>>>>>>> igor
>>>>>>>>
>>>>>>>>
>>>>>>>>> On Nov 28, 2018, at 1:32 PM, dean.long at oracle.com 
>>>>>>>>> <mailto:dean.long at oracle.com> wrote:
>>>>>>>>>
>>>>>>>>> I'm guessing Graal creates Constant boxes of the individual 
>>>>>>>>> fields and not of the test objects?  If so, can't we fix the 
>>>>>>>>> matching so that it checks that all fields of an object match? 
>>>>>>>>> I guess that would mean moving the "expected" and "found" 
>>>>>>>>> counts up from fields[] to objects_info[].
>>>>>>>>>
>>>>>>>>> dl
>>>>>>>>>
>>>>>>>>> On 11/28/18 1:13 PM, Igor Veresov wrote:
>>>>>>>>>> When doing heap iteration with JVMTI the way the object 
>>>>>>>>>> identity is tracked is by tagging. This particular test 
>>>>>>>>>> checks if it  can observe an untagged object. Since there is 
>>>>>>>>>> no way to truly track the identity of an untagged object the 
>>>>>>>>>> test validates the identity by checking the value of the 
>>>>>>>>>> fields of such object. When being compiled with Graal there 
>>>>>>>>>> are objects produced (such as Constant boxes) that have field 
>>>>>>>>>> values that are equal to the expected values for the fields 
>>>>>>>>>> in UntaggedClass. During the subsequent heap iteration these 
>>>>>>>>>> objects are reported to the test and are treated as if they 
>>>>>>>>>> were instances of UntaggedClass.
>>>>>>>>>>
>>>>>>>>>> The fix is to relax the test requirement and allow (for the 
>>>>>>>>>> untagged case) the number of the object found during 
>>>>>>>>>> iteration to be more than expected.
>>>>>>>>>>
>>>>>>>>>> Webrev: 
>>>>>>>>>> http://cr.openjdk.java.net/~iveresov/8193577/webrev.00/ 
>>>>>>>>>> <http://cr.openjdk.java.net/%7Eiveresov/8193577/webrev.00/>
>>>>>>>>>> JBS: https://bugs.openjdk.java.net/browse/JDK-8193577
>>>>>>>>>>
>>>>>>>>>> igor
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20181129/6c28734c/attachment-0001.html>


More information about the hotspot-compiler-dev mailing list