grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v4 2/2] mm: Preallocate some space when adding new regions


From: Patrick Steinhardt
Subject: Re: [PATCH v4 2/2] mm: Preallocate some space when adding new regions
Date: Wed, 18 Jan 2023 08:14:13 +0100

On Sat, Jan 14, 2023 at 09:23:23PM +0800, Zhang Boyang wrote:
> When grub_memalign() encounters out-of-memory, it will try
> grub_mm_add_region_fn() to request more memory from system firmware.
> However, it doesn't preallocate memory space for future allocation
> requests. In extreme cases, it requires one call to
> grub_mm_add_region_fn() for each memory allocation request. This can be
> very slow.
> 
> This patch introduces GRUB_MM_HEAP_GROW_EXTRA, the minimal heap growth
> granularity. The new region size is now set to the bigger one of its
> original value and GRUB_MM_HEAP_GROW_EXTRA. Thus, it will result in some
> memory space preallocated if current allocations request is small.
> 
> The value of GRUB_MM_HEAP_GROW_EXTRA is set to 1MB. If this value is
> smaller, the cost of small memory allocations will be higher. If this
> value is larger, more memory will be wasted and it might cause
> out-of-memory on machines with small amount of RAM.
> 
> Signed-off-by: Zhang Boyang <zhangboyang.id@gmail.com>
> ---
>  grub-core/kern/mm.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/grub-core/kern/mm.c b/grub-core/kern/mm.c
> index 278756dea..4e220bbff 100644
> --- a/grub-core/kern/mm.c
> +++ b/grub-core/kern/mm.c
> @@ -123,6 +123,9 @@
>  /* The size passed to grub_mm_add_region_fn() is aligned up by this value. */
>  #define GRUB_MM_HEAP_GROW_ALIGN      4096
>  
> +/* Minimal heap growth granularity when existing heap space is exhausted. */
> +#define GRUB_MM_HEAP_GROW_EXTRA      0x100000
> +
>  grub_mm_region_t grub_mm_base;
>  grub_mm_add_region_func_t grub_mm_add_region_fn;
>  
> @@ -471,6 +474,9 @@ grub_memalign (grub_size_t align, grub_size_t size)
>    if (grub_add (size + align, GRUB_MM_MGMT_OVERHEAD, &grow))
>      goto fail;
>  
> +  /* Preallocate some extra space if heap growth is small. */
> +  grow = grub_max (grow, GRUB_MM_HEAP_GROW_EXTRA);
> +
>    /* Align up heap growth to make it friendly to CPU/MMU. */
>    if (grow > ~(grub_size_t) (GRUB_MM_HEAP_GROW_ALIGN - 1))
>      goto fail;

    Reviewed-by: Patrick Steinhardt <ps@pks.im>

Thanks for both patches!

Patrick

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]