[PATCH] malloc: Enable THP always support on hugetlb tunable
Andreas K. Huettel
andreas.huettel@ur.de
Tue Jul 8 16:35:38 GMT 2025
Am Dienstag, 8. Juli 2025, 17:10:26 Mitteleuropäische Sommerzeit schrieb William Hunt:
> Enable support for THP always when glibc.malloc.hugetlb=1, as the tunable
> currently only gives explicit support in malloc for the THP madvise mode
> by aligning to a huge page size. Add a thp_mode parameter to mp_ and check
> in madvise_thp whether the system is using madvise mode, otherwise the
> __madvise call is useless. Set the thp_mode to be unsupported by default,
> but if the hugetlb tunable is set this updates thp_mode. Performance of
> xalancbmk improves by 4.9% on Neoverse V2 when THP always mode is set on the
> system and glibc.malloc.hugetlb=1.
>
> Passed regress, OK for commit?
After the release please.
> > ---
> malloc/malloc.c | 18 +++++++++++-------
> 1 file changed, 11 insertions(+), 7 deletions(-)
>
> diff --git a/malloc/malloc.c b/malloc/malloc.c
> index 6da40ad602..e40c6c6cb0 100644
> --- a/malloc/malloc.c
> +++ b/malloc/malloc.c
> @@ -1871,6 +1871,7 @@ struct malloc_par
> INTERNAL_SIZE_T arena_max;
>
> /* Transparent Large Page support. */
> + enum malloc_thp_mode_t thp_mode;
> INTERNAL_SIZE_T thp_pagesize;
> /* A value different than 0 means to align mmap allocation to hp_pagesize
> add hp_flags on flags. */
> @@ -1927,7 +1928,8 @@ static struct malloc_par mp_ =
> .mmap_threshold = DEFAULT_MMAP_THRESHOLD,
> .trim_threshold = DEFAULT_TRIM_THRESHOLD,
> #define NARENAS_FROM_NCORES(n) ((n) * (sizeof (long) == 4 ? 2 : 8))
> - .arena_test = NARENAS_FROM_NCORES (1)
> + .arena_test = NARENAS_FROM_NCORES (1),
> + .thp_mode = malloc_thp_mode_not_supported
> #if USE_TCACHE
> ,
> .tcache_count = TCACHE_FILL_COUNT,
> @@ -2011,6 +2013,11 @@ static inline void
> madvise_thp (void *p, INTERNAL_SIZE_T size)
> {
> #ifdef MADV_HUGEPAGE
> + /* Only use __madvise if the system is using 'madvise' mode.
> + Otherwise the call is wasteful. */
> + if (mp_.thp_mode != malloc_thp_mode_madvise)
> + return;
> +
> /* Do not consider areas smaller than a huge page or if the tunable is
> not active. */
> if (mp_.thp_pagesize == 0 || size < mp_.thp_pagesize)
> @@ -5649,12 +5656,9 @@ do_set_hugetlb (size_t value)
> {
> if (value == 1)
> {
> - enum malloc_thp_mode_t thp_mode = __malloc_thp_mode ();
> - /*
> - Only enable THP madvise usage if system does support it and
> - has 'madvise' mode. Otherwise the madvise() call is wasteful.
> - */
> - if (thp_mode == malloc_thp_mode_madvise)
> + mp_.thp_mode = __malloc_thp_mode ();
> + if (mp_.thp_mode == malloc_thp_mode_madvise
> + || mp_.thp_mode == malloc_thp_mode_always)
> mp_.thp_pagesize = __malloc_default_thp_pagesize ();
> }
> else if (value >= 2)
>
--
PD Dr. Andreas K. Huettel
Institute for Experimental and Applied Physics
University of Regensburg
93040 Regensburg
Germany
tel. +49 151 241 67748 (mobile)
tel. +49 941 943 1618 (office)
e-mail andreas.huettel@ur.de
https://www.akhuettel.de/
https://www.akhuettel.de/group/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 981 bytes
Desc: This is a digitally signed message part.
URL: <https://sourceware.org/pipermail/libc-alpha/attachments/20250708/e344b6a0/attachment.sig>
More information about the Libc-alpha
mailing list