diff --git a/src/plan/mod.rs b/src/plan/mod.rs index c338fd4384..e87354b196 100644 --- a/src/plan/mod.rs +++ b/src/plan/mod.rs @@ -66,3 +66,15 @@ pub use nogc::NOGC_CONSTRAINTS; pub use pageprotect::PP_CONSTRAINTS; pub use semispace::SS_CONSTRAINTS; pub use sticky::immix::STICKY_IMMIX_CONSTRAINTS; + +/// When we log the page usage for a plan, we also log page usage for each space. +pub(crate) const LOG_DETAILED_SPACE_USAGE: bool = false; + +/// Collect reserved pages for each space in the plan, and return a string. +pub(crate) fn get_detailed_space_usage_string(plan: &dyn Plan) -> String { + let mut print = String::new(); + plan.for_each_space(&mut |space: &dyn crate::policy::space::Space| { + print.push_str(&format!("{}={},", space.name(), space.reserved_pages())); + }); + print +} diff --git a/src/scheduler/gc_work.rs b/src/scheduler/gc_work.rs index 2aa0607445..7253990a82 100644 --- a/src/scheduler/gc_work.rs +++ b/src/scheduler/gc_work.rs @@ -217,9 +217,14 @@ pub struct EndOfGC { impl GCWork for EndOfGC { fn do_work(&mut self, worker: &mut GCWorker, mmtk: &'static MMTK) { info!( - "End of GC ({}/{} pages, took {} ms)", + "End of GC ({}/{} pages{}, took {} ms)", mmtk.get_plan().get_reserved_pages(), mmtk.get_plan().get_total_pages(), + if crate::plan::LOG_DETAILED_SPACE_USAGE { + format!(": {}", crate::plan::get_detailed_space_usage_string(mmtk.get_plan())) + } else { + "".to_owned() + }, self.elapsed.as_millis() ); diff --git a/src/util/heap/gc_trigger.rs b/src/util/heap/gc_trigger.rs index c79254c756..67b11d9856 100644 --- a/src/util/heap/gc_trigger.rs +++ b/src/util/heap/gc_trigger.rs @@ -54,7 +54,7 @@ impl GCTrigger { let plan = unsafe { self.plan.assume_init() }; if self.policy.is_gc_required(space_full, space, plan) { info!( - "[POLL] {}{} ({}/{} pages)", + "[POLL] {}{} ({}/{} pages{})", if let Some(space) = space { format!("{}: ", space.get_name()) } else { @@ -63,6 +63,11 @@ impl GCTrigger { "Triggering collection", plan.get_reserved_pages(), plan.get_total_pages(), + if crate::plan::LOG_DETAILED_SPACE_USAGE { + format!(": {}", crate::plan::get_detailed_space_usage_string(plan)) + } else { + "".to_owned() + }, ); plan.base().gc_requester.request(); return true;