From e7fa9591e7d2bb2a8b06419ac2939ff7317094a5 Mon Sep 17 00:00:00 2001 From: Patrick Bellasi Date: Fri, 17 Feb 2017 12:32:41 +0000 Subject: [PATCH 1/2] utils/analysis_module: fix parsing for SMP systems Signed-off-by: Patrick Bellasi --- libs/utils/analysis_module.py | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/libs/utils/analysis_module.py b/libs/utils/analysis_module.py index 60fa4a52b..c14b95610 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 -- GitLab From 486bce19ec4e9a8daa987647e0269ee8561d6caa Mon Sep 17 00:00:00 2001 From: Patrick Bellasi Date: Fri, 17 Feb 2017 13:57:53 +0000 Subject: [PATCH 2/2] analysis/latency_analysis: fix parsing for systrace Systrace generates formatted sched_switch events, where the prev_state is alrady translated from integer value to its symbolic representation. This updates the task states resolution function to fit formatted traces as well. Signed-off-by: Patrick Bellasi --- libs/utils/analysis/latency_analysis.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libs/utils/analysis/latency_analysis.py b/libs/utils/analysis/latency_analysis.py index 848d5cbef..83739abd7 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 = { -- GitLab