aboutsummaryrefslogtreecommitdiffstats
path: root/src/base.c
diff options
context:
space:
mode:
authorJason Evans <je@fb.com>2015-07-28 11:28:19 -0400
committerJason Evans <je@fb.com>2015-08-03 21:49:02 -0700
commitb49a334a645b854dbb1649f15c38d646fee66738 (patch)
tree221f5a09618cadbfd0b2570d802ca68971dec440 /src/base.c
parentd059b9d6a1ac3e7f834260ba001bf0d1599fb0bf (diff)
downloadplatform_external_jemalloc_new-b49a334a645b854dbb1649f15c38d646fee66738.tar.gz
platform_external_jemalloc_new-b49a334a645b854dbb1649f15c38d646fee66738.tar.bz2
platform_external_jemalloc_new-b49a334a645b854dbb1649f15c38d646fee66738.zip
Generalize chunk management hooks.
Add the "arena.<i>.chunk_hooks" mallctl, which replaces and expands on the "arena.<i>.chunk.{alloc,dalloc,purge}" mallctls. The chunk hooks allow control over chunk allocation/deallocation, decommit/commit, purging, and splitting/merging, such that the application can rely on jemalloc's internal chunk caching and retaining functionality, yet implement a variety of chunk management mechanisms and policies. Merge the chunks_[sz]ad_{mmap,dss} red-black trees into chunks_[sz]ad_retained. This slightly reduces how hard jemalloc tries to honor the dss precedence setting; prior to this change the precedence setting was also consulted when recycling chunks. Fix chunk purging. Don't purge chunks in arena_purge_stashed(); instead deallocate them in arena_unstash_purged(), so that the dirty memory linkage remains valid until after the last time it is used. This resolves #176 and #201.
Diffstat (limited to 'src/base.c')
-rw-r--r--src/base.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/base.c b/src/base.c
index df3ddb63..5493d0f9 100644
--- a/src/base.c
+++ b/src/base.c
@@ -66,7 +66,7 @@ base_chunk_alloc(size_t minsize)
base_resident += PAGE_CEILING(nsize);
}
}
- extent_node_init(node, NULL, addr, csize, true);
+ extent_node_init(node, NULL, addr, csize, true, true);
return (node);
}
@@ -90,7 +90,7 @@ base_alloc(size_t size)
csize = CACHELINE_CEILING(size);
usize = s2u(csize);
- extent_node_init(&key, NULL, NULL, usize, false);
+ extent_node_init(&key, NULL, NULL, usize, true, false);
malloc_mutex_lock(&base_mtx);
node = extent_tree_szad_nsearch(&base_avail_szad, &key);
if (node != NULL) {