[PATCH] malloc: Show hugetlb tunable default in --list-tunables
Wilco Dijkstra
Wilco.Dijkstra@arm.com
Tue Mar 10 19:31:42 GMT 2026
Explicitly set the hugetlb tunable value in aarch64/cpu-features.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.
Passes regress, OK for commit?
---
diff --git a/malloc/arena.c b/malloc/arena.c
index 75f2f32b5f61a33a06dc285ca9899a708c78cf10..d2ed6279226856d630cfdf734303c4b936512f58 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 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 4aac196533d896353e3a32e34fa143d03eb82627..7241a79a936999ab5c3ac989133ad4c7919eec31 100644
--- a/malloc/malloc.c
+++ b/malloc/malloc.c
@@ -5026,13 +5026,25 @@ 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;
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)
+ || mp_.thp_mode == malloc_thp_mode_always)
mp_.thp_pagesize = __malloc_default_thp_pagesize ();
}
else if (value >= 2)
diff --git a/sysdeps/unix/sysv/linux/aarch64/cpu-features.c b/sysdeps/unix/sysv/linux/aarch64/cpu-features.c
index 70d3272772f5f36a3435d0ae8919d781a1e2412e..af502eff82e05efbe0a2e9418a71473e5c7ec8b9 100644
--- a/sysdeps/unix/sysv/linux/aarch64/cpu-features.c
+++ b/sysdeps/unix/sysv/linux/aarch64/cpu-features.c
@@ -179,4 +179,8 @@ init_cpu_features (struct cpu_features *cpu_features)
if (GLRO (dl_hwcap) & HWCAP_GCS)
/* GCS status may be updated later by binary compatibility checks. */
GL (dl_aarch64_gcs) = TUNABLE_GET (glibc, cpu, aarch64_gcs, uint64_t, 0);
+
+ /* Default to glibc.malloc.hugetlb=1 if the tunable is not set. */
+ if (!TUNABLE_IS_INITIALIZED (glibc, malloc, hugetlb))
+ TUNABLE_SET (glibc, malloc, hugetlb, 1);
}
More information about the Libc-alpha
mailing list