From 92ce9b7d593f07f62a787826da3fc1aa36d3baf5 Mon Sep 17 00:00:00 2001 From: Antonio Paolillo Date: Wed, 28 Jan 2026 21:46:56 +0100 Subject: [PATCH] perf: Allow % in event names for list parsing Some perf events contain a percent sign in their name (e.g. tma_info_bottleneck_%_dtlb_miss_bound_cycles). The regexes in _get_available_events did not include % in their character classes, causing a ValueError when parsing perf list output on systems with such events. Add % to all five event/group name regex character classes. Signed-off-by: Antonio Paolillo --- benchkit/commandwrappers/perf.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/benchkit/commandwrappers/perf.py b/benchkit/commandwrappers/perf.py index 9c8c295d..0b604c8d 100644 --- a/benchkit/commandwrappers/perf.py +++ b/benchkit/commandwrappers/perf.py @@ -131,7 +131,7 @@ def _get_available_events( sline = line.strip() # New group section - m = re.match(r"^([-_/:A-Za-z0-9\s]+):$", sline) + m = re.match(r"^([-_/%:A-Za-z0-9\s]+):$", sline) if m: (group_name,) = m.groups() current_group = group_name @@ -139,7 +139,7 @@ def _get_available_events( continue # event OR alias [description] (all on one line) - m = re.match(r"([-_/:.a-zA-Z0-9]+)\s+OR\s+([-_/:.a-zA-Z0-9]+)\s*\[(.*)\]", sline) + m = re.match(r"([-_/%:.a-zA-Z0-9]+)\s+OR\s+([-_/%:.a-zA-Z0-9]+)\s*\[(.*)\]", sline) if m: event_left, event_right, event_desc = m.groups() events.extend([event_left, event_right]) @@ -148,7 +148,7 @@ def _get_available_events( continue # event OR alias (description is on next line) - m = re.match(r"([-_/:.a-zA-Z0-9]+)\s+OR\s+([-_/:.a-zA-Z0-9]+)$", sline) + m = re.match(r"([-_/%:.a-zA-Z0-9]+)\s+OR\s+([-_/%:.a-zA-Z0-9]+)$", sline) if m: event_left, event_right = m.groups() events.extend([event_left, event_right]) @@ -156,7 +156,7 @@ def _get_available_events( continue # event [description] (canonical case) - m = re.match(r"([-_/:.a-zA-Z0-9]+)\s+\[(.*)\]", sline) + m = re.match(r"([-_/%:.a-zA-Z0-9]+)\s+\[(.*)\]", sline) if m: event_id, event_desc = m.groups() events.append(event_id) @@ -164,7 +164,7 @@ def _get_available_events( continue # Single event name only (description may follow) - m = re.match(r"(^[-_/:.a-zA-Z0-9]+)$", sline) + m = re.match(r"(^[-_/%:.a-zA-Z0-9]+)$", sline) if m: (event_id,) = m.groups() events.append(event_id)