Skip to content

Commit 5bbac70

Browse files
committed
Add mmtk_heap_min to GC.config
1 parent 89f8b8b commit 5bbac70

File tree

4 files changed

+24
-0
lines changed

4 files changed

+24
-0
lines changed

gc/mmtk/mmtk.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -635,6 +635,8 @@ rb_gc_impl_config_get(void *objspace_ptr)
635635
rb_hash_aset(hash, ID2SYM(rb_intern_const("mmtk_worker_count")), RB_ULONG2NUM(mmtk_worker_count()));
636636
rb_hash_aset(hash, ID2SYM(rb_intern_const("mmtk_plan")), rb_str_new_cstr((const char *)mmtk_plan()));
637637
rb_hash_aset(hash, ID2SYM(rb_intern_const("mmtk_heap_mode")), rb_str_new_cstr((const char *)mmtk_heap_mode()));
638+
size_t heap_min = mmtk_heap_min();
639+
if (heap_min > 0) rb_hash_aset(hash, ID2SYM(rb_intern_const("mmtk_heap_min")), RB_ULONG2NUM(heap_min));
638640

639641
return hash;
640642
}

gc/mmtk/mmtk.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@ const uint8_t *mmtk_plan(void);
151151

152152
const uint8_t *mmtk_heap_mode(void);
153153

154+
size_t mmtk_heap_min(void);
155+
154156
bool mmtk_is_mmtk_object(MMTk_Address addr);
155157

156158
#endif /* MMTK_H */

gc/mmtk/src/api.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,15 @@ pub extern "C" fn mmtk_heap_mode() -> *const u8 {
359359
}
360360
}
361361

362+
#[no_mangle]
363+
pub extern "C" fn mmtk_heap_min() -> usize {
364+
match *crate::BINDING.get().unwrap().mmtk.get_options().gc_trigger {
365+
GCTriggerSelector::FixedHeapSize(_) => 0,
366+
GCTriggerSelector::DynamicHeapSize(min_size, _) => min_size,
367+
_ => panic!("Unknown heap mode")
368+
}
369+
}
370+
362371
// =============== Miscellaneous ===============
363372

364373
#[no_mangle]

test/mmtk/test_configuration.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,17 @@ def test_MMTK_THREADS
2828
end
2929
end
3030

31+
def test_MMTK_HEAP_MIN
32+
# TODO: uncomment this test when the infinite loop is fixed
33+
# assert_separately([{ "MMTK_HEAP_MODE" => "dynamic", "MMTK_HEAP_MIN" => "1" }], <<~RUBY)
34+
# assert_equal(1, GC.config[:mmtk_heap_min])
35+
# RUBY
36+
37+
assert_separately([{ "MMTK_HEAP_MODE" => "dynamic", "MMTK_HEAP_MIN" => "10MiB", "MMTK_HEAP_MAX" => "1GiB" }], <<~RUBY)
38+
assert_equal(10 * 1024 * 1024, GC.config[:mmtk_heap_min])
39+
RUBY
40+
end
41+
3142
%w(MMTK_THREADS MMTK_HEAP_MIN MMTK_HEAP_MAX MMTK_HEAP_MODE MMTK_PLAN).each do |var|
3243
define_method(:"test_invalid_#{var}") do
3344
exit_code = assert_in_out_err(

0 commit comments

Comments
 (0)