glibc/malloc
Siddhesh Poyarekar 2fb12bbd09 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>
2023-07-06 11:10:27 -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 Fix all the remaining misspellings -- BZ 25337 2023-06-02 01:39:48 +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 malloc: Decrease resource usage for malloc tests 2023-06-12 14:45:24 -03:00
malloc-check.c Remove --enable-tunables configure option 2023-03-29 14:33:06 -03:00
malloc-debug.c Fix all the remaining misspellings -- BZ 25337 2023-06-02 01:39:48 +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:10:27 -04:00
malloc.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
mallocbug.c
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 Move {read,write}_all functions to a dedicated header 2023-06-06 08:23:53 -04:00
memusage.sh Update copyright dates not handled by scripts/update-copyrights 2023-01-06 21:45:36 +00:00
memusagestat.c Move {read,write}_all functions to a dedicated header 2023-06-06 08:23:53 -04: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 malloc: Only set pragma weak for rpc freemem if required 2023-04-05 09:03:42 -03:00
thread-freeres.c Move libc_freeres_ptrs and libc_subfreeres to hidden/weak functions 2023-03-27 13:57:55 -03:00
tst-aligned-alloc-static.c aligned_alloc: conform to C17 2023-05-08 16:40:10 -04:00
tst-aligned-alloc.c aligned_alloc: conform to C17 2023-05-08 16:40:10 -04: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 Fix a few more typos I missed in previous round -- BZ 25337 2023-06-02 23:46:32 +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 Fix all the remaining misspellings -- BZ 25337 2023-06-02 01:39:48 +00:00
tst-mallocfork3.c Fix all the remaining misspellings -- BZ 25337 2023-06-02 01:39:48 +00:00
tst-mallocfork.c Fix malloc tests build with GCC 10. 2019-06-10 22:12:08 +00:00
tst-mallocstate.c Fix all the remaining misspellings -- BZ 25337 2023-06-02 01:39:48 +00:00
tst-mallopt.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-memalign-2.c malloc: set NON_MAIN_ARENA flag for reclaimed memalign chunk (BZ #30101) 2023-04-18 10:58:42 -04:00
tst-memalign-3.c malloc: set NON_MAIN_ARENA flag for reclaimed memalign chunk (BZ #30101) 2023-04-18 10:58:42 -04: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
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