mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-06 23:39:31 +03:00
limit page_reclaim to page queues of less than 4 pages; make page_commit_on_demand 0 by default.
This commit is contained in:
parent
9f1c0054b8
commit
89d629317f
2 changed files with 11 additions and 3 deletions
10
src/free.c
10
src/free.c
|
@ -202,6 +202,14 @@ void mi_free(void* p) mi_attr_noexcept
|
|||
// Multi-threaded Free (`_mt`)
|
||||
// ------------------------------------------------------
|
||||
static bool mi_page_unown_from_free(mi_page_t* page, mi_block_t* mt_free);
|
||||
static bool inline mi_page_queue_len_is_atmost( mi_heap_t* heap, size_t block_size, size_t atmost) {
|
||||
mi_page_queue_t* const pq = mi_page_queue(heap,block_size);
|
||||
mi_assert_internal(pq!=NULL);
|
||||
for(mi_page_t* p = pq->first; p!=NULL; p = p->next, atmost--) {
|
||||
if (atmost == 0) { return false; }
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static void mi_decl_noinline mi_free_try_collect_mt(mi_page_t* page, mi_block_t* mt_free) mi_attr_noexcept {
|
||||
mi_assert_internal(mi_page_is_owned(page));
|
||||
|
@ -243,7 +251,7 @@ static void mi_decl_noinline mi_free_try_collect_mt(mi_page_t* page, mi_block_t*
|
|||
}
|
||||
// can we reclaim?
|
||||
if (heap != NULL && heap->allow_page_reclaim) {
|
||||
if (heap == page->heap || // only reclaim if we were the originating heap,
|
||||
if ((heap == page->heap && mi_page_queue_len_is_atmost(heap, page->block_size, 4)) || // only reclaim if we were the originating heap, and we have at most N pages already
|
||||
(reclaim_on_free == 1 && // OR if the reclaim across heaps is allowed
|
||||
!mi_page_is_used_at_frac(page, 8) && // and the page is not too full
|
||||
!heap->tld->is_in_threadpool && // and not part of a threadpool
|
||||
|
|
|
@ -172,9 +172,9 @@ static mi_option_desc_t options[_mi_option_last] =
|
|||
{ 2, UNINIT, MI_OPTION(page_full_retain) }, // number of (small) pages to retain in the free page queues
|
||||
{ 4, UNINIT, MI_OPTION(page_max_candidates) }, // max search to find a best page candidate
|
||||
{ 0, UNINIT, MI_OPTION(max_vabits) }, // max virtual address space bits
|
||||
{ MI_DEFAULT_PAGEMAP_COMMIT,
|
||||
{ MI_DEFAULT_PAGEMAP_COMMIT,
|
||||
UNINIT, MI_OPTION(pagemap_commit) }, // commit the full pagemap upfront?
|
||||
{ 2, UNINIT, MI_OPTION(page_commit_on_demand) }, // commit pages on-demand (2 disables this on overcommit systems (like Linux))
|
||||
{ 0, UNINIT, MI_OPTION(page_commit_on_demand) }, // commit pages on-demand (2 disables this on overcommit systems (like Linux))
|
||||
};
|
||||
|
||||
static void mi_option_init(mi_option_desc_t* desc);
|
||||
|
|
Loading…
Add table
Reference in a new issue