PA: Have slab allocations use it.

This commit is contained in:
David Goldblatt 2020-03-10 13:58:57 -07:00 committed by David Goldblatt
parent 9f93625c14
commit 7be3dea82c
2 changed files with 10 additions and 44 deletions

View File

@ -443,11 +443,6 @@ arena_large_ralloc_stats_update(tsdn_t *tsdn, arena_t *arena, size_t oldusize,
arena_large_malloc_stats_update(tsdn, arena, usize); arena_large_malloc_stats_update(tsdn, arena, usize);
} }
static bool
arena_may_have_muzzy(arena_t *arena) {
return arena_muzzy_decay_ms_get(arena) != 0;
}
edata_t * edata_t *
arena_extent_alloc_large(tsdn_t *tsdn, arena_t *arena, size_t usize, arena_extent_alloc_large(tsdn_t *tsdn, arena_t *arena, size_t usize,
size_t alignment, bool *zero) { size_t alignment, bool *zero) {
@ -1006,52 +1001,25 @@ arena_destroy(tsd_t *tsd, arena_t *arena) {
base_delete(tsd_tsdn(tsd), arena->base); base_delete(tsd_tsdn(tsd), arena->base);
} }
static edata_t *
arena_slab_alloc_hard(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
const bin_info_t *bin_info, szind_t szind) {
edata_t *slab;
bool zero;
witness_assert_depth_to_rank(tsdn_witness_tsdp_get(tsdn),
WITNESS_RANK_CORE, 0);
zero = false;
slab = ecache_alloc_grow(tsdn, &arena->pa_shard, ehooks,
&arena->pa_shard.ecache_retained, NULL, bin_info->slab_size, PAGE,
true, szind, &zero);
if (config_stats && slab != NULL) {
pa_shard_stats_mapped_add(tsdn, &arena->pa_shard,
bin_info->slab_size);
}
return slab;
}
static edata_t * static edata_t *
arena_slab_alloc(tsdn_t *tsdn, arena_t *arena, szind_t binind, unsigned binshard, arena_slab_alloc(tsdn_t *tsdn, arena_t *arena, szind_t binind, unsigned binshard,
const bin_info_t *bin_info) { const bin_info_t *bin_info) {
witness_assert_depth_to_rank(tsdn_witness_tsdp_get(tsdn), witness_assert_depth_to_rank(tsdn_witness_tsdp_get(tsdn),
WITNESS_RANK_CORE, 0); WITNESS_RANK_CORE, 0);
ehooks_t *ehooks = arena_get_ehooks(arena);
szind_t szind = sz_size2index(bin_info->reg_size);
bool zero = false; bool zero = false;
edata_t *slab = ecache_alloc(tsdn, &arena->pa_shard, ehooks, size_t mapped_add = 0;
&arena->pa_shard.ecache_dirty, NULL, bin_info->slab_size, PAGE,
true, binind, &zero); edata_t *slab = pa_alloc(tsdn, &arena->pa_shard, bin_info->slab_size,
if (slab == NULL && arena_may_have_muzzy(arena)) { PAGE, /* slab */ true, /* szind */ binind, &zero, &mapped_add);
slab = ecache_alloc(tsdn, &arena->pa_shard, ehooks, if (config_stats && slab != NULL && mapped_add != 0) {
&arena->pa_shard.ecache_muzzy, NULL, bin_info->slab_size, pa_shard_stats_mapped_add(tsdn, &arena->pa_shard,
PAGE, true, binind, &zero); bin_info->slab_size);
} }
if (slab == NULL) {
slab = arena_slab_alloc_hard(tsdn, arena, ehooks, bin_info,
szind);
if (slab == NULL) { if (slab == NULL) {
return NULL; return NULL;
} }
}
assert(edata_slab_get(slab)); assert(edata_slab_get(slab));
/* Initialize slab internals. */ /* Initialize slab internals. */

View File

@ -68,6 +68,7 @@ pa_alloc(tsdn_t *tsdn, pa_shard_t *shard, size_t size, size_t alignment,
bool slab, szind_t szind, bool *zero, size_t *mapped_add) { bool slab, szind_t szind, bool *zero, size_t *mapped_add) {
witness_assert_depth_to_rank(tsdn_witness_tsdp_get(tsdn), witness_assert_depth_to_rank(tsdn_witness_tsdp_get(tsdn),
WITNESS_RANK_CORE, 0); WITNESS_RANK_CORE, 0);
*mapped_add = 0;
ehooks_t *ehooks = pa_shard_ehooks_get(shard); ehooks_t *ehooks = pa_shard_ehooks_get(shard);
@ -78,7 +79,6 @@ pa_alloc(tsdn_t *tsdn, pa_shard_t *shard, size_t size, size_t alignment,
edata = ecache_alloc(tsdn, shard, ehooks, &shard->ecache_muzzy, edata = ecache_alloc(tsdn, shard, ehooks, &shard->ecache_muzzy,
NULL, size, alignment, slab, szind, zero); NULL, size, alignment, slab, szind, zero);
} }
if (edata == NULL) { if (edata == NULL) {
edata = ecache_alloc_grow(tsdn, shard, ehooks, edata = ecache_alloc_grow(tsdn, shard, ehooks,
&shard->ecache_retained, NULL, size, alignment, slab, &shard->ecache_retained, NULL, size, alignment, slab,
@ -91,8 +91,6 @@ pa_alloc(tsdn_t *tsdn, pa_shard_t *shard, size_t size, size_t alignment,
*/ */
*mapped_add = size; *mapped_add = size;
} }
} else if (config_stats) {
*mapped_add = 0;
} }
return edata; return edata;
} }