From 7608289bc9a6d73e740e0bb7c7996510a39564d6 Mon Sep 17 00:00:00 2001 From: Yi Lin Date: Fri, 14 Nov 2025 02:36:42 +0000 Subject: [PATCH] Trigger Immix defrag if space utilization is low --- src/policy/immix/defrag.rs | 4 +++- src/policy/immix/immixspace.rs | 10 ++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/policy/immix/defrag.rs b/src/policy/immix/defrag.rs index 4f56a5e3c1..2712044237 100644 --- a/src/policy/immix/defrag.rs +++ b/src/policy/immix/defrag.rs @@ -73,13 +73,15 @@ impl Defrag { exhausted_reusable_space: bool, full_heap_system_gc: bool, stress_defrag: bool, + immix_util: Option, ) { let in_defrag = defrag_enabled && (emergency_collection || (collection_attempts > 1) || !exhausted_reusable_space || stress_defrag - || (collect_whole_heap && user_triggered && full_heap_system_gc)); + || (collect_whole_heap && user_triggered && full_heap_system_gc)) + || (immix_util.is_some() && immix_util.unwrap() < 0.2); info!("Defrag: {}", in_defrag); probe!(mmtk, immix_defrag, in_defrag); self.in_defrag_collection diff --git a/src/policy/immix/immixspace.rs b/src/policy/immix/immixspace.rs index 08805df817..9cacd5c029 100644 --- a/src/policy/immix/immixspace.rs +++ b/src/policy/immix/immixspace.rs @@ -415,6 +415,16 @@ impl ImmixSpace { self.reusable_blocks.len() == 0, full_heap_system_gc, *self.common.options.immix_always_defrag, + if *self.common.options.count_live_bytes_in_gc { + let stats = self.common.global_state.live_bytes_in_last_gc.borrow(); + if let Some(immix_stats) = stats.get(&self.name()) { + Some(immix_stats.live_bytes as f64 / immix_stats.used_bytes as f64) + } else { + None + } + } else { + None + } ); self.defrag.in_defrag() }