Arena: fill in terms of cache_bins.

This commit is contained in:
David Goldblatt 2020-04-07 17:49:50 -07:00 committed by David Goldblatt
parent 40e7aed59e
commit 7099c66205
3 changed files with 16 additions and 13 deletions

View File

@ -48,8 +48,9 @@ void arena_decay(tsdn_t *tsdn, arena_t *arena, bool is_background_thread,
bool all); bool all);
void arena_reset(tsd_t *tsd, arena_t *arena); void arena_reset(tsd_t *tsd, arena_t *arena);
void arena_destroy(tsd_t *tsd, arena_t *arena); void arena_destroy(tsd_t *tsd, arena_t *arena);
void arena_tcache_fill_small(tsdn_t *tsdn, arena_t *arena, tcache_t *tcache, void arena_cache_bin_fill_small(tsdn_t *tsdn, arena_t *arena,
cache_bin_t *tbin, szind_t binind); cache_bin_t *cache_bin, cache_bin_info_t *cache_bin_info, szind_t binind,
const unsigned nfill);
void *arena_malloc_hard(tsdn_t *tsdn, arena_t *arena, size_t size, void *arena_malloc_hard(tsdn_t *tsdn, arena_t *arena, size_t size,
szind_t ind, bool zero); szind_t ind, bool zero);

View File

@ -821,17 +821,15 @@ arena_bin_choose_lock(tsdn_t *tsdn, arena_t *arena, szind_t binind,
} }
void void
arena_tcache_fill_small(tsdn_t *tsdn, arena_t *arena, tcache_t *tcache, arena_cache_bin_fill_small(tsdn_t *tsdn, arena_t *arena,
cache_bin_t *tbin, szind_t binind) { cache_bin_t *cache_bin, cache_bin_info_t *cache_bin_info, szind_t binind,
assert(cache_bin_ncached_get(tbin, &tcache_bin_info[binind]) == 0); const unsigned nfill) {
tcache->bin_refilled[binind] = true; assert(cache_bin_ncached_get(cache_bin, cache_bin_info) == 0);
const bin_info_t *bin_info = &bin_infos[binind]; const bin_info_t *bin_info = &bin_infos[binind];
const unsigned nfill = cache_bin_info_ncached_max(
&tcache_bin_info[binind]) >> tcache->lg_fill_div[binind];
CACHE_BIN_PTR_ARRAY_DECLARE(ptrs, nfill); CACHE_BIN_PTR_ARRAY_DECLARE(ptrs, nfill);
cache_bin_init_ptr_array_for_fill(tbin, &tcache_bin_info[binind], &ptrs, cache_bin_init_ptr_array_for_fill(cache_bin, cache_bin_info, &ptrs,
nfill); nfill);
/* /*
* Bin-local resources are used first: 1) bin->slabcur, and 2) nonfull * Bin-local resources are used first: 1) bin->slabcur, and 2) nonfull
@ -915,10 +913,10 @@ label_refill:
if (config_stats && !alloc_and_retry) { if (config_stats && !alloc_and_retry) {
bin->stats.nmalloc += filled; bin->stats.nmalloc += filled;
bin->stats.nrequests += tbin->tstats.nrequests; bin->stats.nrequests += cache_bin->tstats.nrequests;
bin->stats.curregs += filled; bin->stats.curregs += filled;
bin->stats.nfills++; bin->stats.nfills++;
tbin->tstats.nrequests = 0; cache_bin->tstats.nrequests = 0;
} }
malloc_mutex_unlock(tsdn, &bin->lock); malloc_mutex_unlock(tsdn, &bin->lock);
@ -944,7 +942,7 @@ label_refill:
fresh_slab = NULL; fresh_slab = NULL;
} }
cache_bin_finish_fill(tbin, &tcache_bin_info[binind], &ptrs, filled); cache_bin_finish_fill(cache_bin, cache_bin_info, &ptrs, filled);
arena_decay_tick(tsdn, arena); arena_decay_tick(tsdn, arena);
} }

View File

@ -103,7 +103,11 @@ tcache_alloc_small_hard(tsdn_t *tsdn, arena_t *arena, tcache_t *tcache,
void *ret; void *ret;
assert(tcache->arena != NULL); assert(tcache->arena != NULL);
arena_tcache_fill_small(tsdn, arena, tcache, tbin, binind); unsigned nfill = cache_bin_info_ncached_max(&tcache_bin_info[binind])
>> tcache->lg_fill_div[binind];
arena_cache_bin_fill_small(tsdn, arena, tbin, &tcache_bin_info[binind],
binind, nfill);
tcache->bin_refilled[binind] = true;
ret = cache_bin_alloc(tbin, tcache_success); ret = cache_bin_alloc(tbin, tcache_success);
return ret; return ret;