[glibc] 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=e87c151130216f5c62f0e172e3eaebbc4a5d794a

commit e87c151130216f5c62f0e172e3eaebbc4a5d794a
Author: Wilco Dijkstra <[email protected]>
Date:   Wed Apr 1 12:15:21 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]>

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 727d0517c4..ddde32c712 100644
--- a/malloc/arena.c
+++ b/malloc/arena.c
@@ -275,15 +275,6 @@ __ptmalloc_init (void)
     __always_fail_morecore = true;
 #endif
 
-  /* Enable THP if DEFAULT_THP_PAGESIZE is non-zero.  Avoid querying 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 6455a1b0e0..6a888b0eb7 100644
--- a/malloc/malloc.c
+++ b/malloc/malloc.c
@@ -5017,10 +5017,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)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.