From aa78df877c932256120b89a169d353859cc4a667 Mon Sep 17 00:00:00 2001 From: David Sommerseth Date: Fri, 7 Dec 2012 19:40:31 +0100 Subject: Rework the Unleash()/isAlive() logic to support running measurement threads serialised Signed-off-by: David Sommerseth --- rteval/modules/__init__.py | 18 +++++---------- rteval/modules/measurement/__init__.py | 40 +++++++++++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 13 deletions(-) (limited to 'rteval/modules') diff --git a/rteval/modules/__init__.py b/rteval/modules/__init__.py index 5ac2c62..a9e1c83 100644 --- a/rteval/modules/__init__.py +++ b/rteval/modules/__init__.py @@ -349,20 +349,14 @@ start their workloads yet""" return nthreads - def _isAlive(self, all_running_pass): - """Returns True if all modules which are supposed to run runs""" + def _isAlive(self): + """Returns True if all modules are running""" - ret = True for (modname, mod) in self.__modules: - if all_running_pass: - # We requiring all modules to run to pass - ret &= mod.WorkloadAlive() - else: - # We require only a single module to run to pass - # This is used by f.ex. measurement modules, running - # serialised - ret |= mod.WorkloadAlive() - return ret + # We requiring all modules to run to pass + if not mod.WorkloadAlive(): + return False + return True diff --git a/rteval/modules/measurement/__init__.py b/rteval/modules/measurement/__init__.py index 10ec967..df96dfb 100644 --- a/rteval/modules/measurement/__init__.py +++ b/rteval/modules/measurement/__init__.py @@ -33,6 +33,9 @@ class MeasurementProfile(RtEvalModules): self.__with_load = with_load self.__run_parallel = run_parallel + # Only used when running modules serialised + self.__run_serialised_mods = None + self._module_type = "measurement" self._module_config = "measurement" self._report_tag = "Profile" @@ -56,6 +59,22 @@ class MeasurementProfile(RtEvalModules): self._RegisterModuleObject(modname, modobj) + def Unleash(self): + """Unleashes all the measurement modules""" + + if self.__run_parallel: + # Use the inherrited method if running + # measurements in parallel + return RtEvalModules.Unleash(self) + + # Get a list of all registered modules, + # and start the first one + self.__serialised_mods = self.GetModulesList() + mod = self.GetNamedModuleObject(self.__serialised_mods[0]) + mod.setStart() + return 1 + + def MakeReport(self): "Generates an XML report for all run measurement modules in this profile" rep_n = RtEvalModules.MakeReport(self) @@ -66,7 +85,26 @@ class MeasurementProfile(RtEvalModules): def isAlive(self): """Returns True if all modules which are supposed to run runs""" - return self._isAlive(self.__run_parallel) + + if self.__run_parallel: + return self._isAlive() + + if len(self.__serialised_mods) > 0: + # If running serialised, first check if measurement is still running, + # if so - return True. + mod = self.GetNamedModuleObject(self.__serialised_mods[0]) + if mod.WorkloadAlive(): + return True + + # If not, go to next on the list and kick it off + self.__serialised_mods.remove(self.__serialised_mods[0]) + if len(self.__serialised_mods) > 0: + mod = self.GetNamedModuleObject(self.__serialised_mods[0]) + mod.setStart() + return True + + # If we've been through everything, nothing is running + return False class MeasurementModules(object): -- cgit