[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-hotspot-runtime-dev
Subject: Integrated: JDK-8312018: Improve reservation of class space and CDS
From: Thomas Stuefe <stuefe () openjdk ! org>
Date: 2023-08-30 17:54:54
Message-ID: ox7_O6fnbH04N-QOt9BQ0GETwl7pxSkkeaVcwX1MEeA=.b3bff704-aaf7-44e2-8606-cb2fe410e617 () github ! com
[Download RAW message or body]
On Wed, 26 Jul 2023 11:34:18 GMT, Thomas Stuefe <stuefe@openjdk.org> wrote:
> This PR rewrites memory reservation of class space and CDS to have ASLR and a much \
> better chance of low-address placement.
> ------
>
> Motivation:
>
> (I was advised to keep PR text short lest I spam the mailing lists with Skara \
> generated mails. So, for motivation, see JBS issue)
> -------
>
> The patch introduces a new API to reserve memory within an address range at a \
> randomized location, while trying to be smart about it. The API is generic, and \
> future planned uses of this API could include replacing the zero-based heap \
> allocation and the zero-based reservation of Shenandoah Collection Sets, thereby \
> allowing us to consolidate coding.
> This PR complements @iklam 's current work that rewrites archive heap \
> initialization at runtime. Once his work is in, we will be able to recalculate \
> narrow Klass IDs for objects loaded from the archive, and that will allow us to \
> reap the benefits of this patch for the CDS runtime case too.
> -------
>
> Noteworthy functional changes:
>
> - class space is now likely to be reserved at a random location in low address \
> ranges; this now includes ranges below 2 GB, which had been excluded before due to \
> the use of HeapBaseMinAddress as minimal attach point.
> - Note that this makes no problem with sbrk() - the only platform still having \
> this problem is AIX, and we solved it differently there, see comment in AIX \
> implementation of `os::vm_min_address()`
> - I removed the PPC/AARCH64 specific coding that attempted to map at 4G/32G aligned \
> addresses. That section has a complex history - it was originally introduced to \
> deal with AARCH64 immediate-loading shortcomings, but PPC piggybacked on it for its \
> perceived ability to allocate for zero-based, which got subsequently lost, so its \
> broken now (see https://bugs.openjdk.org/browse/JDK-8313669). The new code is a \
> better replacement for this coding.
> -------
>
> Example (linux amd64):
>
> We start the JVM with a 30GB heap.
>
> In the stock JVM, the JVM will place the heap in the lower address ranges starting \
> at 2G (0x8000_0000). But then it is unable to place the class space in lower \
> regions too, so it placed it at 32 GB (0x8_0000_0000), and we don't have zero-based \
> encoding (Narrow klass base: 0x0000000800000000). This scenario repeats for every \
> iteration, so we will always use these two addresses (no ASLR):
>
> thomas@starfish $ ./images/jdk/bin/java -Xshare:off -Xmx30g -Xlog:gc+heap+exit \
> -Xlog:gc+metaspace -version [0.019s][info][gc,metaspace] Compressed class space \
> mapped at: 0x0000000800000000-0x00000008400...
This pull request has now been integrated.
Changeset: 89d18ea4
Author: Thomas Stuefe <stuefe@openjdk.org>
URL: https://git.openjdk.org/jdk/commit/89d18ea40f3508f4053824fd47f0b0f85fe1d7c2
Stats: 824 lines in 17 files changed: 709 ins; 77 del; 38 mod
8312018: Improve reservation of class space and CDS
8313669: Reduced chance for zero-based nKlass encoding since JDK-8296565
Reviewed-by: iklam, adinn
-------------
PR: https://git.openjdk.org/jdk/pull/15041
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic