diff --git a/libs/utils/analysis/latency_analysis.py b/libs/utils/analysis/latency_analysis.py index 848d5cbef5e181989cbb43d348da9eab1aba3b51..83739abd7eda7657f2552d5e96f0f0fd44b474a5 100644 --- a/libs/utils/analysis/latency_analysis.py +++ b/libs/utils/analysis/latency_analysis.py @@ -79,7 +79,7 @@ class LatencyAnalysis(AnalysisModule): # we don't care about the status of a task we are replacing task_switches_df.prev_state = task_switches_df.apply( lambda r : np.nan if r['prev_pid'] != td.pid - else self._taskState(int(r['prev_state'])), + else self._taskState(r['prev_state']), axis=1) # Rename prev_state @@ -372,6 +372,11 @@ class LatencyAnalysis(AnalysisModule): @memoized def _taskState(self, state): + try: + state = int(state) + except ValueError: + # State already converted to symbol + return state # Tasks STATE flags (Linux 4.8) TASK_STATES = { diff --git a/libs/utils/analysis_module.py b/libs/utils/analysis_module.py index 60fa4a52b432b92eda551b0cfc84b6a61a80b0fd..c14b9561048e15dde4a017c5af8ecb213fff324d 100644 --- a/libs/utils/analysis_module.py +++ b/libs/utils/analysis_module.py @@ -29,6 +29,9 @@ class AnalysisModule(object): """ def __init__(self, trace): + + self._log = logging.getLogger('Analysis') + self._trace = trace self._platform = trace.platform self._tasks = trace.tasks @@ -36,13 +39,31 @@ class AnalysisModule(object): self._dfg_trace_event = trace._dfg_trace_event - self._big_cap = self._platform['nrg_model']['big']['cpu']['cap_max'] - self._little_cap = self._platform['nrg_model']['little']['cpu']['cap_max'] - self._big_cpus = self._platform['clusters']['big'] - self._little_cpus = self._platform['clusters']['little'] + # By default assume SMP system + self._big_cap = 1024 + self._little_cap = 1024 + nrg_model = self._platform.get('nrg_model', None) + if nrg_model: + try: + self._big_cap = nrg_model['big']['cpu']['cap_max'] + self._little_cap = nrg_model['little']['cpu']['cap_max'] + except TypeError: + self._log.debug('Failed parsing EM from platform data') + else: + self._log.debug('Platform data without Energy Model info') - trace._registerDataFrameGetters(self) + # By default assume SMP system + self._big_cpus = [] + self._little_cpus = [] + if 'big' in self._platform['clusters']: + self._log.debug('Parsing big.LITTLE system clusters') + self._big_cpus = self._platform['clusters']['big'] + self._little_cpus = self._platform['clusters']['little'] + else: + self._log.debug('Parsing SMP clusters') + for cid in self._platform['clusters']: + self._big_cpus.append(self._platform['clusters'][cid]) - self._log = logging.getLogger('Analysis') + trace._registerDataFrameGetters(self) # vim :set tabstop=4 shiftwidth=4 expandtab