Skip to content

Commit 4ada9ec

Browse files
authored
Binding-side changes required to support pinning profiler (#247)
Follow-up to mmtk/julia#88, with binding-side changes required to support the pinning profiler.
1 parent 761475a commit 4ada9ec

File tree

5 files changed

+21
-1
lines changed

5 files changed

+21
-1
lines changed

mmtk/api/mmtk.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,15 @@ extern void* mmtk_alloc_large(MMTk_Mutator mutator, size_t size,
4242
extern void mmtk_post_alloc(MMTk_Mutator mutator, void* refer,
4343
size_t bytes, int allocator);
4444

45+
extern bool mmtk_is_reachable_object(void* ref);
4546
extern bool mmtk_is_live_object(void* ref);
4647
extern bool mmtk_is_mapped_object(void* ref);
4748
extern bool mmtk_is_mapped_address(void* addr);
4849
extern int mmtk_object_is_managed_by_mmtk(void* addr);
4950
extern void mmtk_runtime_panic(void);
5051
extern void mmtk_unreachable(void);
5152
extern unsigned char mmtk_pin_object(void* obj);
53+
extern unsigned char mmtk_unpin_object(void* obj);
5254
extern bool mmtk_is_object_pinned(void* obj);
5355
extern unsigned char mmtk_pin_pointer(void* ptr);
5456
extern bool mmtk_is_pointer_pinned(void* ptr);

mmtk/src/api.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,11 @@ pub extern "C" fn mmtk_total_bytes() -> usize {
250250
memory_manager::total_bytes(&SINGLETON)
251251
}
252252

253+
#[no_mangle]
254+
pub extern "C" fn mmtk_is_reachable_object(object: ObjectReference) -> bool {
255+
object.is_reachable()
256+
}
257+
253258
#[no_mangle]
254259
pub extern "C" fn mmtk_is_live_object(object: ObjectReference) -> bool {
255260
object.is_live()

mmtk/src/collection.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use crate::{
44
jl_hrtime, jl_throw_out_of_memory_error,
55
};
66
use crate::{JuliaVM, USER_TRIGGERED_GC};
7+
use crate::jl_gc_log;
78
use log::{debug, trace};
89
use mmtk::util::alloc::AllocationError;
910
use mmtk::util::heap::GCTriggerPolicy;
@@ -84,6 +85,9 @@ impl Collection<JuliaVM> for VMCollection {
8485
}
8586

8687
fn resume_mutators(_tls: VMWorkerThread) {
88+
unsafe {
89+
jl_gc_log(); // Remove dead objects form pinning log
90+
}
8791
// unpin conservative roots
8892
crate::conservative::unpin_conservative_roots();
8993

mmtk/src/conservative.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use crate::julia_types::*;
2+
use crate::jl_log_pinning_event;
23
use mmtk::memory_manager;
34
use mmtk::util::constants::BYTES_IN_ADDRESS;
45
use mmtk::util::{Address, ObjectReference};
@@ -13,7 +14,13 @@ pub fn pin_conservative_roots() {
1314

1415
let mut roots = CONSERVATIVE_ROOTS.lock().unwrap();
1516
let n_roots = roots.len();
16-
roots.retain(|obj| mmtk::memory_manager::pin_object(*obj));
17+
roots.retain(|obj| {
18+
unsafe {
19+
let obj = (*obj).to_raw_address();
20+
jl_log_pinning_event(obj, std::ptr::null_mut(), 0);
21+
}
22+
mmtk::memory_manager::pin_object(*obj)
23+
});
1724
let n_pinned = roots.len();
1825
log::debug!("Conservative roots: {}, pinned: {}", n_roots, n_pinned);
1926
}

mmtk/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ extern "C" {
131131
total_start: *mut Address,
132132
total_end: *mut Address,
133133
);
134+
pub fn jl_log_pinning_event(pinned_object: Address, filename: *const i8, lineno: i32);
135+
pub fn jl_gc_log();
134136
pub static jl_true: *mut crate::julia_types::jl_value_t;
135137
}
136138

0 commit comments

Comments
 (0)