From 2a3b8eb69607e38cb0f8d962ca651a399faedffe Mon Sep 17 00:00:00 2001 From: Sergiy Kuryata Date: Mon, 4 Nov 2024 21:22:45 -0800 Subject: [PATCH] Do not call mi_abandoned_collect on allocation path as it consumes substantial amount of CPU time --- src/heap.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/heap.c b/src/heap.c index dfdb5620..e94d7c54 100644 --- a/src/heap.c +++ b/src/heap.c @@ -702,7 +702,6 @@ static mi_decl_noinline void mi_segment_visit_pages(mi_heap_t* heap, mi_segment_ } void mi_heap_drop_segment(mi_heap_t* heap, size_t targetSegmentCount) { - bool segmentsDropped = false; while (heap->tld->segments.count >= targetSegmentCount) { @@ -712,7 +711,6 @@ void mi_heap_drop_segment(mi_heap_t* heap, size_t targetSegmentCount) { break; } - segmentsDropped = true; // 2. when abandoning, mark all pages to no longer add to delayed_free mi_segment_visit_pages(heap, segmentToAbandon, &mi_heap_page_never_delayed_free, NULL); @@ -725,12 +723,6 @@ void mi_heap_drop_segment(mi_heap_t* heap, size_t targetSegmentCount) { mi_collect_t collect = MI_ABANDON; mi_segment_visit_pages(heap, segmentToAbandon, &mi_heap_page_collect, &collect); } - - if (segmentsDropped) { - // collect abandoned segments (in particular, purge expired parts of segments in the abandoned segment list) - // note: forced purge can be quite expensive if many threads are created/destroyed so we do not force on abandonment - _mi_abandoned_collect(heap, false /* force? */, &heap->tld->segments); - } } void mi_heap_drop_segment_if_required(mi_heap_t* heap, size_t alloc_block_size)