[glibc/release/2.43/master] malloc: Show hugetlb tunable default in --list-tunables
Wilco Dijkstra via Glibc-cvs <[email protected]>
| Newsgroups | gmane.comp.lib.glibc.cvs |
|---|---|
| Message-ID | <[email protected]> |
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=7d26579873791748c20d874adb66e877412175dd commit 7d26579873791748c20d874adb66e877412175dd Author: Wilco Dijkstra <[email protected]> Date: Fri Aug 14 14:18:01 2026 +0000 malloc: Show hugetlb tunable default in --list-tunables Update the hugetlb tunable default in elf/dl-tunables.c so it is shown as 1 with /lib/ld-linux-aarch64.so.1 --list-tunables. Move the intitialization of thp_mode/thp_pagesize to do_set_hugetlb() and avoid accessing /sys/kernel/mm if DEFAULT_THP_PAGESIZE > 0. Switch off THP if glibc.malloc.hugetlb=0 is used - this behaves as if DEFAULT_THP_PAGESIZE==0. Fix the --list-tunables testcase. Reviewed-by: DJ Delorie <[email protected]> Signed-off-by: Alexander Sverdlin <[email protected]> (cherry picked from commit e87c151130216f5c62f0e172e3eaebbc4a5d794a) Diff: --- elf/dl-tunables.c | 5 +++++ elf/tst-rtld-list-tunables.sh | 12 ++---------- malloc/arena.c | 9 --------- malloc/malloc.c | 18 +++++++++++++++++- 4 files changed, 24 insertions(+), 20 deletions(-) diff --git a/elf/dl-tunables.c b/elf/dl-tunables.c index bdb1de4ceb..1440d3fa6a 100644 --- a/elf/dl-tunables.c +++ b/elf/dl-tunables.c @@ -33,6 +33,7 @@ #include <array_length.h> #include <dl-minimal-malloc.h> #include <dl-symbol-redir-ifunc.h> +#include <malloc-hugepages.h> #define TUNABLES_INTERNAL 1 #include "dl-tunables.h" @@ -296,6 +297,10 @@ __tunables_init (char **envp) char *envval = NULL; char **prev_envp = envp; + /* Default to glibc.malloc.hugetlb=1 if DEFAULT_THP_PAGESIZE is non-zero. */ + if (DEFAULT_THP_PAGESIZE > 0) + TUNABLE_SET (glibc, malloc, hugetlb, 1); + /* Ignore tunables for AT_SECURE programs. */ if (__libc_enable_secure) return; diff --git a/elf/tst-rtld-list-tunables.sh b/elf/tst-rtld-list-tunables.sh index 669898d8c0..11b9b4597a 100755 --- a/elf/tst-rtld-list-tunables.sh +++ b/elf/tst-rtld-list-tunables.sh @@ -26,16 +26,8 @@ run_program_env=$3 LC_ALL=C export LC_ALL -# Unset tunables and their aliases. -GLIBC_TUNABLES= -MALLOC_ARENA_MAX= -MALLOC_ARENA_TEST= -MALLOC_CHECK_= -MALLOC_MMAP_MAX_= -MALLOC_MMAP_THRESHOLD_= -MALLOC_PERTURB_= -MALLOC_TOP_PAD_= -MALLOC_TRIM_THRESHOLD_= +# Unset tunables. +export GLIBC_TUNABLES=glibc.malloc.hugetlb=0 ${test_wrapper_env} \ ${run_program_env} \ diff --git a/malloc/arena.c b/malloc/arena.c index d83b4db068..5bfcd7f972 100644 --- a/malloc/arena.c +++ b/malloc/arena.c @@ -276,15 +276,6 @@ __ptmalloc_init (void) __always_fail_morecore = true; #endif - /* Enable THP if DEFAULT_THP_PAGESIZE is non-zero. Avoid quering the THP - page size or mode since accessing /sys/kernel/mm is relatively slow and - might not be accessible in containers. */ - if (DEFAULT_THP_PAGESIZE > 0) - { - mp_.thp_mode = malloc_thp_mode_madvise; - mp_.thp_pagesize = DEFAULT_THP_PAGESIZE; - } - thread_arena = &main_arena; malloc_init_state (&main_arena); diff --git a/malloc/malloc.c b/malloc/malloc.c index 771e7d40b7..af6b4fe580 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -5114,10 +5114,26 @@ do_set_mxfast (size_t value) static __always_inline int do_set_hugetlb (size_t value) { + /* Enable THP if DEFAULT_THP_PAGESIZE is non-zero. */ + if (DEFAULT_THP_PAGESIZE > 0) + { + mp_.thp_mode = malloc_thp_mode_madvise; + mp_.thp_pagesize = DEFAULT_THP_PAGESIZE; + } + if (value == 0) - mp_.thp_mode = malloc_thp_mode_never; + { + /* Turn off THP support completely. */ + mp_.thp_mode = malloc_thp_mode_never; + mp_.thp_pagesize = 0; + } else if (value == 1) { + /* Avoid querying the THP page size/mode since accessing /sys/kernel/mm + is relatively slow and might not be accessible in containers. */ + if (DEFAULT_THP_PAGESIZE > 0) + return 0; + mp_.thp_mode = __malloc_thp_mode (); if (mp_.thp_mode == malloc_thp_mode_madvise || mp_.thp_mode == malloc_thp_mode_always)