diff --git a/mmtk/Cargo.lock b/mmtk/Cargo.lock index 6d3db38b..e5c02fa6 100644 --- a/mmtk/Cargo.lock +++ b/mmtk/Cargo.lock @@ -436,7 +436,7 @@ dependencies = [ [[package]] name = "mmtk" version = "0.18.0" -source = "git+https://github.com/mmtk/mmtk-core.git?rev=04a47feb4598b2120598453c2cceec83986c2122#04a47feb4598b2120598453c2cceec83986c2122" +source = "git+https://github.com/mmtk/mmtk-core.git?rev=4873b4ab4016a2a5ef413463443856efa373e90c#4873b4ab4016a2a5ef413463443856efa373e90c" dependencies = [ "atomic", "atomic-traits", @@ -468,7 +468,7 @@ dependencies = [ [[package]] name = "mmtk-macros" version = "0.18.0" -source = "git+https://github.com/mmtk/mmtk-core.git?rev=04a47feb4598b2120598453c2cceec83986c2122#04a47feb4598b2120598453c2cceec83986c2122" +source = "git+https://github.com/mmtk/mmtk-core.git?rev=4873b4ab4016a2a5ef413463443856efa373e90c#4873b4ab4016a2a5ef413463443856efa373e90c" dependencies = [ "proc-macro-error", "proc-macro2", diff --git a/mmtk/Cargo.toml b/mmtk/Cargo.toml index 99244cd3..04e25c33 100644 --- a/mmtk/Cargo.toml +++ b/mmtk/Cargo.toml @@ -30,7 +30,7 @@ once_cell = "1.10.0" # - change branch # - change repo name # But other changes including adding/removing whitespaces in commented lines may break the CI. -mmtk = { git = "https://github.com/mmtk/mmtk-core.git", rev = "04a47feb4598b2120598453c2cceec83986c2122" } +mmtk = { git = "https://github.com/mmtk/mmtk-core.git", rev = "4873b4ab4016a2a5ef413463443856efa373e90c" } # Uncomment the following to build locally # mmtk = { path = "../repos/mmtk-core" } diff --git a/mmtk/src/api.rs b/mmtk/src/api.rs index 25fb34af..c0e8317d 100644 --- a/mmtk/src/api.rs +++ b/mmtk/src/api.rs @@ -290,6 +290,20 @@ pub extern "C" fn process(name: *const c_char, value: *const c_char) -> bool { ) } +/// Pass hotspot `ParallelGCThreads` flag to mmtk +#[no_mangle] +pub extern "C" fn mmtk_builder_set_threads(value: usize) { + let mut builder = BUILDER.lock().unwrap(); + builder.options.threads.set(value); +} + +/// Pass hotspot `UseTransparentHugePages` flag to mmtk +#[no_mangle] +pub extern "C" fn mmtk_builder_set_transparent_hugepages(value: bool) { + let mut builder = BUILDER.lock().unwrap(); + builder.options.transparent_hugepages.set(value); +} + #[no_mangle] // We trust the name/value pointer is valid. #[allow(clippy::not_unsafe_ptr_arg_deref)] diff --git a/openjdk/mmtk.h b/openjdk/mmtk.h index ab47acca..3dacf6a9 100644 --- a/openjdk/mmtk.h +++ b/openjdk/mmtk.h @@ -211,6 +211,9 @@ extern void add_phantom_candidate(void* ref, void* referent); extern void mmtk_harness_begin_impl(); extern void mmtk_harness_end_impl(); +extern void mmtk_builder_set_threads(size_t value); +extern void mmtk_builder_set_transparent_hugepages(bool value); + #ifdef __cplusplus } #endif diff --git a/openjdk/mmtkHeap.cpp b/openjdk/mmtkHeap.cpp index 4197f64d..eb6f4e2e 100644 --- a/openjdk/mmtkHeap.cpp +++ b/openjdk/mmtkHeap.cpp @@ -84,6 +84,8 @@ jint MMTkHeap::initialize() { // printf("policy max heap size %zu, min heap size %zu\n", heap_size, collector_policy()->min_heap_byte_size()); // Set options + mmtk_builder_set_threads(ParallelGCThreads); + mmtk_builder_set_transparent_hugepages(UseTransparentHugePages); if (ThirdPartyHeapOptions != NULL) { bool set_options = process_bulk(strdup(ThirdPartyHeapOptions)); guarantee(set_options, "Failed to set MMTk options. Please check if the options are valid: %s\n", ThirdPartyHeapOptions); diff --git a/openjdk/thirdPartyHeapArguments.cpp b/openjdk/thirdPartyHeapArguments.cpp index 745250df..326b646f 100644 --- a/openjdk/thirdPartyHeapArguments.cpp +++ b/openjdk/thirdPartyHeapArguments.cpp @@ -45,6 +45,12 @@ void ThirdPartyHeapArguments::initialize() { FLAG_SET_DEFAULT(UseTLAB, false); FLAG_SET_DEFAULT(UseCompressedOops, false); FLAG_SET_DEFAULT(UseCompressedClassPointers, false); + FLAG_SET_DEFAULT(ParallelGCThreads, Abstract_VM_Version::parallel_worker_threads()); + if (ParallelGCThreads == 0) { + assert(!FLAG_IS_DEFAULT(ParallelGCThreads), "ParallelGCThreads should not be 0."); + vm_exit_during_initialization("The flag -XX:+UseUseThirdPartyHeap can not be combined with -XX:ParallelGCThreads=0", NULL); + } + } CollectedHeap* ThirdPartyHeapArguments::create_heap() {