mirror of
https://github.com/jemalloc/jemalloc.git
synced 2026-04-14 14:41:42 +03:00
Fix background_thread creation for the oversize_arena.
Bypassing background thread creation for the oversize_arena used to be an optimization since that arena had eager purging. However #2466 changed the purging policy for the oversize_arena -- specifically it switched to the default decay time when background_thread is enabled. This issue is noticable when the number of arenas is low: whenever the total # of arenas is <= 4 (which is the default max # of background threads), in which case the purging will be stalled since no background thread is created for the oversize_arena.
This commit is contained in:
parent
47d69b4eab
commit
8d8379da44
4 changed files with 2 additions and 25 deletions
|
|
@ -103,7 +103,6 @@ void arena_nthreads_inc(arena_t *arena, bool internal);
|
|||
void arena_nthreads_dec(arena_t *arena, bool internal);
|
||||
arena_t *arena_new(tsdn_t *tsdn, unsigned ind, const arena_config_t *config);
|
||||
bool arena_init_huge(arena_t *a0);
|
||||
bool arena_is_huge(unsigned arena_ind);
|
||||
arena_t *arena_choose_huge(tsd_t *tsd);
|
||||
bin_t *arena_bin_choose(tsdn_t *tsdn, arena_t *arena, szind_t binind,
|
||||
unsigned *binshard);
|
||||
|
|
|
|||
|
|
@ -1867,14 +1867,6 @@ arena_init_huge(arena_t *a0) {
|
|||
return huge_enabled;
|
||||
}
|
||||
|
||||
bool
|
||||
arena_is_huge(unsigned arena_ind) {
|
||||
if (huge_arena_ind == 0) {
|
||||
return false;
|
||||
}
|
||||
return (arena_ind == huge_arena_ind);
|
||||
}
|
||||
|
||||
bool
|
||||
arena_boot(sc_data_t *sc_data, base_t *base, bool hpa) {
|
||||
arena_dirty_decay_ms_default_set(opt_dirty_decay_ms);
|
||||
|
|
|
|||
11
src/ctl.c
11
src/ctl.c
|
|
@ -2985,17 +2985,6 @@ arena_i_decay_ms_ctl_impl(tsd_t *tsd, const size_t *mib, size_t miblen,
|
|||
ret = EINVAL;
|
||||
goto label_return;
|
||||
}
|
||||
if (arena_is_huge(arena_ind) && *(ssize_t *)newp > 0) {
|
||||
/*
|
||||
* By default the huge arena purges eagerly. If it is
|
||||
* set to non-zero decay time afterwards, background
|
||||
* thread might be needed.
|
||||
*/
|
||||
if (background_thread_create(tsd, arena_ind)) {
|
||||
ret = EFAULT;
|
||||
goto label_return;
|
||||
}
|
||||
}
|
||||
|
||||
if (arena_decay_ms_set(tsd_tsdn(tsd), arena, state,
|
||||
*(ssize_t *)newp)) {
|
||||
|
|
|
|||
|
|
@ -430,11 +430,8 @@ arena_new_create_background_thread(tsdn_t *tsdn, unsigned ind) {
|
|||
if (ind == 0) {
|
||||
return;
|
||||
}
|
||||
/*
|
||||
* Avoid creating a new background thread just for the huge arena, which
|
||||
* purges eagerly by default.
|
||||
*/
|
||||
if (have_background_thread && !arena_is_huge(ind)) {
|
||||
|
||||
if (have_background_thread) {
|
||||
if (background_thread_create(tsdn_tsd(tsdn), ind)) {
|
||||
malloc_printf("<jemalloc>: error in background thread "
|
||||
"creation for arena %u. Abort.\n", ind);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue