@@ -106,14 +106,25 @@ fn parse_float_env_var(key: &str, default: f64, min: f64, max: f64) -> f64 {
106106 . unwrap_or ( default)
107107}
108108
109- fn mmtk_builder_default_parse_heap_mode ( heap_min : usize , heap_max : usize ) -> GCTriggerSelector {
109+ fn mmtk_builder_default_parse_heap_mode (
110+ heap_min : usize ,
111+ heap_max : usize ,
112+ plan : PlanSelector ,
113+ ) -> GCTriggerSelector {
110114 let make_fixed = || GCTriggerSelector :: FixedHeapSize ( heap_max) ;
111115 let make_dynamic = || GCTriggerSelector :: DynamicHeapSize ( heap_min, heap_max) ;
112116
113117 parse_env_var_with ( "MMTK_HEAP_MODE" , |s| match s {
114118 "fixed" => Some ( make_fixed ( ) ) ,
115119 "dynamic" => Some ( make_dynamic ( ) ) ,
116120 "ruby" => {
121+ if plan == PlanSelector :: NoGC {
122+ eprintln ! (
123+ "[WARN] Cannot use ruby heap mode with NoGC. Using fixed heap mode instead."
124+ ) ;
125+ return Some ( make_fixed ( ) ) ;
126+ }
127+
117128 let min_ratio = parse_float_env_var ( "RUBY_GC_HEAP_FREE_SLOTS_MIN_RATIO" , 0.2 , 0.0 , 1.0 ) ;
118129 let goal_ratio =
119130 parse_float_env_var ( "RUBY_GC_HEAP_FREE_SLOTS_GOAL_RATIO" , 0.4 , min_ratio, 1.0 ) ;
@@ -133,6 +144,13 @@ fn mmtk_builder_default_parse_heap_mode(heap_min: usize, heap_max: usize) -> GCT
133144 Some ( GCTriggerSelector :: Delegated )
134145 }
135146 "cpu" => {
147+ if plan == PlanSelector :: NoGC {
148+ eprintln ! (
149+ "[WARN] Cannot use cpu heap mode with NoGC. Using fixed heap mode instead."
150+ ) ;
151+ return Some ( make_fixed ( ) ) ;
152+ }
153+
136154 // CPU-overhead-driven heap sizing based on Tavakolisomeh et al.,
137155 // "Heap Size Adjustment with CPU Control", MPLR '23.
138156 //
@@ -206,12 +224,16 @@ pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder {
206224 std:: process:: exit ( 1 ) ;
207225 }
208226
227+ let plan = mmtk_builder_default_parse_plan ( ) ;
228+
229+ builder. options . plan . set ( plan) ;
230+
209231 builder
210232 . options
211233 . gc_trigger
212- . set ( mmtk_builder_default_parse_heap_mode ( heap_min , heap_max ) ) ;
213-
214- builder . options . plan . set ( mmtk_builder_default_parse_plan ( ) ) ;
234+ . set ( mmtk_builder_default_parse_heap_mode (
235+ heap_min , heap_max , plan ,
236+ ) ) ;
215237
216238 Box :: into_raw ( Box :: new ( builder) )
217239}
0 commit comments