Bypass extent_alloc_wrapper_hard for no_move_expand.
When retain is enabled, we should not attempt mmap for in-place expansion (large_ralloc_no_move), because it's virtually impossible to succeed, and causes unnecessary syscalls (which can cause lock contention under load).
This commit is contained in:
parent
2d2fa72647
commit
3800e55a2c
@ -1296,6 +1296,15 @@ extent_alloc_wrapper(tsdn_t *tsdn, arena_t *arena,
|
|||||||
extent_t *extent = extent_alloc_retained(tsdn, arena, r_extent_hooks,
|
extent_t *extent = extent_alloc_retained(tsdn, arena, r_extent_hooks,
|
||||||
new_addr, size, pad, alignment, slab, szind, zero, commit);
|
new_addr, size, pad, alignment, slab, szind, zero, commit);
|
||||||
if (extent == NULL) {
|
if (extent == NULL) {
|
||||||
|
if (opt_retain && new_addr != NULL) {
|
||||||
|
/*
|
||||||
|
* When retain is enabled and new_addr is set, we do not
|
||||||
|
* attempt extent_alloc_wrapper_hard which does mmap
|
||||||
|
* that is very unlikely to succeed (unless it happens
|
||||||
|
* to be at the end).
|
||||||
|
*/
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
extent = extent_alloc_wrapper_hard(tsdn, arena, r_extent_hooks,
|
extent = extent_alloc_wrapper_hard(tsdn, arena, r_extent_hooks,
|
||||||
new_addr, size, pad, alignment, slab, szind, zero, commit);
|
new_addr, size, pad, alignment, slab, szind, zero, commit);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user