PING: RFC for new JEP: Reduce metaspace waste by dynamically merging and splitting metaspace chunks.
Mikael Gerdin
mikael.gerdin at oracle.com
Tue Oct 11 09:26:56 UTC 2016
Hi Thomas,
I have some questions about how your suggested change affects the
allocation policy.
Currently, once a SpaceManager has reached the _small_chunk_limit it
will only allocate medium chunks even if an allocation request could be
satisfied with a smaller variant.
If metaspace is sufficiently fragmented by small chunks such that a
medium chunk cannot be coalesced then we can still fail to satisfy an
allocation request with large amounts of free memory, is this something
that you have observed?
Thanks
/Mikael
On 2016-10-10 10:56, Thomas Stüfe wrote:
> Hi all,
>
> May I have please some feedback for this enhancement proposal?
>
> https://bugs.openjdk.java.net/browse/JDK-8166690
> <https://bugs.openjdk.java.net/browse/JDK-8166690>
>
>
> In one very short sentence it proposes a better allocation scheme for
> Metaspace Chunks in order to reduce fragmentation and metaspace waste.
>
> I also added a short presentation which describes the problem and how we
> solved it in our VM port.
>
> https://bugs.openjdk.java.net/secure/attachment/63894/Metaspace%20Coalescation%20in%20the%20SAP%20JVM.pdf
>
> Thank you very much!
>
> Kind Regards, Thomas
>
>
> On Tue, Sep 27, 2016 at 10:45 AM, Thomas Stüfe <thomas.stuefe at gmail.com
> <mailto:thomas.stuefe at gmail.com>> wrote:
>
> Dear all,
>
> please take a look at this Enhancement Proposal for the metaspace
> allocator. I hope these are the right groups for this discussion.
>
> https://bugs.openjdk.java.net/browse/JDK-8166690
> <https://bugs.openjdk.java.net/browse/JDK-8166690>
>
> Background:
>
> We at SAP see at times at customer installations OOMs in Metaspace
> (usually, with compressed class pointers enabled, in Compressed
> Class Space). The VM attempts to allocate metaspace and fails,
> hitting the CompressedClassSpaceSize limit. Note that we usually set
> the limit lower than the default, typically at 256M.
>
> When analyzing, we observed that a large part of the metaspace is
> indeed free but "locked in" into metaspace chunks of the wrong size:
> often we would find a lot of free small chunks, but the allocation
> request was for medium chunks, and failed.
>
> The reason was that if at some point in time a lot of class loaders
> were alive, each with only a few small classes loaded. This would
> lead to the metaspace being swamped with lots of small chunks. This
> is because each SpaceManager first allocates small chunks, only
> after a certain amount of allocation requests switches to larger chunks.
>
> These small chunks are free and wait in the freelist, but cannot be
> reused for allocation requests which require larger chunks, even if
> they are physically adjacent in the virtual space.
>
> We (at SAP) added a patch which allows on-the-fly metaspace chunk
> merging - to merge multiple adjacent smaller chunk to form a larger
> chunk. This, in combination with the reverse direction - splitting a
> large chunk to get smaller chunks - partly negates the
> "chunks-are-locked-in-into-their-size" limitation and provides for
> better reuse of metaspace chunks. It also provides better
> defragmentation as well.
>
> I discussed this fix off-list with Coleen Phillimore and Jon
> Masamitsu, and instead of just offering this as a fix, both
> recommended to open a JEP for this, because its scope would be
> beyond that of a simple fix.
>
> So here is my first JEP :) I hope it follows the right form. Please,
> if you have time, take a look and tell us what you think.
>
> Thank you, and Kind Regards,
>
> Thomas Stüfe
>
>
>
>
More information about the hotspot-gc-dev
mailing list