release-request-31b66d11-57b3-4ed5-b1c7-b8e8608fe89d-for-git_oc-mr1-release-4185583 snap-temp-L87600000082778537
Change-Id: Id3d20f2d54364ae5b9a529948e8518bfe592159c
diff --git a/libs/utils/analysis/residency_analysis.py b/libs/utils/analysis/residency_analysis.py
index ad94647..797e2f4 100644
--- a/libs/utils/analysis/residency_analysis.py
+++ b/libs/utils/analysis/residency_analysis.py
@@ -49,9 +49,18 @@
# Callback and state machinery #
################################################################
+def process_pivot(pivot_list, pivot):
+ if not pivot_list:
+ return True
+ return pivot in pivot_list
+
def pivot_process_cb(data, args):
pivot = args[0]['pivot']
+ if args[0].has_key('pivot_list'):
+ pivot_list = args[0]['pivot_list']
+ else:
+ pivot_list = []
res_analysis_obj = args[0]['res_analysis_obj']
debugg = False if pivot == 'schedtune' else False
@@ -67,8 +76,8 @@
print "{}: {} {} -> {} {}".format(time, prev_pivot, data['prev_comm'], \
next_pivot, data['next_comm'])
- # prev pid processing (switch out)
- if pivot_res.has_key(prev_pivot):
+ # prev pivot processing (switch out)
+ if pivot_res.has_key(prev_pivot) and process_pivot(pivot_list, prev_pivot):
pr = pivot_res[prev_pivot]
if pr.running == 1:
pr.running = 0
@@ -82,10 +91,14 @@
else:
log.info('switch out seen while no switch in {}'.format(prev_pivot))
- else:
+ elif process_pivot(pivot_list, prev_pivot):
log.info('switch out seen while no switch in {}'.format(prev_pivot))
- # next_pivot processing for new pid (switch in)
+ # Filter the next pivot
+ if not process_pivot(pivot_list, next_pivot):
+ return
+
+ # next_pivot processing for new pivot switch in
if not pivot_res.has_key(next_pivot):
pr = Residency(next_pivot, time)
pivot_res[next_pivot] = pr
@@ -136,7 +149,7 @@
yield dict_ret
@memoized
- def _dfg_cpu_residencies(self, pivot, event_name='sched_switch'):
+ def _dfg_cpu_residencies(self, pivot, pivot_list=[], event_name='sched_switch'):
# Build a list of pids
df = self._dfg_trace_event('sched_switch')
df = df[['__pid']].drop_duplicates(keep='first')
@@ -171,7 +184,7 @@
else:
df = self._dfg_trace_event(event_name)
- kwargs = { 'pivot': pivot, 'res_analysis_obj': self }
+ kwargs = { 'pivot': pivot, 'res_analysis_obj': self, 'pivot_list': pivot_list }
trappy.utils.apply_callback(df, pivot_process_cb, kwargs)
# Build the pivot id list
@@ -193,8 +206,8 @@
logging.info("total real time range of events: {}".format(self._trace.time_range))
return df
- def _dfg_cpu_residencies_cgroup(self, controller):
- return self._dfg_cpu_residencies(controller, 'sched_switch_cgroup')
+ def _dfg_cpu_residencies_cgroup(self, controller, cgroups=[]):
+ return self._dfg_cpu_residencies(controller, pivot_list=cgroups, event_name='sched_switch_cgroup')
def plot_cgroup(self, controller, cgroup='all', idle=False):
"""