Skip to content

Commit 85f97bb

Browse files
committed
Always use fixed heap for NoGC
Ruby and CPU heap doesn't make any sense when using the NoGC plan.
1 parent f1f5dc0 commit 85f97bb

1 file changed

Lines changed: 26 additions & 4 deletions

File tree

‎gc/mmtk/src/api.rs‎

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)