[PATCH] malloc: Support THP in arenas

Adhemerval Zanella Netto adhemerval.zanella@linaro.org
Mon Aug 4 17:56:18 GMT 2025



On 30/07/25 12:09, Wilco Dijkstra wrote:
> 
> Arenas support huge pages but not transparent huge pages.  Add this by
> also checking mp_.thp_pagesize when creating a new arena, and use madvise.
> 
> Passes regress, OK for commit?

LGTM, thanks.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

> 
> ---
> 
> diff --git a/malloc/arena.c b/malloc/arena.c
> index 90c526f23ba1b2d83a3479245179d1d93b09302d..91a4f36232094ec4f842c7cb661d7b61347320e2 100644
> --- a/malloc/arena.c
> +++ b/malloc/arena.c
> @@ -444,10 +444,13 @@ alloc_new_heap  (size_t size, size_t top_pad, size_t pagesize,
>  static heap_info *
>  new_heap (size_t size, size_t top_pad)
>  {
> -  if (mp_.hp_pagesize != 0 && mp_.hp_pagesize <= heap_max_size ())
> +  bool use_hugepage = mp_.hp_pagesize != 0;
> +  size_t pagesize = use_hugepage ? mp_.hp_pagesize : mp_.thp_pagesize;
> +
> +  if (pagesize != 0 && pagesize <= heap_max_size ())
>      {
> -      heap_info *h = alloc_new_heap (size, top_pad, mp_.hp_pagesize,
> -				     mp_.hp_flags);
> +      heap_info *h = alloc_new_heap (size, top_pad, pagesize,
> +				     use_hugepage ? mp_.hp_flags : 0);
>        if (h != NULL)
>  	return h;
>      }
> @@ -479,6 +482,8 @@ grow_heap (heap_info *h, long diff)
>        h->mprotect_size = new_size;
>      }
>  
> +  madvise_thp (h, new_size);
> +
>    h->size = new_size;
>    LIBC_PROBE (memory_heap_more, 2, h, h->size);
>    return 0;
> 
> 



More information about the Libc-alpha mailing list