From 45bf8b3a75492085f2a7a0563b301caabfbeb63d Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Mon, 18 Nov 2013 17:41:37 +0100 Subject: [PATCH] * grub-core/kern/mm.c (grub_real_malloc): Decrease cut-off of moving the pointer to 32K. This is the size of cache element which is the most common allocation >1K. This way the pointer is always around blocks of 32K and so we keep performance while decreasing fragmentation. --- ChangeLog | 7 +++++++ grub-core/kern/mm.c | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index ba6af6af6..6b66c8e51 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2013-11-18 Vladimir Serbinenko + + * grub-core/kern/mm.c (grub_real_malloc): Decrease cut-off of moving the + pointer to 32K. This is the size of cache element which is the most + common allocation >1K. This way the pointer is always around blocks + of 32K and so we keep performance while decreasing fragmentation. + 2013-11-18 Vladimir Serbinenko * grub-core/kern/mm.c (grub_real_malloc): Don't update the pointer to diff --git a/grub-core/kern/mm.c b/grub-core/kern/mm.c index 53f3475f5..1c3d02388 100644 --- a/grub-core/kern/mm.c +++ b/grub-core/kern/mm.c @@ -299,7 +299,7 @@ grub_real_malloc (grub_mm_header_t *first, grub_size_t n, grub_size_t align) This will have side effect of fragmenting memory as small pieces before this will be un-used. */ /* So do it only for chunks under 64K. */ - if (n < (0x10000 >> GRUB_MM_ALIGN_LOG2) + if (n < (0x8000 >> GRUB_MM_ALIGN_LOG2) || *first == p) *first = q;