RFR: 8170395: Metaspace initialization queries the wrong chunk freelist
Stefan Karlsson
stefan.karlsson at oracle.com
Tue Nov 29 09:32:05 UTC 2016
Hi Thomas,
On 2016-11-29 08:13, Thomas Stüfe wrote:
> Hi Stefan,
>
> looks fine. There is a trailing ; after the "smallest_chunk_size" method
> (no need to do a webrev for that).
Will fix.
>
> Thanks for taking my suggestions.
Thanks for reviewing.
StefanK
>
> Best regards, Thomas
>
>
>
> On Mon, Nov 28, 2016 at 10:06 PM, Stefan Karlsson
> <stefan.karlsson at oracle.com <mailto:stefan.karlsson at oracle.com>> wrote:
>
> Hi again,
>
> This set of patches resolve some of the comments given by Mikael and
> Thomas:
>
> Entire patch:
> http://cr.openjdk.java.net/~stefank/8170395/webrev.02
> <http://cr.openjdk.java.net/~stefank/8170395/webrev.02>
>
> Delta patches:
> http://cr.openjdk.java.net/~stefank/8170395/webrev.02.01.verify_global_initialization
> <http://cr.openjdk.java.net/~stefank/8170395/webrev.02.01.verify_global_initialization>
> http://cr.openjdk.java.net/~stefank/8170395/webrev.02.02.revert_enum <http://cr.openjdk.java.net/~stefank/8170395/webrev.02.02.revert_enum>
> http://cr.openjdk.java.net/~stefank/8170395/webrev.02.03.unused_parameter
> <http://cr.openjdk.java.net/~stefank/8170395/webrev.02.03.unused_parameter>
>
> I consider pushing the last patch as a separate changeset.
>
> This is the entire patch without the unused_parameter patch:
> http://cr.openjdk.java.net/~stefank/8170395/webrev.02.01-02
> <http://cr.openjdk.java.net/~stefank/8170395/webrev.02.01-02>
>
> Thanks,
> StefanK
>
> On 2016-11-28 14:52, Stefan Karlsson wrote:
>
> Hi all,
>
> Please, review this patch to fix metaspace initialization.
>
> http://cr.openjdk.java.net/~stefank/8170395/webrev.01/
> <http://cr.openjdk.java.net/~stefank/8170395/webrev.01/>
> https://bugs.openjdk.java.net/browse/JDK-8170395
> <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