glibc/malloc
Siddhesh Poyarekar 0930ff8eb3 realloc: Limit chunk reuse to only growing requests [BZ #30579]
The trim_threshold is too aggressive a heuristic to decide if chunk
reuse is OK for reallocated memory; for repeated small, shrinking
allocations it leads to internal fragmentation and for repeated larger
allocations that fragmentation may blow up even worse due to the dynamic
nature of the threshold.

Limit reuse only when it is within the alignment padding, which is 2 *
size_t for heap allocations and a page size for mmapped allocations.
There's the added wrinkle of THP, but this fix ignores it for now,
pessimizing that case in favor of keeping fragmentation low.

This resolves BZ #30579.

Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
Reported-by: Nicolas Dusart <nicolas@freedelity.be>
Reported-by: Aurelien Jarno <aurelien@aurel32.net>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Tested-by: Aurelien Jarno <aurelien@aurel32.net>
(cherry picked from commit 2fb12bbd09)
2023-07-06 11:39:28 -04:00
..
alloc_buffer_alloc_array.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
alloc_buffer_allocate.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
alloc_buffer_copy_bytes.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
alloc_buffer_copy_string.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
alloc_buffer_create_failure.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
arena.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
Depend added rt to malloc/Depend [BZ #27132] 2021-02-23 10:04:45 +01:00
dynarray_at_failure.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dynarray_emplace_enlarge.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dynarray_finalize.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dynarray_resize_clear.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dynarray_resize.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dynarray-skeleton.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dynarray.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
hooks.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
Makefile Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
malloc-check.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
malloc-debug.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
malloc-internal.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
malloc.c realloc: Limit chunk reuse to only growing requests [BZ #30579] 2023-07-06 11:39:28 -04:00
malloc.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
mallocbug.c Reformat malloc to gnu style. 2014-01-02 09:40:10 +01:00
mcheck-impl.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
mcheck-init.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
mcheck.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
mcheck.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
memusage.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
memusage.sh Update copyright dates not handled by scripts/update-copyrights 2023-01-06 21:45:36 +00:00
memusagestat.c Update copyright dates not handled by scripts/update-copyrights 2023-01-06 21:45:36 +00:00
morecore.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
mtrace-impl.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
mtrace.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
mtrace.pl Update copyright dates not handled by scripts/update-copyrights 2023-01-06 21:45:36 +00:00
obstack.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
obstack.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
reallocarray.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
scratch_buffer_grow_preserve.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
scratch_buffer_grow.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
scratch_buffer_set_array_size.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
set-freeres.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
thread-freeres.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-alloc_buffer.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-calloc.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-compathooks-off.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-compathooks-on.c Move malloc hooks into a compat DSO 2021-07-22 18:37:59 +05:30
tst-dynarray-at-fail.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-dynarray-fail.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-dynarray-shared.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-dynarray.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-free-errno.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-interpose-aux-nothread.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-interpose-aux-thread.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-interpose-aux.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-interpose-aux.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-interpose-nothread.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-interpose-skeleton.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-interpose-static-nothread.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-interpose-static-thread.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-interpose-thread.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-mallinfo2.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-malloc_info.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-malloc-backtrace.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-malloc-check.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-malloc-fork-deadlock.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-malloc-stats-cancellation.c malloc: Run tst-malloc-stats-cancellation via test-driver.c 2021-04-07 02:35:50 +02:00
tst-malloc-tcache-leak.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-malloc-thread-exit.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-malloc-thread-fail.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-malloc-too-large.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-malloc-usable-tunables.c Initialize tunable list with the GLIBC_TUNABLES environment variable 2016-12-31 23:49:24 +05:30
tst-malloc-usable.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-malloc.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-mallocalign1.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-mallocfork2.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-mallocfork3.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-mallocfork.c Fix malloc tests build with GCC 10. 2019-06-10 22:12:08 +00:00
tst-mallocstate.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-mallopt.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-memalign.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-mtrace.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-mtrace.sh Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-mxfast.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-obstack.c Avoid -Wuse-after-free in tests [BZ #26779]. 2022-01-26 10:38:23 -07:00
tst-posix_memalign.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-pvalloc-fortify.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-pvalloc.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-realloc.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-reallocarray.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-safe-linking.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-scratch_buffer.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-tcfree1.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-tcfree2.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-tcfree3.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-trim1.c * malloc/tst-trim1.c: New file. 2007-12-16 22:57:57 +00:00
tst-valloc.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
Versions Remove unused scratch_buffer_dupfree 2022-10-28 18:43:58 +01:00