RFR(XS): 8214235: assertion in collectedHeap.cpp: attempt to clean empty remainder
Per Liden
per.liden at oracle.com
Tue Dec 18 15:12:18 UTC 2018
Hi Boris,
On 12/11/18 3:13 PM, Boris Ulasevich wrote:
> Hi Per,
>
> You asked if I have reproducer for this on x86. I do have! The
> configuration [--with-jvm-variants=client --with-debug-level=fastdebug]
> on 32bit linux-x86 (alignment_reserve is empty for this configuration)
> fires the assertion even on build time:
> # Internal Error
> (/ws/boris/jdk-jdk/src/hotspot/share/gc/shared/collectedHeap.cpp:373),
> pid=4338, tid=4339
> # assert(words >= min_fill_size()) failed: too small to fill
>
> My fix for the issue works Ok:
> http://cr.openjdk.java.net/~bulasevich/8214235/webrev.00
Thanks for the reproducer, I think the above patch looks good.
cheers,
Per
> http://bugs.openjdk.java.net/browse/JDK-8214235
>
> Boris
>
> On 29.11.2018 18:13, Boris Ulasevich wrote:
>> Hi Per,
>>
>> On 29.11.2018 16:30, Per Liden wrote:
>>> Hi,
>>>
>>> On 11/29/18 12:02 PM, Boris Ulasevich wrote:
>>>> Hi Per,
>>>>
>>>> On 28.11.2018 17:35, Per Liden wrote:
>>>>> Hi,
>>>>>
>>>>> On 11/28/18 1:39 PM, Boris Ulasevich wrote:
>>>>>> Hi all,
>>>>>>
>>>>>> Please review a simple fix: do not fill remaining tlab memory
>>>>>> when the remainder is empty.
>>>>>
>>>>> Hmm I get the feeling something else is wrong here. Like a
>>>>> misaligned object or a misaligned object size was allocated in the
>>>>> TLAB.
>>>>
>>>> Actually assertion check catches the case when top() = end().
>>>> I do not think it is something criminal. May be it is better to
>>>> add check (top() < hard_end()) instead:
>>>> http://cr.openjdk.java.net/~bulasevich/8214235/webrev.00
>>>
>>> There's still something fishy here. The TLAB alignment_reserve should
>>> make sure there's always enough space left for a filler object.
>>
>> My case is different! alignment_reserve() returns 0:
>> alignment_reserve() = MAX2(tlab_alloc_reserve(),
>> _reserve_for_allocation_prefetch) =
>> MAX2(min_dummy_object_size() > MinObjAlignment ?
>> min_dummy_object_size() : 0, is_server_compilation_mode_vm() ? a+b*c/d
>> : 0) =
>> MAX2(2 > 2 ? 2 : 0, 0 ? a+b*c/d : 0) = MAX2(0, 0) = 0
>>
>>> Do you have a reproducer for this on x86 or does this only happen on
>>> Arm?
>>>
>>> /Per
>>>
>>>>
>>>>> When you crash here it would be interesting to see what the tlab
>>>>> start/end/top/etc is and what MinObjAlignement is being used.
>>>>
>>>> TLAB: start()=0x938b0b28, end()=0x938dcdc8, top()=0x938dcdc8
>>>> MinObjAlignment: 2
>>>>
>>>>> cheers,
>>>>> Per
>>>>>
>>>>>>
>>>>>> https://bugs.openjdk.java.net/browse/JDK-8214235
>>>>>> http://cr.openjdk.java.net/~bulasevich/8214235/webrev.01
>>>>>>
>>>>>> Thanks,
>>>>>> Boris
More information about the hotspot-gc-dev
mailing list