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 06:02:20 UTC 2018


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/serviceability-dev/attachments/20181128/6358dc9d/attachment.html>


More information about the serviceability-dev mailing list