RFR(XS): 8214235: assertion in collectedHeap.cpp: attempt to clean empty remainder
Boris Ulasevich
boris.ulasevich at bell-sw.com
Sat Dec 29 14:09:35 UTC 2018
Hello Paul,
Thank for your input! I do not see how my final fix can introduce
non-object gap (may be you had a look to webrev.01 which was rejected?):
> http://cr.openjdk.java.net/~bulasevich/8214235/webrev.00
> void ThreadLocalAllocBuffer::insert_filler() {
> assert(end() != NULL, "Must not be retired");
> + if (top() < hard_end()) {
> Universe::heap()->fill_with_dummy_object(top(), hard_end(), true);
> + }
> }
I checked ">=" change with my crasher. It works OK (assertion check does
not fire because TLAB alignment_reserve grows 0->2 and therefore top
never hits hard_end). Do you think I should proceed (test, review) with
this fix instead of mine?
thanks,
Boris
On 27.12.2018 20:13, Hohensee, Paul wrote:
> Hi Boris,
>
> I don't think this is the actual bug, rather it's in collectedHeap.cpp
>
> size_t CollectedHeap::tlab_alloc_reserve() const {
> size_t min_size = min_dummy_object_size();
> return min_size > (size_t)MinObjAlignment ? align_object_size(min_size) : 0;
> }
>
> ">" should be ">=". Would you try it out on your crasher please?
>
> During GC, an invariant is that eden (and other spaces) be "parseable", i.e., it's filled with legal objects from bottom to top. Your patch can introduce a non-object gap in eden at arbitrary places.
>
> Thanks,
>
> Paul
>
> On 12/18/18, 7:14 AM, "hotspot-gc-dev on behalf of Per Liden" <hotspot-gc-dev-bounces at openjdk.java.net on behalf of per.liden at oracle.com> wrote:
>
> 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