From e8ee0c1f9c4695e5b2725050dd355594291a82ce Mon Sep 17 00:00:00 2001 From: Valentin Schneider Date: Wed, 31 Oct 2018 17:56:11 +0000 Subject: [PATCH 1/2] env: Delegate ftrace handling to record_ftrace() This means removing the ftrace attribute of TestEnv --- lisa/env.py | 41 +++++++++++++++++++++++--------- lisa/tests/kernel/test_bundle.py | 5 ++-- 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/lisa/env.py b/lisa/env.py index a6964224d..58700f47c 100644 --- a/lisa/env.py +++ b/lisa/env.py @@ -184,7 +184,6 @@ class TestEnv(Loggable, HideExekallID): logger.info('User-defined platform information:\n%s', self.plat_info) - self.ftrace = None self._installed_tools = set() self.target = self._init_target(self.target_conf, self._res_dir) @@ -502,10 +501,10 @@ class TestEnv(Loggable, HideExekallID): self._installed_tools.update(tools) - def configure_ftrace(self, events=None, functions=None, - buffsize=FTRACE_BUFSIZE_DEFAULT): + def get_ftrace_collector(self, events=None, functions=None, + buffsize=FTRACE_BUFSIZE_DEFAULT): """ - Setup the environment's :class:`devlib.trace.FtraceCollector` + Get a configured FtraceCollector :param events: The events to trace :type events: list(str) @@ -517,6 +516,8 @@ class TestEnv(Loggable, HideExekallID): :type buffsize: int :raises RuntimeError: If no event nor function is to be traced + + :returns: devlib.trace.FtraceCollector """ logger = self.get_logger() @@ -547,7 +548,7 @@ class TestEnv(Loggable, HideExekallID): if 'trace-cmd' not in self._installed_tools: self.install_tools(['trace-cmd']) - self.ftrace = devlib.FtraceCollector( + ftrace = devlib.FtraceCollector( self.target, events = events, functions = functions, @@ -565,6 +566,8 @@ class TestEnv(Loggable, HideExekallID): for function in functions: logger.info(' %s', function) + return ftrace + @contextlib.contextmanager def freeze_userspace(self): """ @@ -595,17 +598,33 @@ class TestEnv(Loggable, HideExekallID): self.target.cgroups.freeze(thaw=True) @contextlib.contextmanager - def record_ftrace(self, output_file): + def record_ftrace(self, output_file, events=None, functions=None, + buffsize=FTRACE_BUFSIZE_DEFAULT): """ - Context manager that lets you record an Ftrace trace + Context manager that lets you collect an Ftrace trace :param output_file: Filepath for the trace to be created :type output_file: str + + :param events: The events to trace + :type events: list(str) + + :param functions: the kernel functions to trace + :type functions: list(str) + + :param buffsize: The size of the Ftrace buffer + :type buffsize: int + + :raises RuntimeError: If no event nor function is to be traced """ - self.ftrace.start() - yield - self.ftrace.stop() - self.ftrace.get_trace(output_file) + ftrace = self.get_ftrace_collector(events, functions, buffsize) + + ftrace.start() + + yield ftrace + + ftrace.stop() + ftrace.get_trace(output_file) @contextlib.contextmanager def disable_idle_states(self): diff --git a/lisa/tests/kernel/test_bundle.py b/lisa/tests/kernel/test_bundle.py index c8271c07d..fbac92ab5 100644 --- a/lisa/tests/kernel/test_bundle.py +++ b/lisa/tests/kernel/test_bundle.py @@ -329,7 +329,7 @@ class RTATestBundle(TestBundle, abc.ABC): } """ The FTrace configuration used to record a trace while the synthetic workload - is being run. Items are arguments to :meth:`lisa.env.TestEnv.configure_ftrace`. + is being run. Items are arguments to :meth:`lisa.env.TestEnv.collect_ftrace`. """ TASK_PERIOD_MS = 16 @@ -374,9 +374,8 @@ class RTATestBundle(TestBundle, abc.ABC): profile, res_dir=res_dir) trace_path = os.path.join(res_dir, "trace.dat") - te.configure_ftrace(**cls.ftrace_conf) - with te.record_ftrace(trace_path), te.freeze_userspace(): + with te.record_ftrace(trace_path, **cls.ftrace_conf), te.freeze_userspace(): wload.run() @classmethod -- GitLab From 00f064c2983427583cdb8f012f1def19a04130dc Mon Sep 17 00:00:00 2001 From: Valentin Schneider Date: Thu, 1 Nov 2018 17:37:12 +0000 Subject: [PATCH 2/2] env: Rename "record_ftrace()" into "collect_ftrace()" This is to avoid confusion with the ftrace record command. --- lisa/env.py | 2 +- lisa/tests/kernel/test_bundle.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lisa/env.py b/lisa/env.py index 58700f47c..611c4b836 100644 --- a/lisa/env.py +++ b/lisa/env.py @@ -598,7 +598,7 @@ class TestEnv(Loggable, HideExekallID): self.target.cgroups.freeze(thaw=True) @contextlib.contextmanager - def record_ftrace(self, output_file, events=None, functions=None, + def collect_ftrace(self, output_file, events=None, functions=None, buffsize=FTRACE_BUFSIZE_DEFAULT): """ Context manager that lets you collect an Ftrace trace diff --git a/lisa/tests/kernel/test_bundle.py b/lisa/tests/kernel/test_bundle.py index fbac92ab5..18d732b09 100644 --- a/lisa/tests/kernel/test_bundle.py +++ b/lisa/tests/kernel/test_bundle.py @@ -375,7 +375,7 @@ class RTATestBundle(TestBundle, abc.ABC): trace_path = os.path.join(res_dir, "trace.dat") - with te.record_ftrace(trace_path, **cls.ftrace_conf), te.freeze_userspace(): + with te.collect_ftrace(trace_path, **cls.ftrace_conf), te.freeze_userspace(): wload.run() @classmethod -- GitLab