[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-hotspot-runtime-dev
Subject:    Integrated: JDK-8312492: Remove THP sanity checks at VM startup
From:       Thomas Stuefe <stuefe () openjdk ! org>
Date:       2023-07-31 16:55:01
Message-ID: vofgAPidkfIqtLE_y_hY4WbHWld_4CoaxODBAG8eYKM=.32184f98-37bf-44b5-8294-b02067539a49 () github ! com
[Download RAW message or body]

On Fri, 21 Jul 2023 08:05:47 GMT, Thomas Stuefe <stuefe@openjdk.org> wrote:

> When starting the JVM with -XX:+UseTransparentHugePages, we need to know if the OS \
> supports THPs: 
> A) We could run on a super-old kernel (very unlikely, THPs are supported since \
> 2.6.38 which is EOL since 2011) B) We could run on a kernel built without THP \
> support, e.g. an embedded device C) We could run on a system with THPs disabled by \
> the admin 
> The JVM does a little sanity test at startup: it maps an area the size of a huge \
> page - but in small pages - then calls madvise(MADV_HUGEPAGE) on it. The JVM \
> assumes if the madvise() worked, all is fine. 
> That sanity test may be expensive since we allocate (reserve AND commit) an area, \
> then signal khugepaged to fold it into a huge page. That area could be large once \
> the kernel supports 1 GB THP pages. We may end up committing 1 GB space at startup. \
> In addition to that, depending on the THP defrag settings, the allocation may \
> stall. Even if it does not stall it creates unnecessary work for both the JVM and \
> khugepaged. 
> The sanity test is also not really useful since it will happily report success on \
> systems with THPs disabled (case (C)). Arguably, that is the majority of cases on \
> existing Linux installations. 
> The correct way is to check the proc fs whether THPs are enabled. But we already do \
> that since [JDK-8310233](https://bugs.openjdk.org/browse/JDK-8310233): "Fix THP \
> detection on Linux". And that test detects all cases (A)(B)(C). Therefore we can \
> completely remove the sanity checks for THPs. 
> I tested the patch manually in a number of settings with THPs enabled, disabled, \
> and not compiled into the kernel at all. There is no behavioral difference because \
> since [JDK-8310233](https://bugs.openjdk.org/browse/JDK-8310233) we catch all \
> relevant cases before ever entering this sanity test. 
> [1] https://github.com/openjdk/jdk/blob/37ca9024ef59d99cae0bd7e25b2e6d3c1e085f97/src/hotspot/os/linux/os_linux.cpp#L3762
> 

This pull request has now been integrated.

Changeset: 5362ec9c
Author:    Thomas Stuefe <stuefe@openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/5362ec9c6e9123d00288497ac9d1879a2bb1ca64
                
Stats:     36 lines in 3 files changed: 7 ins; 26 del; 3 mod

8312492: Remove THP sanity checks at VM startup

Reviewed-by: dholmes, coleenp

-------------

PR: https://git.openjdk.org/jdk/pull/14967


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic