diff options
author | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2022-12-08 16:32:56 +0000 |
---|---|---|
committer | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2022-12-09 11:30:55 +0000 |
commit | dc23cc80210799f8d8ab5b1ea2e00341e613a1a7 (patch) | |
tree | a29d4ff6adcafc6869e8e3e89e24059378b47999 /malloc/arena.c | |
parent | da7a5b5f4df247726806ec7c5ce57d6bf4290a01 (diff) | |
download | glibc-dc23cc80210799f8d8ab5b1ea2e00341e613a1a7.tar.gz glibc-dc23cc80210799f8d8ab5b1ea2e00341e613a1a7.tar.xz glibc-dc23cc80210799f8d8ab5b1ea2e00341e613a1a7.zip |
cheri: malloc: Set fixed mmap_threshold for capability narrowing
Capability narrowing requires extra alignment for large allocations, this can cause significant heap fragmentation so ensure large allocations use a single mmap and unmaped on free. The fragmentation is bug 14581. This patch disables dynamic mmap threshold when cap_narrowing is enabled and uses a threshold of 256 kbytes on morello (which means at most 64 byte alignment requirement on the heap). The dynamic threshold could quickly grow very big and stay there making the fragmentation issue common.
Diffstat (limited to 'malloc/arena.c')
-rw-r--r-- | malloc/arena.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/malloc/arena.c b/malloc/arena.c index c63cb70f74..05df8c1510 100644 --- a/malloc/arena.c +++ b/malloc/arena.c @@ -331,7 +331,13 @@ ptmalloc_init (void) if (TUNABLE_GET_FULL (glibc, mem, cap_narrowing, int32_t, NULL) == 0) cap_narrowing_enabled = false; else - cap_narrowing_enabled = true; + { + cap_narrowing_enabled = true; +# ifdef __CAP_MMAP_THRESHOLD + /* Default mmap threshold to avoid heap fragmentation. */ + do_set_mmap_threshold (__CAP_MMAP_THRESHOLD); +# endif + } #endif cap_init (); |