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