RFR: 8170395: Metaspace initialization queries the wrong chunk freelist

Stefan Karlsson stefan.karlsson at oracle.com
Mon Nov 28 19:49:26 UTC 2016


Thanks, Michail.

StefanK

On 2016-11-28 20:47, Michail Chernov wrote:
> Hi Stefan,
>
> Since the bug was caught in existing test, I don't see any reason to 
> make additional test for this case. Thanks for explanation!
>
> Michail
>
> ----- Исходное сообщение -----
> От: stefan.karlsson at oracle.com
> Кому: michail.chernov at oracle.com, hotspot-dev at openjdk.java.net
> Отправленные: Понедельник, 28 Ноябрь 2016 г 22:29:33 GMT +03:00 Ирак
> Тема: Re: RFR: 8170395: Metaspace initialization queries the wrong 
> chunk freelist
>
> Hi Michail,
>
> On 2016-11-28 14:57, Michail Chernov wrote:
>
>     Hi Stefan,
>
>
>     Could you please add simple regression test for this case?
>
> The failure below was found with one of the test cases in:
> runtime/CommandLine/OptionsValidation/TestOptionsWithRanges.java
>
> Is this enough or do you want an explicit regression test that simply 
> invokes:
> java -XX:InitialBootClassLoaderMetaspaceSize=30720 -version ?
>
> Thanks,
> StefanK
>
>
>
>     Thanks,
>
>     Michail
>
>
>     On 28.11.2016 16:52, Stefan Karlsson wrote:
>
>         Hi all,
>
>         Please, review this patch to fix metaspace initialization.
>
>         http://cr.openjdk.java.net/~stefank/8170395/webrev.01/
>         https://bugs.openjdk.java.net/browse/JDK-8170395
>
>         The fix for JDK-8169931 introduced a new assert to ensure that
>         we always try to allocate chunks that are any of the three
>         fixed sizes (specialized, small, medium) or a humongous chunk
>         (if it is larger then the medium chunk size).
>
>         During metaspace initialization an initial metaspace chunk is
>         allocated. The size of some of the metaspace instances can be
>         specified on the command line. For example:
>         java -XX:InitialBootClassLoaderMetaspaceSize=30720 -version
>
>         If this size is smaller than the medium chunk size and at the
>         same time doesn't match the specialized or small chunk size,
>         then we end up hitting the assert mentioned above:
>         #
>         # Internal Error
>         (/scratch/opt/jprt/T/P1/142848.erik/s/hotspot/src/share/vm/memory/metaspace.cpp:2359),
>         pid=31643, tid=31646
>         # assert(size > free_chunks(MediumIndex)->size()) failed: Not
>         a humongous chunk
>         #
>
>         ========================================================================
>
>
>         The most important part of the fix is this line:
>         +  // Adjust to one of the fixed chunk sizes (unless humongous)
>         +  const size_t adjusted = adjust_initial_chunk_size(requested);
>
>         which ensures that we always request either of a specialized,
>         small, medium, or humongous chunk size, even if the requested
>         size is neither of these.
>
>         Most of the other code is refactoring to unify the non-class
>         metaspace and the class metaspace code paths to get rid of
>         some of the existing code duplication, bring the chunk size
>         calculation nearer to the the actual chunk allocation, and
>         make it easier to write a unit test for the new
>         adjust_initial_chunk_size function.
>
>         ========================================================================
>
>
>         The patch for JDK-8169931 was backed out with JDK-8170355 and
>         will be reintroduced as JDK-8170358 when this patch has been
>         reviewed and pushed.
>
>         Testing: jprt, unit test, parts of PIT testing (including CDS
>         tests), failing test
>
>         Thanks,
>         StefanK
>
>
>



More information about the hotspot-dev mailing list