Integrated: JDK-8312492: Remove THP sanity checks at VM startup
Thomas Stuefe
stuefe at openjdk.org
Mon Jul 31 16:55:01 UTC 2023
On Fri, 21 Jul 2023 08:05:47 GMT, Thomas Stuefe <stuefe at 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 at 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
More information about the hotspot-runtime-dev
mailing list