mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-07 15:59:32 +03:00
Do not call mi_abandoned_collect on allocation path as it consumes substantial amount of CPU time
This commit is contained in:
parent
911de68d3e
commit
2a3b8eb696
1 changed files with 0 additions and 8 deletions
|
@ -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) {
|
void mi_heap_drop_segment(mi_heap_t* heap, size_t targetSegmentCount) {
|
||||||
bool segmentsDropped = false;
|
|
||||||
|
|
||||||
while (heap->tld->segments.count >= targetSegmentCount) {
|
while (heap->tld->segments.count >= targetSegmentCount) {
|
||||||
|
|
||||||
|
@ -712,7 +711,6 @@ void mi_heap_drop_segment(mi_heap_t* heap, size_t targetSegmentCount) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
segmentsDropped = true;
|
|
||||||
// 2. when abandoning, mark all pages to no longer add to delayed_free
|
// 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);
|
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_collect_t collect = MI_ABANDON;
|
||||||
mi_segment_visit_pages(heap, segmentToAbandon, &mi_heap_page_collect, &collect);
|
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)
|
void mi_heap_drop_segment_if_required(mi_heap_t* heap, size_t alloc_block_size)
|
||||||
|
|
Loading…
Add table
Reference in a new issue