From 9322123a9756ee98796f193dd30f582119e17b4c Mon Sep 17 00:00:00 2001 From: daan Date: Fri, 12 Nov 2021 19:32:57 -0800 Subject: [PATCH 1/3] start eager commit delay at N>2 --- src/options.c | 2 +- src/segment.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/options.c b/src/options.c index 21edd97c..e01e4665 100644 --- a/src/options.c +++ b/src/options.c @@ -89,7 +89,7 @@ static mi_option_desc_t options[_mi_option_last] = { 1, UNINIT, MI_OPTION(eager_commit_delay) }, // the first N segments per thread are not eagerly committed (but per page in the segment on demand) #endif { 1, UNINIT, MI_OPTION(allow_decommit) }, // decommit slices when no longer used (after reset_delay milli-seconds) - { 50, UNINIT, MI_OPTION(reset_delay) }, // page reset delay in milli-seconds (= decommit) + { 50, UNINIT, MI_OPTION(reset_delay) }, // page reset delay in milli-seconds (= decommit) { 500, UNINIT, MI_OPTION(segment_decommit_delay) },// decommit delay in milli-seconds for freed segments { 0, UNINIT, MI_OPTION(use_numa_nodes) }, // 0 = use available numa nodes, otherwise use at most N nodes. { 0, UNINIT, MI_OPTION(limit_os_alloc) }, // 1 = do not use OS memory for allocation (but only reserved arenas) diff --git a/src/segment.c b/src/segment.c index a37252f5..794a0541 100644 --- a/src/segment.c +++ b/src/segment.c @@ -656,7 +656,7 @@ static mi_segment_t* mi_segment_init(mi_segment_t* segment, size_t required, mi_ const size_t segment_size = segment_slices * MI_SEGMENT_SLICE_SIZE; // Commit eagerly only if not the first N lazy segments (to reduce impact of many threads that allocate just a little) - const bool eager_delay = (_mi_current_thread_count() > 4 && tld->count < (size_t)mi_option_get(mi_option_eager_commit_delay)); + const bool eager_delay = (_mi_current_thread_count() > 2 && tld->count < (size_t)mi_option_get(mi_option_eager_commit_delay)); const bool eager = !eager_delay && mi_option_is_enabled(mi_option_eager_commit); bool commit = eager || (required > 0); From f58b4d923ad5f565822a420623f4d90354458d8d Mon Sep 17 00:00:00 2001 From: daan Date: Fri, 12 Nov 2021 19:58:49 -0800 Subject: [PATCH 2/3] comment --- src/segment.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/segment.c b/src/segment.c index 794a0541..01fbe022 100644 --- a/src/segment.c +++ b/src/segment.c @@ -425,7 +425,7 @@ static void mi_segment_perhaps_decommit(mi_segment_t* segment, uint8_t* p, size_ else if (segment->decommit_expire <= now) { // previous decommit mask already expired // mi_segment_delayed_decommit(segment, true, stats); - segment->decommit_expire = now + 1; + segment->decommit_expire = now + 1; // wait a tiny bit longer in case there is a series of free's } else { // previous decommit mask is not yet expired From d52b559b571a14bb190a7cd7de15c2d23f0804a3 Mon Sep 17 00:00:00 2001 From: daan Date: Fri, 12 Nov 2021 19:59:59 -0800 Subject: [PATCH 3/3] use eager delay after 2 threads --- src/segment.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/segment.c b/src/segment.c index 1fffd745..64b4720c 100644 --- a/src/segment.c +++ b/src/segment.c @@ -579,7 +579,7 @@ static mi_segment_t* mi_segment_init(mi_segment_t* segment, size_t required, mi_ mi_assert_internal(segment_size >= required); // Initialize parameters - const bool eager_delayed = (page_kind <= MI_PAGE_MEDIUM && _mi_current_thread_count() > 4 && + const bool eager_delayed = (page_kind <= MI_PAGE_MEDIUM && _mi_current_thread_count() > 2 && tld->count < (size_t)mi_option_get(mi_option_eager_commit_delay)); const bool eager = !eager_delayed && mi_option_is_enabled(mi_option_eager_commit); bool commit = eager; // || (page_kind >= MI_PAGE_LARGE);