From c989b1b66e5c855e3f6bd5b31a52c9035110e766 Mon Sep 17 00:00:00 2001 From: Yi Lin Date: Fri, 23 Jun 2023 01:40:24 +0000 Subject: [PATCH] No longer use pool size in MMTk allocation --- .gitignore | 1 + julia/mmtk_julia.c | 34 +++++++++++----------------------- mmtk/Cargo.toml | 4 ++-- mmtk/src/api.rs | 8 +++++++- 4 files changed, 21 insertions(+), 26 deletions(-) diff --git a/.gitignore b/.gitignore index 2c56ae94..264111e9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .idea/ julia/*.o +julia/*.dbg.obj .vscode diff --git a/julia/mmtk_julia.c b/julia/mmtk_julia.c index 88399ef7..715d4abb 100644 --- a/julia/mmtk_julia.c +++ b/julia/mmtk_julia.c @@ -37,8 +37,7 @@ JL_DLLEXPORT void (jl_mmtk_harness_end)(void) mmtk_harness_end(); } -JL_DLLEXPORT jl_value_t *jl_mmtk_gc_alloc_default(jl_ptls_t ptls, int pool_offset, - int osize, void *ty) +JL_DLLEXPORT jl_value_t *jl_mmtk_gc_alloc_default(jl_ptls_t ptls, size_t osize, void *ty) { // safepoint jl_gc_safepoint(); @@ -278,8 +277,7 @@ size_t get_so_size(void* obj_raw) printf("size greater than minimum!\n"); mmtk_runtime_panic(); } - int pool_id = jl_gc_szclass(tsz + sizeof(jl_taggedvalue_t)); - int osize = jl_gc_sizeclasses[pool_id]; + int osize = tsz + sizeof(jl_taggedvalue_t); return osize; } else if (a->flags.how == 1) { int ndimwords = jl_array_ndimwords(jl_array_ndims(a)); @@ -288,8 +286,7 @@ size_t get_so_size(void* obj_raw) printf("size greater than minimum!\n"); mmtk_runtime_panic(); } - int pool_id = jl_gc_szclass(tsz + sizeof(jl_taggedvalue_t)); - int osize = jl_gc_sizeclasses[pool_id]; + int osize = tsz + sizeof(jl_taggedvalue_t); return osize; } else if (a->flags.how == 2) { @@ -299,8 +296,7 @@ size_t get_so_size(void* obj_raw) printf("size greater than minimum!\n"); mmtk_runtime_panic(); } - int pool_id = jl_gc_szclass(tsz + sizeof(jl_taggedvalue_t)); - int osize = jl_gc_sizeclasses[pool_id]; + int osize = tsz + sizeof(jl_taggedvalue_t); return osize; } else if (a->flags.how == 3) { @@ -310,8 +306,7 @@ size_t get_so_size(void* obj_raw) printf("size greater than minimum!\n"); mmtk_runtime_panic(); } - int pool_id = jl_gc_szclass(tsz + sizeof(jl_taggedvalue_t)); - int osize = jl_gc_sizeclasses[pool_id]; + int osize = tsz + sizeof(jl_taggedvalue_t); return osize; } } else if (vt == jl_simplevector_type) { @@ -320,8 +315,7 @@ size_t get_so_size(void* obj_raw) printf("size greater than minimum!\n"); mmtk_runtime_panic(); } - int pool_id = jl_gc_szclass(l * sizeof(void*) + sizeof(jl_svec_t) + sizeof(jl_taggedvalue_t)); - int osize = jl_gc_sizeclasses[pool_id]; + int osize = l * sizeof(void*) + sizeof(jl_svec_t) + sizeof(jl_taggedvalue_t); return osize; } else if (vt == jl_module_type) { size_t dtsz = sizeof(jl_module_t); @@ -329,8 +323,7 @@ size_t get_so_size(void* obj_raw) printf("size greater than minimum!\n"); mmtk_runtime_panic(); } - int pool_id = jl_gc_szclass(dtsz + sizeof(jl_taggedvalue_t)); - int osize = jl_gc_sizeclasses[pool_id]; + int osize = dtsz + sizeof(jl_taggedvalue_t); return osize; } else if (vt == jl_task_type) { size_t dtsz = sizeof(jl_task_t); @@ -338,8 +331,7 @@ size_t get_so_size(void* obj_raw) printf("size greater than minimum!\n"); mmtk_runtime_panic(); } - int pool_id = jl_gc_szclass(dtsz + sizeof(jl_taggedvalue_t)); - int osize = jl_gc_sizeclasses[pool_id]; + int osize = dtsz + sizeof(jl_taggedvalue_t); return osize; } else if (vt == jl_string_type) { size_t dtsz = jl_string_len(obj) + sizeof(size_t) + 1; @@ -347,8 +339,7 @@ size_t get_so_size(void* obj_raw) printf("size greater than minimum!\n"); mmtk_runtime_panic(); } - int pool_id = jl_gc_szclass_align8(dtsz + sizeof(jl_taggedvalue_t)); - int osize = jl_gc_sizeclasses[pool_id]; + int osize = dtsz + sizeof(jl_taggedvalue_t); return osize; } else if (vt == jl_method_type) { size_t dtsz = sizeof(jl_method_t); @@ -356,9 +347,7 @@ size_t get_so_size(void* obj_raw) printf("size greater than minimum!\n"); mmtk_runtime_panic(); } - int pool_id = jl_gc_szclass(dtsz + sizeof(jl_taggedvalue_t)); - - int osize = jl_gc_sizeclasses[pool_id]; + int osize = dtsz + sizeof(jl_taggedvalue_t); return osize; } else { size_t dtsz = jl_datatype_size(vt); @@ -366,8 +355,7 @@ size_t get_so_size(void* obj_raw) printf("size greater than minimum!\n"); mmtk_runtime_panic(); } - int pool_id = jl_gc_szclass(dtsz + sizeof(jl_taggedvalue_t)); - int osize = jl_gc_sizeclasses[pool_id]; + int osize = dtsz + sizeof(jl_taggedvalue_t); return osize; } return 0; diff --git a/mmtk/Cargo.toml b/mmtk/Cargo.toml index af1ec561..c3cc010d 100644 --- a/mmtk/Cargo.toml +++ b/mmtk/Cargo.toml @@ -9,8 +9,8 @@ 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_version = "98a66ba3c0925ea21bfe051a191210eeae7df0f2" +julia_repo = "https://github.com/qinsoon/julia.git" +julia_version = "a008070765a660fff8953c1e8538b6521ea858c8" [lib] crate-type = ["staticlib", "rlib", "dylib"] diff --git a/mmtk/src/api.rs b/mmtk/src/api.rs index b006f284..b51cc55b 100644 --- a/mmtk/src/api.rs +++ b/mmtk/src/api.rs @@ -166,7 +166,13 @@ pub extern "C" fn mmtk_alloc( offset: usize, semantics: AllocationSemantics, ) -> Address { - memory_manager::alloc::(unsafe { &mut *mutator }, size, align, offset, semantics) + debug_assert!(mmtk::util::conversions::raw_is_aligned(size, ::MIN_ALIGNMENT), "Trying to allocate {} bytes which is not aligned to MIN_ALIGNMENT", size); + let ret = memory_manager::alloc::(unsafe { &mut *mutator }, size, align, offset, semantics); + + debug_assert!((ret + offset).is_aligned_to(align)); + // info!("Alloc size {} align {} offset {} semantics {:?} = {}", size, align, offset, semantics, ret); + + ret } #[no_mangle]