On Thu, Dec 15, 2022 at 07:19:25PM +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 > 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...@gmail.com> > --- > grub-core/kern/mm.c | 3 ++- > include/grub/mm_private.h | 3 +++ > 2 files changed, 5 insertions(+), 1 deletion(-) > > diff --git a/grub-core/kern/mm.c b/grub-core/kern/mm.c > index 20bb54dde..f023247bb 100644 > --- a/grub-core/kern/mm.c > +++ b/grub-core/kern/mm.c > @@ -449,11 +449,12 @@ grub_memalign (grub_size_t align, grub_size_t size) > goto fail; > > /* > - * Pre-calculate the size of heap growth (if applicable), > + * Pre-calculate the optimal size of heap growth (if applicable), > * with region management overhead taken into account. > */ > if (grub_add (bound, GRUB_MM_MGMT_OVERHEAD, &grow)) > goto fail; > + grow = grub_max (grow, GRUB_MM_HEAP_GROW_EXTRA); > > align = (align >> GRUB_MM_ALIGN_LOG2); > if (align == 0) > diff --git a/include/grub/mm_private.h b/include/grub/mm_private.h > index 96c2d816b..6e4256555 100644 > --- a/include/grub/mm_private.h > +++ b/include/grub/mm_private.h > @@ -95,6 +95,9 @@ typedef struct grub_mm_region > } > *grub_mm_region_t; > > +/* Minimal heap growth granularity when existing heap space is exhausted. */ > +#define GRUB_MM_HEAP_GROW_EXTRA 0x100000
Please move this constant to the beginning of the grub-core/kern/mm.c file. Otherwise LGTM... Daniel _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel