diff options
author | David Sommerseth <davids@redhat.com> | 2012-12-07 19:40:31 +0100 |
---|---|---|
committer | David Sommerseth <davids@redhat.com> | 2012-12-07 19:41:21 +0100 |
commit | aa78df877c932256120b89a169d353859cc4a667 (patch) | |
tree | 2420ed0e8839a4f4d79cd598dce724101d8dfd0d /rteval/modules | |
parent | ffd636b0b5fd614ccae9201b5350ce2143c9d038 (diff) | |
download | rteval-aa78df877c932256120b89a169d353859cc4a667.tar.gz rteval-aa78df877c932256120b89a169d353859cc4a667.tar.xz rteval-aa78df877c932256120b89a169d353859cc4a667.zip |
Rework the Unleash()/isAlive() logic to support running measurement threads serialised
Signed-off-by: David Sommerseth <davids@redhat.com>
Diffstat (limited to 'rteval/modules')
-rw-r--r-- | rteval/modules/__init__.py | 18 | ||||
-rw-r--r-- | rteval/modules/measurement/__init__.py | 40 |
2 files changed, 45 insertions, 13 deletions
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): |