@@ -62,6 +62,7 @@ const char *mmtk_chosen_plan = NULL;
62
62
bool mmtk_plan_is_immix = false;
63
63
bool mmtk_plan_uses_bump_pointer = false;
64
64
bool mmtk_plan_implicitly_pinning = false;
65
+ bool rb_mmtk_use_barrier = false;
65
66
66
67
size_t mmtk_pre_max_heap_size = 0 ;
67
68
size_t mmtk_post_max_heap_size = 0 ;
@@ -269,16 +270,41 @@ apply_cmdline_options(MMTk_Builder *mmtk_builder)
269
270
{
270
271
if (mmtk_chosen_plan != NULL ) {
271
272
mmtk_builder_set_plan (mmtk_builder , mmtk_chosen_plan );
272
- mmtk_plan_is_immix = strcmp (mmtk_chosen_plan , "Immix" ) == 0 || strcmp (mmtk_chosen_plan , "StickyImmix" ) == 0 ;
273
- mmtk_plan_uses_bump_pointer = mmtk_plan_is_immix ;
274
- mmtk_plan_implicitly_pinning = strcmp (mmtk_chosen_plan , "MarkSweep" ) == 0 ;
275
273
}
276
274
277
275
if (mmtk_max_heap_size > 0 ) {
278
276
mmtk_builder_set_fixed_heap_size (mmtk_builder , mmtk_max_heap_size );
279
277
}
280
278
}
281
279
280
+ static void
281
+ set_variables_from_options (MMTk_Builder * mmtk_builder )
282
+ {
283
+ mmtk_plan_is_immix = mmtk_builder_is_immix (mmtk_builder ) || mmtk_builder_is_sticky_immix (mmtk_builder );
284
+ RUBY_DEBUG_LOG ("mmtk_plan_is_immix = %d\n" , mmtk_plan_is_immix );
285
+
286
+ mmtk_plan_uses_bump_pointer = mmtk_plan_is_immix ;
287
+ RUBY_DEBUG_LOG ("mmtk_plan_uses_bump_pointer = %d\n" , mmtk_plan_uses_bump_pointer );
288
+
289
+ mmtk_plan_implicitly_pinning = mmtk_builder_is_mark_sweep (mmtk_builder );
290
+ RUBY_DEBUG_LOG ("mmtk_plan_implicitly_pinning = %d\n" , mmtk_plan_implicitly_pinning );
291
+
292
+ // We sometimes for disabling or enabling barriers to measure the impact of barriers.
293
+ const char * barrier_env_var = getenv ("RB_MMTK_FORCE_BARRIER" );
294
+ if (barrier_env_var != NULL ) {
295
+ if (strcmp (barrier_env_var , "1" ) == 0 ) {
296
+ rb_mmtk_use_barrier = true;
297
+ fprintf (stderr , "WARNING: Force enabling barrier!\n" );
298
+ } else {
299
+ rb_mmtk_use_barrier = false;
300
+ fprintf (stderr , "WARNING: Force disabling barrier!\n" );
301
+ }
302
+ } else {
303
+ rb_mmtk_use_barrier = mmtk_builder_is_sticky_immix (mmtk_builder );
304
+ }
305
+ RUBY_DEBUG_LOG ("rb_mmtk_use_barrier = %d\n" , rb_mmtk_use_barrier );
306
+ }
307
+
282
308
void
283
309
rb_mmtk_main_thread_init (void )
284
310
{
@@ -294,6 +320,9 @@ rb_mmtk_main_thread_init(void)
294
320
// (4) Apply cmdline or RUBYOPT options if set.
295
321
apply_cmdline_options (mmtk_builder );
296
322
323
+ // Set Ruby-level variables from the actually set options.
324
+ set_variables_from_options (mmtk_builder );
325
+
297
326
#if RACTOR_CHECK_MODE
298
327
ruby_binding_options .ractor_check_mode = true;
299
328
// Ruby only needs a uint32_t for the ractor ID.
0 commit comments