Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6711930

NUMA allocator: ParOld can create a hole less than minimal object size in the lgrp chunk

    XMLWordPrintable

    Details

    • Subcomponent:
      gc
    • Resolved In Build:
      b02
    • CPU:
      generic
    • OS:
      generic
    • Verification:
      Verified

      Backports

        Description

        Setting top in MutableNUMASpace can create a hole in chunk, which is less than a minimal object size in the lgrp chunk. The VM would typically fail while trying to fill the hole with a dummy object.

        Internal Error at sharedHeap.cpp:279, pid=8687, tid=5
        Error: assert(word_size == (size_t)oopDesc::header_size(),"Unaligned?")
        Also, if a object crosses the chunk boundary a verification would fail, because it verifies each chunk independently. The failure will look like:
        Internal Error at mutableSpace.cpp:130, pid=7099, tid=5
        Error: guarantee(p == top(),"end of last object must match end of space")
        There is also a fault in the allocation code, that enable creation of less than a minimal object sized holes between the lgrp chunks, which I had introduced while fixing 6697534.
        Specifically in MutableNUMASpace::cas_allocate(), the code that computes the size of the hole created should be

        size_t remainder = pointer_delta(s->end(), p + size);

        instead of

        size_t remainder = pointer_delta(s->end(), p);

          Attachments

            Issue Links

              Activity

                People

                Assignee:
                iveresov Igor Veresov
                Reporter:
                iveresov Igor Veresov
                Votes:
                0 Vote for this issue
                Watchers:
                1 Start watching this issue

                  Dates

                  Created:
                  Updated:
                  Resolved:
                  Imported:
                  Indexed: