[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)
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.