From 7865a3029f2b753cac2848ed7d5a44020a07aa55 Mon Sep 17 00:00:00 2001 From: Eduardo Souza Date: Thu, 7 Sep 2023 06:10:05 +0000 Subject: [PATCH 1/5] Adding support for allocating in a non-moving space; Allocating types, typenames and buffers into a non-moving space --- julia/mmtk_julia.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/julia/mmtk_julia.c b/julia/mmtk_julia.c index d948bd0d..a39c3224 100644 --- a/julia/mmtk_julia.c +++ b/julia/mmtk_julia.c @@ -96,6 +96,34 @@ JL_DLLEXPORT jl_value_t *jl_mmtk_gc_alloc_big(jl_ptls_t ptls, size_t sz) return result; } +// allocating in a non-moving space +JL_DLLEXPORT jl_value_t *jl_mmtk_gc_alloc_non_moving(jl_ptls_t ptls, + int osize, void *ty) +{ + // safepoint + jl_gc_safepoint_(ptls); + + jl_value_t *v; + if ((uintptr_t)ty != jl_buff_tag) { + // v needs to be 16 byte aligned, therefore v_tagged needs to be offset accordingly to consider the size of header + jl_taggedvalue_t *v_tagged = (jl_taggedvalue_t *)mmtk_alloc(&ptls->mmtk_mutator, osize, 16, sizeof(jl_taggedvalue_t), 6); + v = jl_valueof(v_tagged); + mmtk_non_moving_post_alloc_fast(&ptls->mmtk_mutator, v, osize); + } else { + // allocating an extra word to store the size of buffer objects + jl_taggedvalue_t *v_tagged = (jl_taggedvalue_t *)mmtk_alloc(&ptls->mmtk_mutator, osize+sizeof(jl_taggedvalue_t), 16, 0, 6); + jl_value_t* v_tagged_aligned = ((jl_value_t*)((char*)(v_tagged) + sizeof(jl_taggedvalue_t))); + v = jl_valueof(v_tagged_aligned); + mmtk_store_obj_size_c(v, osize + sizeof(jl_taggedvalue_t)); + mmtk_non_moving_post_alloc_fast(&ptls->mmtk_mutator, v, osize + sizeof(jl_taggedvalue_t)); + } + + ptls->gc_num.allocd += osize; + ptls->gc_num.poolalloc++; + + return v; +} + static void mmtk_sweep_malloced_arrays(void) JL_NOTSAFEPOINT { void* iter = new_mutator_iterator(); From f0f392975c9a28cd82a9fbe05a416621651f11af Mon Sep 17 00:00:00 2001 From: Eduardo Souza Date: Thu, 7 Sep 2023 06:17:45 +0000 Subject: [PATCH 2/5] Setting up the correct julia_version --- mmtk/Cargo.lock | 4 ++-- mmtk/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mmtk/Cargo.lock b/mmtk/Cargo.lock index 32eda2a7..f428777f 100644 --- a/mmtk/Cargo.lock +++ b/mmtk/Cargo.lock @@ -474,7 +474,7 @@ dependencies = [ [[package]] name = "mmtk" version = "0.19.0" -source = "git+https://github.com/qinsoon/mmtk-core.git?rev=99d2d9ad25b3a36cea52b0f4ffdc24b16e0ee720#99d2d9ad25b3a36cea52b0f4ffdc24b16e0ee720" +source = "git+https://github.com/mmtk/mmtk-core.git?rev=a504184311d490dd1c7ee36bab87b61a671038a1#a504184311d490dd1c7ee36bab87b61a671038a1" dependencies = [ "atomic 0.5.3", "atomic-traits", @@ -523,7 +523,7 @@ dependencies = [ [[package]] name = "mmtk-macros" version = "0.19.0" -source = "git+https://github.com/qinsoon/mmtk-core.git?rev=99d2d9ad25b3a36cea52b0f4ffdc24b16e0ee720#99d2d9ad25b3a36cea52b0f4ffdc24b16e0ee720" +source = "git+https://github.com/mmtk/mmtk-core.git?rev=a504184311d490dd1c7ee36bab87b61a671038a1#a504184311d490dd1c7ee36bab87b61a671038a1" dependencies = [ "proc-macro-error", "proc-macro2", diff --git a/mmtk/Cargo.toml b/mmtk/Cargo.toml index db615c97..91f43a76 100644 --- a/mmtk/Cargo.toml +++ b/mmtk/Cargo.toml @@ -10,7 +10,7 @@ edition = "2018" [package.metadata.julia] # Our CI matches the following line and extract mmtk/julia. If this line is updated, please check ci yaml files and make sure it works. julia_repo = "https://github.com/mmtk/julia.git" -julia_version = "83796a7d38878faa9afdb94ce84b6da00035b336" +julia_version = "dcf72724b2303e156b88df761a50284ae8ce7038" [lib] crate-type = ["cdylib"] From 33e2f370a8bf62d365e76364558c6133e1d427b5 Mon Sep 17 00:00:00 2001 From: Eduardo Souza Date: Thu, 7 Sep 2023 06:20:02 +0000 Subject: [PATCH 3/5] Fixing Cargo.toml with right julia_repo --- mmtk/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mmtk/Cargo.toml b/mmtk/Cargo.toml index 91f43a76..cbd73322 100644 --- a/mmtk/Cargo.toml +++ b/mmtk/Cargo.toml @@ -9,7 +9,7 @@ edition = "2018" # Metadata for the Julia repository [package.metadata.julia] # Our CI matches the following line and extract mmtk/julia. If this line is updated, please check ci yaml files and make sure it works. -julia_repo = "https://github.com/mmtk/julia.git" +julia_repo = "https://github.com/udesou/julia.git" julia_version = "dcf72724b2303e156b88df761a50284ae8ce7038" [lib] From 40f7dc1049c97876da5250c07e7011fabcd04bf6 Mon Sep 17 00:00:00 2001 From: Eduardo Souza Date: Fri, 8 Sep 2023 00:37:09 +0000 Subject: [PATCH 4/5] Aligning size before calling mmtk allocation function --- julia/mmtk_julia.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/julia/mmtk_julia.c b/julia/mmtk_julia.c index a39c3224..64967e9f 100644 --- a/julia/mmtk_julia.c +++ b/julia/mmtk_julia.c @@ -106,12 +106,12 @@ JL_DLLEXPORT jl_value_t *jl_mmtk_gc_alloc_non_moving(jl_ptls_t ptls, jl_value_t *v; if ((uintptr_t)ty != jl_buff_tag) { // v needs to be 16 byte aligned, therefore v_tagged needs to be offset accordingly to consider the size of header - jl_taggedvalue_t *v_tagged = (jl_taggedvalue_t *)mmtk_alloc(&ptls->mmtk_mutator, osize, 16, sizeof(jl_taggedvalue_t), 6); + jl_taggedvalue_t *v_tagged = (jl_taggedvalue_t *)mmtk_alloc(&ptls->mmtk_mutator, LLT_ALIGN(osize, 16), 16, sizeof(jl_taggedvalue_t), 6); v = jl_valueof(v_tagged); mmtk_non_moving_post_alloc_fast(&ptls->mmtk_mutator, v, osize); } else { // allocating an extra word to store the size of buffer objects - jl_taggedvalue_t *v_tagged = (jl_taggedvalue_t *)mmtk_alloc(&ptls->mmtk_mutator, osize+sizeof(jl_taggedvalue_t), 16, 0, 6); + jl_taggedvalue_t *v_tagged = (jl_taggedvalue_t *)mmtk_alloc(&ptls->mmtk_mutator, LLT_ALIGN(osize+sizeof(jl_taggedvalue_t), 16), 16, 0, 6); jl_value_t* v_tagged_aligned = ((jl_value_t*)((char*)(v_tagged) + sizeof(jl_taggedvalue_t))); v = jl_valueof(v_tagged_aligned); mmtk_store_obj_size_c(v, osize + sizeof(jl_taggedvalue_t)); From d7a68aa39bc09b9f2835b69b67e95e695889c750 Mon Sep 17 00:00:00 2001 From: Eduardo Souza Date: Mon, 11 Sep 2023 00:14:58 +0000 Subject: [PATCH 5/5] Pointing at the correct julia_version --- mmtk/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mmtk/Cargo.toml b/mmtk/Cargo.toml index cbd73322..f58f4d22 100644 --- a/mmtk/Cargo.toml +++ b/mmtk/Cargo.toml @@ -10,7 +10,7 @@ edition = "2018" [package.metadata.julia] # Our CI matches the following line and extract mmtk/julia. If this line is updated, please check ci yaml files and make sure it works. julia_repo = "https://github.com/udesou/julia.git" -julia_version = "dcf72724b2303e156b88df761a50284ae8ce7038" +julia_version = "0e0adf1cb1f5193c6f6a8b0fd0dc0561c8e04f44" [lib] crate-type = ["cdylib"]