From cde453b7fbdcc01a9fddeced7fdce242eb9cb9ac Mon Sep 17 00:00:00 2001 From: Douglas Raillard Date: Tue, 31 Oct 2023 13:34:08 +0000 Subject: [PATCH 1/4] lisa._cli_tools.lisa_load_kmod: Display events supported by the module FEATURE Log the events that LISA can detect in the kernel module (note that this is a superset of what feature can actually be enabled). --- lisa/_cli_tools/lisa_load_kmod.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lisa/_cli_tools/lisa_load_kmod.py b/lisa/_cli_tools/lisa_load_kmod.py index d04ac26ed..db914aa19 100755 --- a/lisa/_cli_tools/lisa_load_kmod.py +++ b/lisa/_cli_tools/lisa_load_kmod.py @@ -60,6 +60,9 @@ def _main(args, target): kmod_params['features'] = list(features) kmod = target.get_kmod(LISADynamicKmod) + pretty_events = ', '.join(kmod.defined_events) + logging.info(f'Kernel module provides the following ftrace events: {pretty_events}') + _kmod_cm = kmod.run(kmod_params=kmod_params) if keep_loaded: -- GitLab From 580e43297099b1a4ce607fa15111570f652546a4 Mon Sep 17 00:00:00 2001 From: Douglas Raillard Date: Tue, 31 Oct 2023 14:58:36 +0000 Subject: [PATCH 2/4] lisa.trace: Ensure MissingTraceEventError has accurate event info FIX Ensure the order of failed event checker is preserved, as this matters when displaying an "or" group. --- lisa/trace.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lisa/trace.py b/lisa/trace.py index 967fa5fc0..f0dad3090 100644 --- a/lisa/trace.py +++ b/lisa/trace.py @@ -5415,16 +5415,16 @@ class OrTraceEventChecker(AssociativeTraceEventChecker): def _select_events(self, check, event_set): if self.checkers: - failed_checker_set = set() + failed_checkers = [] for checker in self.checkers: try: return checker._select_events(check=check, event_set=event_set) except MissingTraceEventError as e: - failed_checker_set.add(e.missing_events) + failed_checkers.extend(e.missing_events) cls = type(self) raise MissingTraceEventError( - cls(failed_checker_set), + cls.from_events(failed_checkers), available_events=event_set, ) else: @@ -5488,7 +5488,7 @@ class AndTraceEventChecker(AssociativeTraceEventChecker): def _select_events(self, check, event_set): if self.checkers: - failed_checker_set = set() + failed_checkers = [] selected = set() for checker in self.checkers: try: @@ -5496,12 +5496,12 @@ class AndTraceEventChecker(AssociativeTraceEventChecker): checker._select_events(check=check, event_set=event_set) ) except MissingTraceEventError as e: - failed_checker_set.add(e.missing_events) + failed_checkers.extend(e.missing_events) - if failed_checker_set: + if failed_checkers: cls = type(self) raise MissingTraceEventError( - cls(failed_checker_set), + cls.from_events(failed_checkers), available_events=event_set, ) else: -- GitLab From 659b50a5c774f58f55e862bde282141525fa1e47 Mon Sep 17 00:00:00 2001 From: Douglas Raillard Date: Tue, 31 Oct 2023 16:38:59 +0000 Subject: [PATCH 3/4] lisa.trace: Improve missing optional events FtraceCollector reporting FIX Report the actual list of available events when reporting the missing optional events. --- lisa/trace.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lisa/trace.py b/lisa/trace.py index f0dad3090..9e28ee6ba 100644 --- a/lisa/trace.py +++ b/lisa/trace.py @@ -6042,7 +6042,12 @@ class FtraceCollector(CollectorBase, Configurable): try: events_checker.check_events(events, check_optional=True) except MissingTraceEventError as e: - self.logger.info(f'Optional events missing: {str(e)}') + e = MissingTraceEventError( + e.missing_events, + available_events=target_available_events | kmod_defined_events, + msg='{missing_events}{available}', + ) + self.logger.info(f'Optional events missing: {e}') if not events: raise ValueError('No ftrace events selected') -- GitLab From 5bfe076cea173f34e2853fc6afd0e26717370fc2 Mon Sep 17 00:00:00 2001 From: Douglas Raillard Date: Tue, 31 Oct 2023 17:55:55 +0000 Subject: [PATCH 4/4] lisa.trace: Add FtraceCollector kmod events debug log --- lisa/trace.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lisa/trace.py b/lisa/trace.py index 9e28ee6ba..8d3f6610f 100644 --- a/lisa/trace.py +++ b/lisa/trace.py @@ -6091,8 +6091,14 @@ class FtraceCollector(CollectorBase, Configurable): @classmethod def _get_kmod(cls, target, target_available_events, needed_events): + logger = cls.get_logger() kmod = target.get_kmod(LISADynamicKmod) defined_events = set(kmod.defined_events) + possible_events = set(kmod.possible_events) + + logger.debug(f'Kernel module possible events: {possible_events}') + logger.debug(f'Kernel module defined events: {defined_events}') + needed = needed_events & defined_events if needed: overlapping = defined_events & target_available_events -- GitLab