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