diff --git a/pyphare/pyphare/simulator/monitoring.py b/pyphare/pyphare/simulator/monitoring.py index 3d7abbf74..a6ea53b1b 100644 --- a/pyphare/pyphare/simulator/monitoring.py +++ b/pyphare/pyphare/simulator/monitoring.py @@ -1,10 +1,13 @@ # +# Resource monitoring requires phlop +# python3 -m pip install phlop # # import os from pathlib import Path +from pyphare import cpp from pyphare.logger import getLogger logger = getLogger(__name__) @@ -31,34 +34,35 @@ def valdict(**kwargs): _globals = valdict(stats_man=None) -def monitoring_yaml_file(cpplib): - path = Path(".phare") / "stats" / f"rank.{cpplib.mpi_rank()}.yaml" +def monitoring_yaml_file(): + path = Path(".phare") / "stats" / f"rank.{cpp.mpi_rank()}.yaml" path.parent.mkdir(exist_ok=True, parents=True) return path -def setup_monitoring(cpplib, interval=10): +def setup_monitoring(interval=10): if not have_phlop(): return from phlop.app import stats_man as sm # pylint: disable=import-error _globals.stats_man = sm.AttachableRuntimeStatsManager( - valdict(yaml=monitoring_yaml_file(cpplib), interval=interval), - dict(rank=cpplib.mpi_rank()), + valdict(yaml=monitoring_yaml_file(), interval=interval), + dict(rank=cpp.mpi_rank()), ).start() -def monitoring_shutdown(cpplib): +def monitoring_shutdown(): if not have_phlop(): return if _globals.stats_man: + cpp.mpi_barrier() # force similar end time _globals.stats_man.kill().join() -def timing_setup(cpplib): - if cpplib.mpi_rank() == 0: +def timing_setup(): + if cpp.mpi_rank() == 0: try: Path(".phare/timings").mkdir(parents=True, exist_ok=True) except FileNotFoundError: diff --git a/pyphare/pyphare/simulator/simulator.py b/pyphare/pyphare/simulator/simulator.py index ada192774..28c3918da 100644 --- a/pyphare/pyphare/simulator/simulator.py +++ b/pyphare/pyphare/simulator/simulator.py @@ -33,7 +33,7 @@ def simulator_shutdown(): def make_cpp_simulator(cpp_lib, hier): if SCOPE_TIMING: - mon.timing_setup(cpp_lib) + mon.timing_setup() make_sim = "make_simulator" assert hasattr(cpp_lib, make_sim) @@ -199,7 +199,8 @@ def run(self, plot_times=False, monitoring=None): if self.simulation.dry_run: return self if monitoring: - mon.setup_monitoring(self.cpp_lib) + interval = monitoring if isinstance(monitoring, int) else 100 # seconds + mon.setup_monitoring(interval) perf = [] end_time = self.cpp_sim.endTime() t = self.cpp_sim.currentTime() @@ -221,7 +222,7 @@ def run(self, plot_times=False, monitoring=None): if plot_times: plot_timestep_time(perf) - mon.monitoring_shutdown(self.cpp_lib) + mon.monitoring_shutdown() return self.reset() def _auto_dump(self):