public inbox for linux-perf-users@vger.kernel.org
 help / color / mirror / Atom feed
From: Ian Rogers <irogers@google.com>
To: acme@kernel.org, adrian.hunter@intel.com, james.clark@linaro.org,
	 leo.yan@linux.dev, namhyung@kernel.org, tmricht@linux.ibm.com
Cc: alice.mei.rogers@gmail.com, dapeng1.mi@linux.intel.com,
	 linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,  linux-perf-users@vger.kernel.org,
	mingo@redhat.com, peterz@infradead.org,
	 Ian Rogers <irogers@google.com>
Subject: [PATCH v7 43/59] perf sched-migration: Port sched-migration/SchedGui to use python module
Date: Sat, 25 Apr 2026 15:49:35 -0700	[thread overview]
Message-ID: <20260425224951.174663-44-irogers@google.com> (raw)
In-Reply-To: <20260425224951.174663-1-irogers@google.com>

Ported from tools/perf/scripts/python/ and its Util lib.
- Refactored sched-migration.py to use a class structure
  (SchedMigrationAnalyzer) to encapsulate state.
- Used perf.session for event processing.
- Ported SchedGui.py to the same directory to keep it as a local
  dependency.
- Made wxPython dependency optional in sched-migration.py, printing a
  message if it's missing instead of failing with ImportError.
- Cleaned up Python 2 compatibility artifacts.

Assisted-by: Gemini:gemini-3.1-pro-preview
Signed-off-by: Ian Rogers <irogers@google.com>
---
v2:

tools/perf/python/SchedGui.py:
 - Python 3 Compatibility: Fixed TypeError issues caused by float
   division in Python 3 when wxPython expected integers. Used integer
   division ( // ) and explicit int() casts for scrollbar and size
   calculations.
 - wxPython Phoenix API Updates:
   - Replaced deprecated  SetDimensions()  with  SetSize() .
   - Replaced removed GetPositionTuple() with GetPosition() in
     on_mouse_down.
 - Fixed wx.PaintDC creation in on_paint to use
   event.GetEventObject() to ensure valid DC creation regardless of
   which window triggered the event.
 - Layout and Rendering Fixes:
   - Replaced static layout with a wx.SplitterWindow to physically
     separate the drawing area from the text area, preventing them
     from overlapping and restoring scrollbar functionality.
   - Adjusted the initial sash position to give 3/4 of the height to
     the drawing area.
   - Replaced wx.StaticText with a multiline wx.TextCtrl for the
     summary area to allow text selection and simpler value updates.
   - Added CPU labels ("CPU ") drawn at the left edge of the visible
     area in on_paint .
   - Added background clearing ( dc.Clear() ) in on_paint to avoid
     "ghosting" of old text and rectangles when scrolling.

tools/perf/python/sched-migration.py:
 - Fixed a bug where sharing a snapshot in find_time_slice caused data
   mutation across calls.
 - Added safety checks to handle empty data cases (e.g., when
   intervals have no events).
 - Fixed fallbacks in fill_zone when search conditions fail to find a
   matching time slice.
---
 tools/perf/python/SchedGui.py        | 219 +++++++++++++
 tools/perf/python/sched-migration.py | 469 +++++++++++++++++++++++++++
 2 files changed, 688 insertions(+)
 create mode 100755 tools/perf/python/SchedGui.py
 create mode 100755 tools/perf/python/sched-migration.py

diff --git a/tools/perf/python/SchedGui.py b/tools/perf/python/SchedGui.py
new file mode 100755
index 000000000000..6111f3e5f552
--- /dev/null
+++ b/tools/perf/python/SchedGui.py
@@ -0,0 +1,219 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0
+# SchedGui.py - Python extension for perf script, basic GUI code for
+#		traces drawing and overview.
+#
+# Copyright (C) 2010 by Frederic Weisbecker <fweisbec@gmail.com>
+#
+# Ported to modern directory structure.
+
+try:
+    import wx  # type: ignore
+except ImportError:
+    raise ImportError("You need to install the wxpython lib for this script")
+
+
+class RootFrame(wx.Frame):
+    Y_OFFSET = 100
+    RECT_HEIGHT = 100
+    RECT_SPACE = 50
+    EVENT_MARKING_WIDTH = 5
+
+    def __init__(self, sched_tracer, title, parent=None, id=-1):
+        wx.Frame.__init__(self, parent, id, title)
+
+        (self.screen_width, self.screen_height) = wx.GetDisplaySize()
+        self.screen_width -= 10
+        self.screen_height -= 10
+        self.zoom = 0.5
+        self.scroll_scale = 20
+        self.sched_tracer = sched_tracer
+        self.sched_tracer.set_root_win(self)
+        (self.ts_start, self.ts_end) = sched_tracer.interval()
+        self.update_width_virtual()
+        self.nr_rects = sched_tracer.nr_rectangles() + 1
+        self.height_virtual = RootFrame.Y_OFFSET + \
+            (self.nr_rects * (RootFrame.RECT_HEIGHT + RootFrame.RECT_SPACE))
+
+        # whole window panel
+        self.panel = wx.Panel(self, size=(self.screen_width, self.screen_height))
+
+        # scrollable container
+        # Create SplitterWindow
+        self.splitter = wx.SplitterWindow(self.panel, style=wx.SP_3D)
+
+        # scrollable container (Top)
+        self.scroll = wx.ScrolledWindow(self.splitter)
+        self.scroll.SetScrollbars(self.scroll_scale, self.scroll_scale,
+                                  int(self.width_virtual // self.scroll_scale),
+                                  int(self.height_virtual // self.scroll_scale))
+        self.scroll.EnableScrolling(True, True)
+        self.scroll.SetFocus()
+
+        # scrollable drawing area
+        self.scroll_panel = wx.Panel(self.scroll,
+                                     size=(self.screen_width - 15, self.screen_height // 2))
+        self.scroll_panel.Bind(wx.EVT_PAINT, self.on_paint)
+        self.scroll_panel.Bind(wx.EVT_KEY_DOWN, self.on_key_press)
+        self.scroll_panel.Bind(wx.EVT_LEFT_DOWN, self.on_mouse_down)
+        self.scroll.Bind(wx.EVT_KEY_DOWN, self.on_key_press)
+        self.scroll.Bind(wx.EVT_LEFT_DOWN, self.on_mouse_down)
+
+        self.scroll_panel.SetSize(int(self.width_virtual), int(self.height_virtual))
+
+        # Create a separate panel for text (Bottom)
+        self.text_panel = wx.Panel(self.splitter)
+        self.text_sizer = wx.BoxSizer(wx.VERTICAL)
+        self.txt = wx.TextCtrl(self.text_panel, -1, "Click a bar to see details",
+                               style=wx.TE_MULTILINE)
+        self.text_sizer.Add(self.txt, 1, wx.EXPAND | wx.ALL, 5)
+        self.text_panel.SetSizer(self.text_sizer)
+
+        # Split the window
+        self.splitter.SplitHorizontally(self.scroll, self.text_panel, (self.screen_height * 3) // 4)
+
+        # Main sizer to layout splitter
+        self.main_sizer = wx.BoxSizer(wx.VERTICAL)
+        self.main_sizer.Add(self.splitter, 1, wx.EXPAND)
+        self.panel.SetSizer(self.main_sizer)
+
+        self.scroll.Fit()
+        self.Fit()
+
+        self.Show(True)
+
+    def us_to_px(self, val):
+        return val / (10 ** 3) * self.zoom
+
+    def px_to_us(self, val):
+        return (val / self.zoom) * (10 ** 3)
+
+    def scroll_start(self):
+        (x, y) = self.scroll.GetViewStart()
+        return (x * self.scroll_scale, y * self.scroll_scale)
+
+    def scroll_start_us(self):
+        (x, y) = self.scroll_start()
+        return self.px_to_us(x)
+
+    def paint_rectangle_zone(self, nr, color, top_color, start, end):
+        offset_px = self.us_to_px(start - self.ts_start)
+        width_px = self.us_to_px(end - start)
+
+        offset_py = RootFrame.Y_OFFSET + (nr * (RootFrame.RECT_HEIGHT + RootFrame.RECT_SPACE))
+        width_py = RootFrame.RECT_HEIGHT
+
+        dc = self.dc
+
+        if top_color is not None:
+            (r, g, b) = top_color
+            top_color = wx.Colour(r, g, b)
+            brush = wx.Brush(top_color, wx.SOLID)
+            dc.SetBrush(brush)
+            dc.DrawRectangle(int(offset_px), int(offset_py),
+                             int(width_px), RootFrame.EVENT_MARKING_WIDTH)
+            width_py -= RootFrame.EVENT_MARKING_WIDTH
+            offset_py += RootFrame.EVENT_MARKING_WIDTH
+
+        (r, g, b) = color
+        color = wx.Colour(r, g, b)
+        brush = wx.Brush(color, wx.SOLID)
+        dc.SetBrush(brush)
+        dc.DrawRectangle(int(offset_px), int(offset_py), int(width_px), int(width_py))
+
+    def update_rectangles(self, dc, start, end):
+        start += self.ts_start
+        end += self.ts_start
+        self.sched_tracer.fill_zone(start, end)
+
+    def on_paint(self, event):
+        window = event.GetEventObject()
+        dc = wx.PaintDC(window)
+
+        # Clear background to avoid ghosting
+        dc.SetBackground(wx.Brush(window.GetBackgroundColour()))
+        dc.Clear()
+
+        self.dc = dc
+
+        width = min(self.width_virtual, self.screen_width)
+        (x, y) = self.scroll_start()
+        start = self.px_to_us(x)
+        end = self.px_to_us(x + width)
+        self.update_rectangles(dc, start, end)
+
+        # Draw CPU labels at the left edge of the visible area
+        (x_scroll, _) = self.scroll_start()
+        for nr in range(self.nr_rects):
+            offset_py = RootFrame.Y_OFFSET + (nr * (RootFrame.RECT_HEIGHT + RootFrame.RECT_SPACE))
+            dc.DrawText(f"CPU {nr}", x_scroll + 10, offset_py + 10)
+
+    def rect_from_ypixel(self, y):
+        y -= RootFrame.Y_OFFSET
+        rect = y // (RootFrame.RECT_HEIGHT + RootFrame.RECT_SPACE)
+        height = y % (RootFrame.RECT_HEIGHT + RootFrame.RECT_SPACE)
+
+        if rect < 0 or rect > self.nr_rects - 1 or height > RootFrame.RECT_HEIGHT:
+            return -1
+
+        return rect
+
+    def update_summary(self, txt):
+        self.txt.SetValue(txt)
+        self.text_panel.Layout()
+        self.splitter.Layout()
+        self.text_panel.Refresh()
+
+    def on_mouse_down(self, event):
+        pos = event.GetPosition()
+        x, y = pos.x, pos.y
+        rect = self.rect_from_ypixel(y)
+        if rect == -1:
+            return
+
+        t = self.px_to_us(x) + self.ts_start
+
+        self.sched_tracer.mouse_down(rect, t)
+
+    def update_width_virtual(self):
+        self.width_virtual = self.us_to_px(self.ts_end - self.ts_start)
+
+    def __zoom(self, x):
+        self.update_width_virtual()
+        (xpos, ypos) = self.scroll.GetViewStart()
+        xpos = int(self.us_to_px(x) // self.scroll_scale)
+        self.scroll.SetScrollbars(self.scroll_scale, self.scroll_scale,
+                                  int(self.width_virtual // self.scroll_scale),
+                                  int(self.height_virtual // self.scroll_scale),
+                                  xpos, ypos)
+        self.Refresh()
+
+    def zoom_in(self):
+        x = self.scroll_start_us()
+        self.zoom *= 2
+        self.__zoom(x)
+
+    def zoom_out(self):
+        x = self.scroll_start_us()
+        self.zoom /= 2
+        self.__zoom(x)
+
+    def on_key_press(self, event):
+        key = event.GetRawKeyCode()
+        if key == ord("+"):
+            self.zoom_in()
+            return
+        if key == ord("-"):
+            self.zoom_out()
+            return
+
+        key = event.GetKeyCode()
+        (x, y) = self.scroll.GetViewStart()
+        if key == wx.WXK_RIGHT:
+            self.scroll.Scroll(x + 1, y)
+        elif key == wx.WXK_LEFT:
+            self.scroll.Scroll(x - 1, y)
+        elif key == wx.WXK_DOWN:
+            self.scroll.Scroll(x, y + 1)
+        elif key == wx.WXK_UP:
+            self.scroll.Scroll(x, y - 1)
diff --git a/tools/perf/python/sched-migration.py b/tools/perf/python/sched-migration.py
new file mode 100755
index 000000000000..331278958763
--- /dev/null
+++ b/tools/perf/python/sched-migration.py
@@ -0,0 +1,469 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0
+"""
+Cpu task migration overview toy
+
+Copyright (C) 2010 Frederic Weisbecker <fweisbec@gmail.com>
+Ported to modern directory structure and refactored to use class.
+"""
+
+import argparse
+from collections import defaultdict, UserList
+import perf
+
+# SchedGui might not be available if wxPython is missing
+try:
+    from SchedGui import RootFrame
+    import wx  # type: ignore
+    WX_AVAILABLE = True
+except ImportError:
+    WX_AVAILABLE = False
+
+# Global threads dictionary
+threads = defaultdict(lambda: "unknown")
+threads[0] = "idle"
+
+
+def thread_name(pid: int) -> str:
+    """Return thread name formatted with pid."""
+    return f"{threads[pid]}:{pid}"
+
+
+def task_state(state: int) -> str:
+    """Map task state integer to string."""
+    states = {
+        0: "R",
+        1: "S",
+        2: "D",
+        64: "DEAD"
+    }
+    return states.get(state, "Unknown")
+
+
+class RunqueueEventUnknown:
+    """Unknown runqueue event."""
+    @staticmethod
+    def color():
+        """Return color for event."""
+        return None
+
+    def __repr__(self):
+        return "unknown"
+
+
+class RunqueueEventSleep:
+    """Sleep runqueue event."""
+    @staticmethod
+    def color():
+        """Return color for event."""
+        return 0, 0, 0xff
+
+    def __init__(self, sleeper: int):
+        self.sleeper = sleeper
+
+    def __repr__(self):
+        return f"{thread_name(self.sleeper)} gone to sleep"
+
+
+class RunqueueEventWakeup:
+    """Wakeup runqueue event."""
+    @staticmethod
+    def color():
+        """Return color for event."""
+        return 0xff, 0xff, 0
+
+    def __init__(self, wakee: int):
+        self.wakee = wakee
+
+    def __repr__(self):
+        return f"{thread_name(self.wakee)} woke up"
+
+
+class RunqueueEventFork:
+    """Fork runqueue event."""
+    @staticmethod
+    def color():
+        """Return color for event."""
+        return 0, 0xff, 0
+
+    def __init__(self, child: int):
+        self.child = child
+
+    def __repr__(self):
+        return f"new forked task {thread_name(self.child)}"
+
+
+class RunqueueMigrateIn:
+    """Migrate in runqueue event."""
+    @staticmethod
+    def color():
+        """Return color for event."""
+        return 0, 0xf0, 0xff
+
+    def __init__(self, new: int):
+        self.new = new
+
+    def __repr__(self):
+        return f"task migrated in {thread_name(self.new)}"
+
+
+class RunqueueMigrateOut:
+    """Migrate out runqueue event."""
+    @staticmethod
+    def color():
+        """Return color for event."""
+        return 0xff, 0, 0xff
+
+    def __init__(self, old: int):
+        self.old = old
+
+    def __repr__(self):
+        return f"task migrated out {thread_name(self.old)}"
+
+
+class RunqueueSnapshot:
+    """Snapshot of runqueue state."""
+
+    def __init__(self, tasks=None, event=None):
+        if tasks is None:
+            tasks = (0,)
+        if event is None:
+            event = RunqueueEventUnknown()
+        self.tasks = tuple(tasks)
+        self.event = event
+
+    def sched_switch(self, prev: int, prev_state: int, next_pid: int):
+        """Handle sched switch in snapshot."""
+        if task_state(prev_state) == "R" and next_pid in self.tasks \
+                and prev in self.tasks:
+            return self
+
+        event = RunqueueEventUnknown()
+        if task_state(prev_state) != "R":
+            event = RunqueueEventSleep(prev)  # type: ignore
+
+        next_tasks = list(self.tasks[:])
+        if prev in self.tasks:
+            if task_state(prev_state) != "R":
+                next_tasks.remove(prev)
+        elif task_state(prev_state) == "R":
+            next_tasks.append(prev)
+
+        if next_pid not in next_tasks:
+            next_tasks.append(next_pid)
+
+        return RunqueueSnapshot(next_tasks, event)
+
+    def migrate_out(self, old: int):
+        """Handle task migrate out in snapshot."""
+        if old not in self.tasks:
+            return self
+        next_tasks = [task for task in self.tasks if task != old]
+
+        return RunqueueSnapshot(next_tasks, RunqueueMigrateOut(old))
+
+    def __migrate_in(self, new: int, event):
+        if new in self.tasks:
+            return RunqueueSnapshot(self.tasks, event)
+        next_tasks = self.tasks + tuple([new])
+
+        return RunqueueSnapshot(next_tasks, event)
+
+    def migrate_in(self, new: int):
+        """Handle task migrate in in snapshot."""
+        return self.__migrate_in(new, RunqueueMigrateIn(new))
+
+    def wake_up(self, new: int):
+        """Handle task wakeup in snapshot."""
+        return self.__migrate_in(new, RunqueueEventWakeup(new))
+
+    def wake_up_new(self, new: int):
+        """Handle task fork in snapshot."""
+        return self.__migrate_in(new, RunqueueEventFork(new))
+
+    def load(self) -> int:
+        """Provide the number of tasks on the runqueue. Don't count idle"""
+        return len(self.tasks) - 1
+
+    def __repr__(self):
+        return self.tasks.__repr__()
+
+
+class TimeSlice:
+    """Represents a time slice of execution."""
+
+    def __init__(self, start: int, prev):
+        self.start = start
+        self.prev = prev
+        self.end = start
+        # cpus that triggered the event
+        self.event_cpus: list[int] = []
+        if prev is not None:
+            self.total_load = prev.total_load
+            self.rqs = prev.rqs.copy()
+        else:
+            self.rqs = defaultdict(RunqueueSnapshot)
+            self.total_load = 0
+
+    def __update_total_load(self, old_rq: RunqueueSnapshot, new_rq: RunqueueSnapshot):
+        diff = new_rq.load() - old_rq.load()
+        self.total_load += diff
+
+    def sched_switch(self, ts_list, prev: int, prev_state: int, next_pid: int, cpu: int):
+        """Process sched_switch in time slice."""
+        old_rq = self.prev.rqs[cpu]
+        new_rq = old_rq.sched_switch(prev, prev_state, next_pid)
+
+        if old_rq is new_rq:
+            return
+
+        self.rqs[cpu] = new_rq
+        self.__update_total_load(old_rq, new_rq)
+        ts_list.append(self)
+        self.event_cpus = [cpu]
+
+    def migrate(self, ts_list, new: int, old_cpu: int, new_cpu: int):
+        """Process task migration in time slice."""
+        if old_cpu == new_cpu:
+            return
+        old_rq = self.prev.rqs[old_cpu]
+        out_rq = old_rq.migrate_out(new)
+        self.rqs[old_cpu] = out_rq
+        self.__update_total_load(old_rq, out_rq)
+
+        new_rq = self.prev.rqs[new_cpu]
+        in_rq = new_rq.migrate_in(new)
+        self.rqs[new_cpu] = in_rq
+        self.__update_total_load(new_rq, in_rq)
+
+        ts_list.append(self)
+
+        if old_rq is not out_rq:
+            self.event_cpus.append(old_cpu)
+        self.event_cpus.append(new_cpu)
+
+    def wake_up(self, ts_list, pid: int, cpu: int, fork: bool):
+        """Process wakeup in time slice."""
+        old_rq = self.prev.rqs[cpu]
+        if fork:
+            new_rq = old_rq.wake_up_new(pid)
+        else:
+            new_rq = old_rq.wake_up(pid)
+
+        if new_rq is old_rq:
+            return
+        self.rqs[cpu] = new_rq
+        self.__update_total_load(old_rq, new_rq)
+        ts_list.append(self)
+        self.event_cpus = [cpu]
+
+    def next(self, t: int):
+        """Create next time slice."""
+        self.end = t
+        return TimeSlice(t, self)
+
+
+class TimeSliceList(UserList):
+    """List of time slices with search capabilities."""
+
+    def __init__(self, arg=None):
+        super().__init__(arg if arg is not None else [])
+        self.root_win = None
+
+    def get_time_slice(self, ts: int) -> TimeSlice:
+        """Get or create time slice for timestamp."""
+        if len(self.data) == 0:
+            ts_slice = TimeSlice(ts, TimeSlice(-1, None))
+        else:
+            ts_slice = self.data[-1].next(ts)
+        return ts_slice
+
+    def find_time_slice(self, ts: int) -> int:
+        """Binary search for time slice containing timestamp."""
+        if not self.data:
+            return -1
+        start = 0
+        end = len(self.data)
+        found = -1
+        searching = True
+        while searching:
+            if start in (end, end - 1):
+                searching = False
+
+            i = (end + start) // 2
+            if self.data[i].start <= ts <= self.data[i].end:
+                found = i
+                break
+
+            if self.data[i].end < ts:
+                start = i
+            elif self.data[i].start > ts:
+                end = i
+
+        return found
+
+    def set_root_win(self, win):
+        """Set root window for GUI."""
+        self.root_win = win
+
+    def mouse_down(self, cpu: int, t: int):
+        """Handle mouse down event from GUI."""
+        idx = self.find_time_slice(t)
+        if idx == -1:
+            return
+
+        ts = self[idx]
+        rq = ts.rqs[cpu]
+        raw = f"CPU: {cpu}\n"
+        raw += f"Last event : {repr(rq.event)}\n"
+        raw += f"Timestamp : {ts.start // (10 ** 9)}.{ts.start % (10 ** 9) // 1000:06d}\n"
+        raw += f"Duration : {(ts.end - ts.start) // (10 ** 6):6d} us\n"
+        raw += f"Load = {rq.load()}\n"
+        for task in rq.tasks:
+            raw += f"{thread_name(task)} \n"
+
+        if self.root_win:
+            self.root_win.update_summary(raw)
+
+    def update_rectangle_cpu(self, slice_obj: TimeSlice, cpu: int):
+        """Update rectangle for CPU in GUI."""
+        rq = slice_obj.rqs[cpu]
+
+        if slice_obj.total_load != 0:
+            load_rate = rq.load() / float(slice_obj.total_load)
+        else:
+            load_rate = 0
+
+        red_power = int(0xff - (0xff * load_rate))
+        color = (0xff, red_power, red_power)
+
+        top_color = None
+        if cpu in slice_obj.event_cpus:
+            top_color = rq.event.color()
+
+        if self.root_win:
+            self.root_win.paint_rectangle_zone(cpu, color, top_color,
+                                               slice_obj.start, slice_obj.end)
+
+    def fill_zone(self, start: int, end: int):
+        """Fill zone in GUI."""
+        i = self.find_time_slice(start)
+        if i == -1:
+            i = 0
+
+        for idx in range(i, len(self.data)):
+            timeslice = self.data[idx]
+            if timeslice.start > end:
+                return
+
+            for cpu in timeslice.rqs:
+                self.update_rectangle_cpu(timeslice, cpu)
+
+    def interval(self) -> tuple[int, int]:
+        """Return start and end timestamps."""
+        if len(self.data) == 0:
+            return 0, 0
+        return self.data[0].start, self.data[-1].end
+
+    def nr_rectangles(self) -> int:
+        """Return maximum CPU number."""
+        if not self.data:
+            return 0
+        last_ts = self.data[-1]
+        max_cpu = 0
+        for cpu in last_ts.rqs:
+            max_cpu = max(max_cpu, cpu)
+        return max_cpu
+
+
+class SchedMigrationAnalyzer:
+    """Analyzes task migrations and manages time slices."""
+
+    def __init__(self):
+        self.current_tsk = defaultdict(lambda: -1)
+        self.timeslices = TimeSliceList()
+
+    def sched_switch(self, time: int, cpu: int, prev_comm: str, prev_pid: int, prev_state: int,
+                     next_comm: str, next_pid: int):
+        """Handle sched_switch event."""
+        on_cpu_task = self.current_tsk[cpu]
+
+        if on_cpu_task not in (-1, prev_pid):
+            print(f"Sched switch event rejected ts: {time} cpu: {cpu} "
+                  f"prev: {prev_comm}({prev_pid}) next: {next_comm}({next_pid})")
+
+        threads[prev_pid] = prev_comm
+        threads[next_pid] = next_comm
+        self.current_tsk[cpu] = next_pid
+
+        ts = self.timeslices.get_time_slice(time)
+        ts.sched_switch(self.timeslices, prev_pid, prev_state, next_pid, cpu)
+
+    def migrate(self, time: int, pid: int, orig_cpu: int, dest_cpu: int):
+        """Handle sched_migrate_task event."""
+        ts = self.timeslices.get_time_slice(time)
+        ts.migrate(self.timeslices, pid, orig_cpu, dest_cpu)
+
+    def wake_up(self, time: int, pid: int, success: int, target_cpu: int, fork: bool):
+        """Handle wakeup event."""
+        if success == 0:
+            return
+        ts = self.timeslices.get_time_slice(time)
+        ts.wake_up(self.timeslices, pid, target_cpu, fork)
+
+    def process_event(self, sample: perf.sample_event) -> None:
+        """Collect events and pass to analyzer."""
+        name = str(sample.evsel)
+        time = sample.sample_time
+        cpu = sample.sample_cpu
+        _pid = sample.sample_pid
+        _comm = "Unknown"
+
+        if name == "evsel(sched:sched_switch)":
+            prev_comm = getattr(sample, "prev_comm", "Unknown")
+            prev_pid = getattr(sample, "prev_pid", -1)
+            prev_state = getattr(sample, "prev_state", 0)
+            next_comm = getattr(sample, "next_comm", "Unknown")
+            next_pid = getattr(sample, "next_pid", -1)
+            self.sched_switch(time, cpu, prev_comm, prev_pid, prev_state, next_comm, next_pid)
+        elif name == "evsel(sched:sched_migrate_task)":
+            task_pid = getattr(sample, "pid", -1)
+            orig_cpu = getattr(sample, "orig_cpu", -1)
+            dest_cpu = getattr(sample, "dest_cpu", -1)
+            self.migrate(time, task_pid, orig_cpu, dest_cpu)
+        elif name == "evsel(sched:sched_wakeup)":
+            task_pid = getattr(sample, "pid", -1)
+            success = getattr(sample, "success", 1)
+            target_cpu = getattr(sample, "target_cpu", -1)
+            self.wake_up(time, task_pid, success, target_cpu, False)
+        elif name == "evsel(sched:sched_wakeup_new)":
+            task_pid = getattr(sample, "pid", -1)
+            success = getattr(sample, "success", 1)
+            target_cpu = getattr(sample, "target_cpu", -1)
+            self.wake_up(time, task_pid, success, target_cpu, True)
+
+    def run_gui(self):
+        """Start wxPython GUI."""
+        if not WX_AVAILABLE:
+            print("wxPython is not available. Cannot start GUI.")
+            return
+        app = wx.App(False)
+        _frame = RootFrame(self.timeslices, "Migration")
+        app.MainLoop()
+
+
+if __name__ == "__main__":
+    ap = argparse.ArgumentParser(description="Cpu task migration overview toy")
+    ap.add_argument("-i", "--input", default="perf.data", help="Input file name")
+    args = ap.parse_args()
+
+    analyzer = SchedMigrationAnalyzer()
+
+    try:
+        session = perf.session(perf.data(args.input), sample=analyzer.process_event)
+        session.process_events()
+        analyzer.run_gui()
+    except KeyboardInterrupt:
+        pass
+    except Exception as e:
+        print(f"Error processing events: {e}")
-- 
2.54.0.545.g6539524ca2-goog


  parent reply	other threads:[~2026-04-25 22:51 UTC|newest]

Thread overview: 681+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-19 23:58 [PATCH v1 00/58] perf: Reorganize scripting support Ian Rogers
2026-04-19 23:58 ` [PATCH v1 01/58] perf inject: Fix itrace branch stack synthesis Ian Rogers
2026-04-20  0:49   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 02/58] perf arch arm: Sort includes and add missed explicit dependencies Ian Rogers
2026-04-19 23:58 ` [PATCH v1 03/58] perf arch x86: " Ian Rogers
2026-04-19 23:58 ` [PATCH v1 04/58] perf tests: " Ian Rogers
2026-04-19 23:58 ` [PATCH v1 05/58] perf script: " Ian Rogers
2026-04-19 23:58 ` [PATCH v1 06/58] perf util: " Ian Rogers
2026-04-20  0:20   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 07/58] perf python: Add " Ian Rogers
2026-04-19 23:58 ` [PATCH v1 08/58] perf evsel/evlist: Avoid unnecessary #includes Ian Rogers
2026-04-20  0:14   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 09/58] perf data: Add open flag Ian Rogers
2026-04-20  0:44   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 10/58] perf evlist: Add reference count Ian Rogers
2026-04-20  0:53   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 11/58] perf evsel: " Ian Rogers
2026-04-20  0:48   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 12/58] perf evlist: Add reference count checking Ian Rogers
2026-04-20  0:54   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 13/58] perf python: Use evsel in sample in pyrf_event Ian Rogers
2026-04-20  0:46   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 14/58] perf python: Add wrapper for perf_data file abstraction Ian Rogers
2026-04-20  0:33   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 15/58] perf python: Add python session abstraction wrapping perf's session Ian Rogers
2026-04-20  0:46   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 16/58] perf python: Add syscall name/id to convert syscall number and name Ian Rogers
2026-04-20  0:35   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 17/58] perf python: Refactor and add accessors to sample event Ian Rogers
2026-04-20  1:16   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 18/58] perf python: Add callchain support Ian Rogers
2026-04-20  0:48   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 19/58] perf python: Add config file access Ian Rogers
2026-04-20  0:27   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 20/58] perf python: Extend API for stat events in python.c Ian Rogers
2026-04-20  0:37   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 21/58] perf python: Expose brstack in sample event Ian Rogers
2026-04-20  0:34   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 22/58] perf python: Add perf.pyi stubs file Ian Rogers
2026-04-20  0:33   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 23/58] perf python: Add LiveSession helper Ian Rogers
2026-04-20  2:14   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 24/58] perf python: Move exported-sql-viewer.py and parallel-perf.py to tools/perf/python/ Ian Rogers
2026-04-20  0:22   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 25/58] perf stat-cpi: Port stat-cpi to use python module Ian Rogers
2026-04-20  0:33   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 26/58] perf mem-phys-addr: Port mem-phys-addr " Ian Rogers
2026-04-20  0:20   ` sashiko-bot
2026-04-23  3:54   ` [PATCH v2 00/58] perf: Reorganize scripting support Ian Rogers
2026-04-23  3:54     ` [PATCH v2 01/58] perf inject: Fix itrace branch stack synthesis Ian Rogers
2026-04-23  4:41       ` sashiko-bot
2026-04-23  3:54     ` [PATCH v2 02/58] perf arch arm: Sort includes and add missed explicit dependencies Ian Rogers
2026-04-23  3:54     ` [PATCH v2 03/58] perf arch x86: " Ian Rogers
2026-04-23  3:54     ` [PATCH v2 04/58] perf tests: " Ian Rogers
2026-04-23  3:54     ` [PATCH v2 05/58] perf script: " Ian Rogers
2026-04-23  3:54     ` [PATCH v2 06/58] perf util: " Ian Rogers
2026-04-23  3:54     ` [PATCH v2 07/58] perf python: Add " Ian Rogers
2026-04-23  3:54     ` [PATCH v2 08/58] perf evsel/evlist: Avoid unnecessary #includes Ian Rogers
2026-04-23  3:54     ` [PATCH v2 09/58] perf data: Add open flag Ian Rogers
2026-04-23  3:54     ` [PATCH v2 10/58] perf evlist: Add reference count Ian Rogers
2026-04-23  4:19       ` sashiko-bot
2026-04-23  3:54     ` [PATCH v2 11/58] perf evsel: " Ian Rogers
2026-04-23  4:24       ` sashiko-bot
2026-04-23  3:54     ` [PATCH v2 12/58] perf evlist: Add reference count checking Ian Rogers
2026-04-23  4:34       ` sashiko-bot
2026-04-23  3:54     ` [PATCH v2 13/58] perf python: Use evsel in sample in pyrf_event Ian Rogers
2026-04-23  6:00       ` sashiko-bot
2026-04-23  3:54     ` [PATCH v2 14/58] perf python: Add wrapper for perf_data file abstraction Ian Rogers
2026-04-23  4:25       ` sashiko-bot
2026-04-23  3:54     ` [PATCH v2 15/58] perf python: Add python session abstraction wrapping perf's session Ian Rogers
2026-04-23  5:05       ` sashiko-bot
2026-04-23  3:54     ` [PATCH v2 16/58] perf python: Add syscall name/id to convert syscall number and name Ian Rogers
2026-04-23  4:25       ` sashiko-bot
2026-04-23  3:54     ` [PATCH v2 17/58] perf python: Refactor and add accessors to sample event Ian Rogers
2026-04-23  5:29       ` sashiko-bot
2026-04-23  3:54     ` [PATCH v2 18/58] perf python: Add callchain support Ian Rogers
2026-04-23  4:19       ` sashiko-bot
2026-04-23  3:54     ` [PATCH v2 19/58] perf python: Add config file access Ian Rogers
2026-04-23  3:54     ` [PATCH v2 20/58] perf python: Extend API for stat events in python.c Ian Rogers
2026-04-23  4:19       ` sashiko-bot
2026-04-23  3:54     ` [PATCH v2 21/58] perf python: Expose brstack in sample event Ian Rogers
2026-04-23  4:19       ` sashiko-bot
2026-04-23  3:54     ` [PATCH v2 22/58] perf python: Add perf.pyi stubs file Ian Rogers
2026-04-23  4:20       ` sashiko-bot
2026-04-23  3:54     ` [PATCH v2 23/58] perf python: Add LiveSession helper Ian Rogers
2026-04-23  4:31       ` sashiko-bot
2026-04-23  3:54     ` [PATCH v2 24/58] perf python: Move exported-sql-viewer.py and parallel-perf.py to tools/perf/python/ Ian Rogers
2026-04-23  4:11       ` sashiko-bot
2026-04-23  3:54     ` [PATCH v2 25/58] perf stat-cpi: Port stat-cpi to use python module Ian Rogers
2026-04-23  4:18       ` sashiko-bot
2026-04-23  3:54     ` [PATCH v2 26/58] perf mem-phys-addr: Port mem-phys-addr " Ian Rogers
2026-04-23  4:10       ` sashiko-bot
2026-04-23  3:54     ` [PATCH v2 27/58] perf syscall-counts: Port syscall-counts " Ian Rogers
2026-04-23  3:54     ` [PATCH v2 28/58] perf syscall-counts-by-pid: Port syscall-counts-by-pid " Ian Rogers
2026-04-23  4:14       ` sashiko-bot
2026-04-23  3:54     ` [PATCH v2 29/58] perf futex-contention: Port futex-contention " Ian Rogers
2026-04-23  4:13       ` sashiko-bot
2026-04-23  3:54     ` [PATCH v2 30/58] perf flamegraph: Port flamegraph " Ian Rogers
2026-04-23  4:14       ` sashiko-bot
2026-04-23  3:54     ` [PATCH v2 31/58] perf gecko: Port gecko " Ian Rogers
2026-04-23  4:20       ` sashiko-bot
2026-04-23  3:54     ` [PATCH v2 32/58] perf arm-cs-trace-disasm: Port arm-cs-trace-disasm " Ian Rogers
2026-04-23  4:31       ` sashiko-bot
2026-04-23  3:55     ` [PATCH v2 33/58] perf check-perf-trace: Port check-perf-trace " Ian Rogers
2026-04-23  4:18       ` sashiko-bot
2026-04-23  3:55     ` [PATCH v2 34/58] perf compaction-times: Port compaction-times " Ian Rogers
2026-04-23  4:24       ` sashiko-bot
2026-04-23  3:55     ` [PATCH v2 35/58] perf event_analyzing_sample: Port event_analyzing_sample " Ian Rogers
2026-04-23  3:55     ` [PATCH v2 36/58] perf export-to-sqlite: Port export-to-sqlite " Ian Rogers
2026-04-23  4:17       ` sashiko-bot
2026-04-23  3:55     ` [PATCH v2 37/58] perf export-to-postgresql: Port export-to-postgresql " Ian Rogers
2026-04-23  4:19       ` sashiko-bot
2026-04-23  3:55     ` [PATCH v2 38/58] perf failed-syscalls-by-pid: Port failed-syscalls-by-pid " Ian Rogers
2026-04-23  4:12       ` sashiko-bot
2026-04-23  3:55     ` [PATCH v2 39/58] perf intel-pt-events: Port intel-pt-events/libxed " Ian Rogers
2026-04-23  4:11       ` sashiko-bot
2026-04-23  3:55     ` [PATCH v2 40/58] perf net_dropmonitor: Port net_dropmonitor " Ian Rogers
2026-04-23  4:07       ` sashiko-bot
2026-04-23  3:55     ` [PATCH v2 41/58] perf netdev-times: Port netdev-times " Ian Rogers
2026-04-23  4:11       ` sashiko-bot
2026-04-23  3:55     ` [PATCH v2 42/58] perf powerpc-hcalls: Port powerpc-hcalls " Ian Rogers
2026-04-23  4:15       ` sashiko-bot
2026-04-23  3:55     ` [PATCH v2 43/58] perf sched-migration: Port sched-migration/SchedGui " Ian Rogers
2026-04-23  3:55     ` [PATCH v2 44/58] perf sctop: Port sctop " Ian Rogers
2026-04-23  4:20       ` sashiko-bot
2026-04-23  3:55     ` [PATCH v2 45/58] perf stackcollapse: Port stackcollapse " Ian Rogers
2026-04-23  4:17       ` sashiko-bot
2026-04-23  3:55     ` [PATCH v2 46/58] perf task-analyzer: Port task-analyzer " Ian Rogers
2026-04-23  4:30       ` sashiko-bot
2026-04-23  3:55     ` [PATCH v2 47/58] perf failed-syscalls: Port failed-syscalls " Ian Rogers
2026-04-23  4:19       ` sashiko-bot
2026-04-23  3:55     ` [PATCH v2 48/58] perf rw-by-file: Port rw-by-file " Ian Rogers
2026-04-23  4:28       ` sashiko-bot
2026-04-23  3:55     ` [PATCH v2 49/58] perf rw-by-pid: Port rw-by-pid " Ian Rogers
2026-04-23  4:14       ` sashiko-bot
2026-04-23  3:55     ` [PATCH v2 50/58] perf rwtop: Port rwtop " Ian Rogers
2026-04-23  4:26       ` sashiko-bot
2026-04-23  3:55     ` [PATCH v2 51/58] perf wakeup-latency: Port wakeup-latency " Ian Rogers
2026-04-23  3:55     ` [PATCH v2 52/58] perf test: Migrate Intel PT virtual LBR test to use Python API Ian Rogers
2026-04-23  4:27       ` sashiko-bot
2026-04-23  3:55     ` [PATCH v2 53/58] perf: Remove libperl support, legacy Perl scripts and tests Ian Rogers
2026-04-23  3:55     ` [PATCH v2 54/58] perf: Remove libpython support and legacy Python scripts Ian Rogers
2026-04-23  3:55     ` [PATCH v2 55/58] perf Makefile: Update Python script installation path Ian Rogers
2026-04-23  4:33       ` sashiko-bot
2026-04-23  3:55     ` [PATCH v2 56/58] perf script: Refactor to support standalone scripts and remove legacy features Ian Rogers
2026-04-23  4:57       ` sashiko-bot
2026-04-23  3:55     ` [PATCH v2 57/58] perf Documentation: Update for standalone Python scripts and remove obsolete data Ian Rogers
2026-04-23  5:31       ` sashiko-bot
2026-04-23  3:55     ` [PATCH v2 58/58] perf python: Improve perf script -l descriptions Ian Rogers
2026-04-23  4:50       ` sashiko-bot
2026-04-23 16:09     ` [PATCH v3 00/58] perf: Reorganize scripting support Ian Rogers
2026-04-23 16:09       ` [PATCH v3 01/58] perf arch arm: Sort includes and add missed explicit dependencies Ian Rogers
2026-04-23 16:09       ` [PATCH v3 02/58] perf arch x86: " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 03/58] perf tests: " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 04/58] perf script: " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 05/58] perf util: " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 06/58] perf python: Add " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 07/58] perf evsel/evlist: Avoid unnecessary #includes Ian Rogers
2026-04-23 16:09       ` [PATCH v3 08/58] perf data: Add open flag Ian Rogers
2026-04-23 16:09       ` [PATCH v3 09/58] perf evlist: Add reference count Ian Rogers
2026-04-23 16:09       ` [PATCH v3 10/58] perf evsel: " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 11/58] perf evlist: Add reference count checking Ian Rogers
2026-04-23 16:09       ` [PATCH v3 12/58] perf python: Use evsel in sample in pyrf_event Ian Rogers
2026-04-23 16:09       ` [PATCH v3 13/58] perf python: Add wrapper for perf_data file abstraction Ian Rogers
2026-04-23 16:09       ` [PATCH v3 14/58] perf python: Add python session abstraction wrapping perf's session Ian Rogers
2026-04-23 16:09       ` [PATCH v3 15/58] perf python: Add syscall name/id to convert syscall number and name Ian Rogers
2026-04-23 16:09       ` [PATCH v3 16/58] perf python: Refactor and add accessors to sample event Ian Rogers
2026-04-23 16:09       ` [PATCH v3 17/58] perf python: Add callchain support Ian Rogers
2026-04-23 16:09       ` [PATCH v3 18/58] perf python: Add config file access Ian Rogers
2026-04-23 16:09       ` [PATCH v3 19/58] perf python: Extend API for stat events in python.c Ian Rogers
2026-04-23 16:09       ` [PATCH v3 20/58] perf python: Expose brstack in sample event Ian Rogers
2026-04-23 16:09       ` [PATCH v3 21/58] perf python: Add perf.pyi stubs file Ian Rogers
2026-04-23 16:09       ` [PATCH v3 22/58] perf python: Add LiveSession helper Ian Rogers
2026-04-23 16:09       ` [PATCH v3 23/58] perf python: Move exported-sql-viewer.py and parallel-perf.py to tools/perf/python/ Ian Rogers
2026-04-23 16:09       ` [PATCH v3 24/58] perf stat-cpi: Port stat-cpi to use python module Ian Rogers
2026-04-23 16:09       ` [PATCH v3 25/58] perf mem-phys-addr: Port mem-phys-addr " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 26/58] perf syscall-counts: Port syscall-counts " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 27/58] perf syscall-counts-by-pid: Port syscall-counts-by-pid " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 28/58] perf futex-contention: Port futex-contention " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 29/58] perf flamegraph: Port flamegraph " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 30/58] perf gecko: Port gecko " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 31/58] perf arm-cs-trace-disasm: Port arm-cs-trace-disasm " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 32/58] perf check-perf-trace: Port check-perf-trace " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 33/58] perf compaction-times: Port compaction-times " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 34/58] perf event_analyzing_sample: Port event_analyzing_sample " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 35/58] perf export-to-sqlite: Port export-to-sqlite " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 36/58] perf export-to-postgresql: Port export-to-postgresql " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 37/58] perf failed-syscalls-by-pid: Port failed-syscalls-by-pid " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 38/58] perf intel-pt-events: Port intel-pt-events/libxed " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 39/58] perf net_dropmonitor: Port net_dropmonitor " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 40/58] perf netdev-times: Port netdev-times " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 41/58] perf powerpc-hcalls: Port powerpc-hcalls " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 42/58] perf sched-migration: Port sched-migration/SchedGui " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 43/58] perf sctop: Port sctop " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 44/58] perf stackcollapse: Port stackcollapse " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 45/58] perf task-analyzer: Port task-analyzer " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 46/58] perf failed-syscalls: Port failed-syscalls " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 47/58] perf rw-by-file: Port rw-by-file " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 48/58] perf rw-by-pid: Port rw-by-pid " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 49/58] perf rwtop: Port rwtop " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 50/58] perf wakeup-latency: Port wakeup-latency " Ian Rogers
2026-04-23 16:09       ` [PATCH v3 51/58] perf test: Migrate Intel PT virtual LBR test to use Python API Ian Rogers
2026-04-23 16:09       ` [PATCH v3 52/58] perf: Remove libperl support, legacy Perl scripts and tests Ian Rogers
2026-04-23 16:10       ` [PATCH v3 53/58] perf: Remove libpython support and legacy Python scripts Ian Rogers
2026-04-23 16:10       ` [PATCH v3 54/58] perf Makefile: Update Python script installation path Ian Rogers
2026-04-23 16:10       ` [PATCH v3 55/58] perf script: Refactor to support standalone scripts and remove legacy features Ian Rogers
2026-04-23 16:10       ` [PATCH v3 56/58] perf Documentation: Update for standalone Python scripts and remove obsolete data Ian Rogers
2026-04-23 16:10       ` [PATCH v3 57/58] perf python: Improve perf script -l descriptions Ian Rogers
2026-04-23 16:10       ` [PATCH v3 58/58] fixup! perf check-perf-trace: Port check-perf-trace to use python module Ian Rogers
2026-04-23 16:33       ` [PATCH v4 00/58] perf: Reorganize scripting support Ian Rogers
2026-04-23 16:33         ` [PATCH v4 01/58] perf inject: Fix itrace branch stack synthesis Ian Rogers
2026-04-23 16:33         ` [PATCH v4 02/58] perf arch arm: Sort includes and add missed explicit dependencies Ian Rogers
2026-04-23 16:33         ` [PATCH v4 03/58] perf arch x86: " Ian Rogers
2026-04-23 16:33         ` [PATCH v4 04/58] perf tests: " Ian Rogers
2026-04-23 16:33         ` [PATCH v4 05/58] perf script: " Ian Rogers
2026-04-23 16:33         ` [PATCH v4 06/58] perf util: " Ian Rogers
2026-04-23 16:33         ` [PATCH v4 07/58] perf python: Add " Ian Rogers
2026-04-23 16:33         ` [PATCH v4 08/58] perf evsel/evlist: Avoid unnecessary #includes Ian Rogers
2026-04-23 16:33         ` [PATCH v4 09/58] perf data: Add open flag Ian Rogers
2026-04-23 16:33         ` [PATCH v4 10/58] perf evlist: Add reference count Ian Rogers
2026-04-23 16:33         ` [PATCH v4 11/58] perf evsel: " Ian Rogers
2026-04-23 16:33         ` [PATCH v4 12/58] perf evlist: Add reference count checking Ian Rogers
2026-04-23 16:33         ` [PATCH v4 13/58] perf python: Use evsel in sample in pyrf_event Ian Rogers
2026-04-23 16:33         ` [PATCH v4 14/58] perf python: Add wrapper for perf_data file abstraction Ian Rogers
2026-04-23 16:33         ` [PATCH v4 15/58] perf python: Add python session abstraction wrapping perf's session Ian Rogers
2026-04-23 16:33         ` [PATCH v4 16/58] perf python: Add syscall name/id to convert syscall number and name Ian Rogers
2026-04-23 16:33         ` [PATCH v4 17/58] perf python: Refactor and add accessors to sample event Ian Rogers
2026-04-23 16:33         ` [PATCH v4 18/58] perf python: Add callchain support Ian Rogers
2026-04-23 16:33         ` [PATCH v4 19/58] perf python: Add config file access Ian Rogers
2026-04-23 16:33         ` [PATCH v4 20/58] perf python: Extend API for stat events in python.c Ian Rogers
2026-04-23 16:33         ` [PATCH v4 21/58] perf python: Expose brstack in sample event Ian Rogers
2026-04-23 16:33         ` [PATCH v4 22/58] perf python: Add perf.pyi stubs file Ian Rogers
2026-04-23 16:33         ` [PATCH v4 23/58] perf python: Add LiveSession helper Ian Rogers
2026-04-23 16:33         ` [PATCH v4 24/58] perf python: Move exported-sql-viewer.py and parallel-perf.py to tools/perf/python/ Ian Rogers
2026-04-23 16:33         ` [PATCH v4 25/58] perf stat-cpi: Port stat-cpi to use python module Ian Rogers
2026-04-23 16:33         ` [PATCH v4 26/58] perf mem-phys-addr: Port mem-phys-addr " Ian Rogers
2026-04-23 16:33         ` [PATCH v4 27/58] perf syscall-counts: Port syscall-counts " Ian Rogers
2026-04-23 17:58         ` [PATCH v4 00/58] perf: Reorganize scripting support Ian Rogers
2026-04-24 16:46         ` [PATCH v5 " Ian Rogers
2026-04-24 16:46           ` [PATCH v5 01/58] perf inject: Fix itrace branch stack synthesis Ian Rogers
2026-04-24 17:32             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 02/58] perf arch arm: Sort includes and add missed explicit dependencies Ian Rogers
2026-04-24 17:08             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 03/58] perf arch x86: " Ian Rogers
2026-04-24 16:46           ` [PATCH v5 04/58] perf tests: " Ian Rogers
2026-04-24 16:46           ` [PATCH v5 05/58] perf script: " Ian Rogers
2026-04-24 16:46           ` [PATCH v5 06/58] perf util: " Ian Rogers
2026-04-24 16:46           ` [PATCH v5 07/58] perf python: Add " Ian Rogers
2026-04-24 16:46           ` [PATCH v5 08/58] perf evsel/evlist: Avoid unnecessary #includes Ian Rogers
2026-04-24 16:46           ` [PATCH v5 09/58] perf data: Add open flag Ian Rogers
2026-04-24 16:46           ` [PATCH v5 10/58] perf evlist: Add reference count Ian Rogers
2026-04-24 17:25             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 11/58] perf evsel: " Ian Rogers
2026-04-24 17:31             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 12/58] perf evlist: Add reference count checking Ian Rogers
2026-04-24 17:37             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 13/58] perf python: Use evsel in sample in pyrf_event Ian Rogers
2026-04-24 16:46           ` [PATCH v5 14/58] perf python: Add wrapper for perf_data file abstraction Ian Rogers
2026-04-24 17:35             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 15/58] perf python: Add python session abstraction wrapping perf's session Ian Rogers
2026-04-24 18:08             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 16/58] perf python: Add syscall name/id to convert syscall number and name Ian Rogers
2026-04-24 17:19             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 17/58] perf python: Refactor and add accessors to sample event Ian Rogers
2026-04-24 18:23             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 18/58] perf python: Add callchain support Ian Rogers
2026-04-24 17:38             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 19/58] perf python: Add config file access Ian Rogers
2026-04-24 16:46           ` [PATCH v5 20/58] perf python: Extend API for stat events in python.c Ian Rogers
2026-04-24 17:17             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 21/58] perf python: Expose brstack in sample event Ian Rogers
2026-04-24 17:38             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 22/58] perf python: Add perf.pyi stubs file Ian Rogers
2026-04-24 17:13             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 23/58] perf python: Add LiveSession helper Ian Rogers
2026-04-24 18:15             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 24/58] perf python: Move exported-sql-viewer.py and parallel-perf.py to tools/perf/python/ Ian Rogers
2026-04-24 17:15             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 25/58] perf stat-cpi: Port stat-cpi to use python module Ian Rogers
2026-04-24 17:29             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 26/58] perf mem-phys-addr: Port mem-phys-addr " Ian Rogers
2026-04-24 17:08             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 27/58] perf syscall-counts: Port syscall-counts " Ian Rogers
2026-04-24 17:13             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 28/58] perf syscall-counts-by-pid: Port syscall-counts-by-pid " Ian Rogers
2026-04-24 17:07             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 29/58] perf futex-contention: Port futex-contention " Ian Rogers
2026-04-24 17:13             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 30/58] perf flamegraph: Port flamegraph " Ian Rogers
2026-04-24 17:22             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 31/58] perf gecko: Port gecko " Ian Rogers
2026-04-24 17:18             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 32/58] perf arm-cs-trace-disasm: Port arm-cs-trace-disasm " Ian Rogers
2026-04-24 17:36             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 33/58] perf check-perf-trace: Port check-perf-trace " Ian Rogers
2026-04-24 17:14             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 34/58] perf compaction-times: Port compaction-times " Ian Rogers
2026-04-24 17:15             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 35/58] perf event_analyzing_sample: Port event_analyzing_sample " Ian Rogers
2026-04-24 17:12             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 36/58] perf export-to-sqlite: Port export-to-sqlite " Ian Rogers
2026-04-24 17:17             ` sashiko-bot
2026-04-24 16:46           ` [PATCH v5 37/58] perf export-to-postgresql: Port export-to-postgresql " Ian Rogers
2026-04-24 17:11             ` sashiko-bot
2026-04-24 16:47           ` [PATCH v5 38/58] perf failed-syscalls-by-pid: Port failed-syscalls-by-pid " Ian Rogers
2026-04-24 17:07             ` sashiko-bot
2026-04-24 16:47           ` [PATCH v5 39/58] perf intel-pt-events: Port intel-pt-events/libxed " Ian Rogers
2026-04-24 17:13             ` sashiko-bot
2026-04-24 16:47           ` [PATCH v5 40/58] perf net_dropmonitor: Port net_dropmonitor " Ian Rogers
2026-04-24 17:03             ` sashiko-bot
2026-04-24 16:47           ` [PATCH v5 41/58] perf netdev-times: Port netdev-times " Ian Rogers
2026-04-24 17:18             ` sashiko-bot
2026-04-24 16:47           ` [PATCH v5 42/58] perf powerpc-hcalls: Port powerpc-hcalls " Ian Rogers
2026-04-24 17:22             ` sashiko-bot
2026-04-24 16:47           ` [PATCH v5 43/58] perf sched-migration: Port sched-migration/SchedGui " Ian Rogers
2026-04-24 16:47           ` [PATCH v5 44/58] perf sctop: Port sctop " Ian Rogers
2026-04-24 17:26             ` sashiko-bot
2026-04-24 16:47           ` [PATCH v5 45/58] perf stackcollapse: Port stackcollapse " Ian Rogers
2026-04-24 17:23             ` sashiko-bot
2026-04-24 16:47           ` [PATCH v5 46/58] perf task-analyzer: Port task-analyzer " Ian Rogers
2026-04-24 17:30             ` sashiko-bot
2026-04-24 16:47           ` [PATCH v5 47/58] perf failed-syscalls: Port failed-syscalls " Ian Rogers
2026-04-24 17:20             ` sashiko-bot
2026-04-24 16:47           ` [PATCH v5 48/58] perf rw-by-file: Port rw-by-file " Ian Rogers
2026-04-24 17:43             ` sashiko-bot
2026-04-24 16:47           ` [PATCH v5 49/58] perf rw-by-pid: Port rw-by-pid " Ian Rogers
2026-04-24 17:21             ` sashiko-bot
2026-04-24 16:47           ` [PATCH v5 50/58] perf rwtop: Port rwtop " Ian Rogers
2026-04-24 17:14             ` sashiko-bot
2026-04-24 16:47           ` [PATCH v5 51/58] perf wakeup-latency: Port wakeup-latency " Ian Rogers
2026-04-24 17:39             ` sashiko-bot
2026-04-24 16:47           ` [PATCH v5 52/58] perf test: Migrate Intel PT virtual LBR test to use Python API Ian Rogers
2026-04-24 17:28             ` sashiko-bot
2026-04-24 16:47           ` [PATCH v5 53/58] perf: Remove libperl support, legacy Perl scripts and tests Ian Rogers
2026-04-24 17:47             ` sashiko-bot
2026-04-24 16:47           ` [PATCH v5 54/58] perf: Remove libpython support and legacy Python scripts Ian Rogers
2026-04-24 16:47           ` [PATCH v5 55/58] perf Makefile: Update Python script installation path Ian Rogers
2026-04-24 18:21             ` sashiko-bot
2026-04-24 16:47           ` [PATCH v5 56/58] perf script: Refactor to support standalone scripts and remove legacy features Ian Rogers
2026-04-24 17:38             ` sashiko-bot
2026-04-24 16:47           ` [PATCH v5 57/58] perf Documentation: Update for standalone Python scripts and remove obsolete data Ian Rogers
2026-04-24 17:30             ` sashiko-bot
2026-04-24 16:47           ` [PATCH v5 58/58] perf python: Improve perf script -l descriptions Ian Rogers
2026-04-24 17:35             ` sashiko-bot
2026-04-25 17:47           ` [PATCH v6 00/59] perf: Reorganize scripting support Ian Rogers
2026-04-25 17:47             ` [PATCH v6 01/59] perf inject: Fix itrace branch stack synthesis Ian Rogers
2026-04-25 18:31               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 02/59] perf arch arm: Sort includes and add missed explicit dependencies Ian Rogers
2026-04-25 17:48             ` [PATCH v6 03/59] perf arch x86: " Ian Rogers
2026-04-25 17:48             ` [PATCH v6 04/59] perf tests: " Ian Rogers
2026-04-25 17:48             ` [PATCH v6 05/59] perf script: " Ian Rogers
2026-04-25 17:48             ` [PATCH v6 06/59] perf util: " Ian Rogers
2026-04-25 17:48             ` [PATCH v6 07/59] perf python: Add " Ian Rogers
2026-04-25 17:48             ` [PATCH v6 08/59] perf evsel/evlist: Avoid unnecessary #includes Ian Rogers
2026-04-25 17:48             ` [PATCH v6 09/59] perf data: Add open flag Ian Rogers
2026-04-25 18:20               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 10/59] perf evlist: Add reference count Ian Rogers
2026-04-25 18:16               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 11/59] perf evsel: " Ian Rogers
2026-04-25 18:19               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 12/59] perf evlist: Add reference count checking Ian Rogers
2026-04-25 18:28               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 13/59] perf python: Use evsel in sample in pyrf_event Ian Rogers
2026-04-25 19:06               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 14/59] perf python: Add wrapper for perf_data file abstraction Ian Rogers
2026-04-25 18:19               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 15/59] perf python: Add python session abstraction wrapping perf's session Ian Rogers
2026-04-25 18:33               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 16/59] perf python: Add syscall name/id to convert syscall number and name Ian Rogers
2026-04-25 18:15               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 17/59] perf python: Refactor and add accessors to sample event Ian Rogers
2026-04-25 18:43               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 18/59] perf python: Add callchain support Ian Rogers
2026-04-25 18:15               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 19/59] perf python: Add config file access Ian Rogers
2026-04-25 17:48             ` [PATCH v6 20/59] perf python: Extend API for stat events in python.c Ian Rogers
2026-04-25 18:19               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 21/59] perf python: Expose brstack in sample event Ian Rogers
2026-04-25 18:11               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 22/59] perf python: Add perf.pyi stubs file Ian Rogers
2026-04-25 18:11               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 23/59] perf python: Add LiveSession helper Ian Rogers
2026-04-25 18:29               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 24/59] perf python: Move exported-sql-viewer.py and parallel-perf.py to tools/perf/python/ Ian Rogers
2026-04-25 18:07               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 25/59] perf stat-cpi: Port stat-cpi to use python module Ian Rogers
2026-04-25 18:07               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 26/59] perf mem-phys-addr: Port mem-phys-addr " Ian Rogers
2026-04-25 18:07               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 27/59] perf syscall-counts: Port syscall-counts " Ian Rogers
2026-04-25 18:04               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 28/59] perf syscall-counts-by-pid: Port syscall-counts-by-pid " Ian Rogers
2026-04-25 18:03               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 29/59] perf futex-contention: Port futex-contention " Ian Rogers
2026-04-25 18:09               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 30/59] perf flamegraph: Port flamegraph " Ian Rogers
2026-04-25 18:12               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 31/59] perf gecko: Port gecko " Ian Rogers
2026-04-25 17:48             ` [PATCH v6 32/59] perf arm-cs-trace-disasm: Port arm-cs-trace-disasm " Ian Rogers
2026-04-25 18:15               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 33/59] perf check-perf-trace: Port check-perf-trace " Ian Rogers
2026-04-25 18:08               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 34/59] perf compaction-times: Port compaction-times " Ian Rogers
2026-04-25 18:10               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 35/59] perf event_analyzing_sample: Port event_analyzing_sample " Ian Rogers
2026-04-25 17:48             ` [PATCH v6 36/59] perf export-to-sqlite: Port export-to-sqlite " Ian Rogers
2026-04-25 18:12               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 37/59] perf export-to-postgresql: Port export-to-postgresql " Ian Rogers
2026-04-25 18:12               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 38/59] perf failed-syscalls-by-pid: Port failed-syscalls-by-pid " Ian Rogers
2026-04-25 18:05               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 39/59] perf intel-pt-events: Port intel-pt-events/libxed " Ian Rogers
2026-04-25 18:10               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 40/59] perf net_dropmonitor: Port net_dropmonitor " Ian Rogers
2026-04-25 18:00               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 41/59] perf netdev-times: Port netdev-times " Ian Rogers
2026-04-25 18:12               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 42/59] perf powerpc-hcalls: Port powerpc-hcalls " Ian Rogers
2026-04-25 18:09               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 43/59] perf sched-migration: Port sched-migration/SchedGui " Ian Rogers
2026-04-25 17:48             ` [PATCH v6 44/59] perf sctop: Port sctop " Ian Rogers
2026-04-25 18:08               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 45/59] perf stackcollapse: Port stackcollapse " Ian Rogers
2026-04-25 18:08               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 46/59] perf task-analyzer: Port task-analyzer " Ian Rogers
2026-04-25 18:18               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 47/59] perf failed-syscalls: Port failed-syscalls " Ian Rogers
2026-04-25 18:08               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 48/59] perf rw-by-file: Port rw-by-file " Ian Rogers
2026-04-25 17:48             ` [PATCH v6 49/59] perf rw-by-pid: Port rw-by-pid " Ian Rogers
2026-04-25 18:04               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 50/59] perf rwtop: Port rwtop " Ian Rogers
2026-04-25 18:08               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 51/59] perf wakeup-latency: Port wakeup-latency " Ian Rogers
2026-04-25 18:04               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 52/59] perf test: Migrate Intel PT virtual LBR test to use Python API Ian Rogers
2026-04-25 18:14               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 53/59] perf: Remove libperl support, legacy Perl scripts and tests Ian Rogers
2026-04-25 18:19               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 54/59] perf: Remove libpython support and legacy Python scripts Ian Rogers
2026-04-25 17:48             ` [PATCH v6 55/59] perf Makefile: Update Python script installation path Ian Rogers
2026-04-25 18:26               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 56/59] perf script: Refactor to support standalone scripts and remove legacy features Ian Rogers
2026-04-25 18:24               ` sashiko-bot
2026-04-25 17:48             ` [PATCH v6 57/59] perf Documentation: Update for standalone Python scripts and remove obsolete data Ian Rogers
2026-04-25 17:48             ` [PATCH v6 58/59] perf python: Improve perf script -l descriptions Ian Rogers
2026-04-25 17:48             ` [PATCH v6 59/59] perf sched stats: Fix segmentation faults in diff mode Ian Rogers
2026-04-25 18:25               ` sashiko-bot
2026-04-25 22:40             ` [PATCH v7 00/59] perf: Reorganize scripting support Ian Rogers
2026-04-25 22:40               ` [PATCH v7 01/59] perf inject: Fix itrace branch stack synthesis Ian Rogers
2026-04-25 22:40               ` [PATCH v7 02/59] perf arch arm: Sort includes and add missed explicit dependencies Ian Rogers
2026-04-25 22:40               ` [PATCH v7 03/59] perf arch x86: " Ian Rogers
2026-04-25 22:40               ` [PATCH v7 04/59] perf tests: " Ian Rogers
2026-04-25 22:40               ` [PATCH v7 05/59] perf script: " Ian Rogers
2026-04-25 22:40               ` [PATCH v7 06/59] perf util: " Ian Rogers
2026-04-25 22:40               ` [PATCH v7 07/59] perf python: Add " Ian Rogers
2026-04-25 22:40               ` [PATCH v7 08/59] perf evsel/evlist: Avoid unnecessary #includes Ian Rogers
2026-04-25 22:40               ` [PATCH v7 09/59] perf data: Add open flag Ian Rogers
2026-04-25 22:40               ` [PATCH v7 10/59] perf evlist: Add reference count Ian Rogers
2026-04-25 22:40               ` [PATCH v7 11/59] perf evsel: " Ian Rogers
2026-04-25 22:40               ` [PATCH v7 12/59] perf evlist: Add reference count checking Ian Rogers
2026-04-25 22:40               ` [PATCH v7 13/59] perf python: Use evsel in sample in pyrf_event Ian Rogers
2026-04-25 22:40               ` [PATCH v7 14/59] perf python: Add wrapper for perf_data file abstraction Ian Rogers
2026-04-25 22:40               ` [PATCH v7 15/59] perf python: Add python session abstraction wrapping perf's session Ian Rogers
2026-04-25 22:40               ` [PATCH v7 16/59] perf python: Add syscall name/id to convert syscall number and name Ian Rogers
2026-04-25 22:40               ` [PATCH v7 17/59] perf python: Refactor and add accessors to sample event Ian Rogers
2026-04-25 22:40               ` [PATCH v7 18/59] perf python: Add callchain support Ian Rogers
2026-04-25 22:40               ` [PATCH v7 19/59] perf python: Add config file access Ian Rogers
2026-04-25 22:40               ` [PATCH v7 20/59] perf python: Extend API for stat events in python.c Ian Rogers
2026-04-25 22:40               ` [PATCH v7 21/59] perf python: Expose brstack in sample event Ian Rogers
2026-04-25 22:40               ` [PATCH v7 22/59] perf python: Add perf.pyi stubs file Ian Rogers
2026-04-25 22:40               ` [PATCH v7 23/59] perf python: Add LiveSession helper Ian Rogers
2026-04-25 22:40               ` [PATCH v7 24/59] perf python: Move exported-sql-viewer.py and parallel-perf.py to tools/perf/python/ Ian Rogers
2026-04-25 22:40               ` [PATCH v7 25/59] perf stat-cpi: Port stat-cpi to use python module Ian Rogers
2026-04-25 22:40               ` [PATCH v7 26/59] perf mem-phys-addr: Port mem-phys-addr " Ian Rogers
2026-04-25 22:40               ` [PATCH v7 27/59] perf syscall-counts: Port syscall-counts " Ian Rogers
2026-04-25 22:40               ` [PATCH v7 28/59] perf syscall-counts-by-pid: Port syscall-counts-by-pid " Ian Rogers
2026-04-25 22:40               ` [PATCH v7 29/59] perf futex-contention: Port futex-contention " Ian Rogers
2026-04-25 22:40               ` [PATCH v7 30/59] perf flamegraph: Port flamegraph " Ian Rogers
2026-04-25 22:40               ` [PATCH v7 31/59] perf gecko: Port gecko " Ian Rogers
2026-04-25 22:40               ` [PATCH v7 32/59] perf arm-cs-trace-disasm: Port arm-cs-trace-disasm " Ian Rogers
2026-04-25 22:40               ` [PATCH v7 33/59] perf check-perf-trace: Port check-perf-trace " Ian Rogers
2026-04-25 22:40               ` [PATCH v7 34/59] perf compaction-times: Port compaction-times " Ian Rogers
2026-04-25 22:41               ` [PATCH v7 35/59] perf event_analyzing_sample: Port event_analyzing_sample " Ian Rogers
2026-04-25 22:41               ` [PATCH v7 36/59] perf export-to-sqlite: Port export-to-sqlite " Ian Rogers
2026-04-25 22:41               ` [PATCH v7 37/59] perf export-to-postgresql: Port export-to-postgresql " Ian Rogers
2026-04-25 22:41               ` [PATCH v7 38/59] perf failed-syscalls-by-pid: Port failed-syscalls-by-pid " Ian Rogers
2026-04-25 22:41               ` [PATCH v7 39/59] perf intel-pt-events: Port intel-pt-events/libxed " Ian Rogers
2026-04-25 22:41               ` [PATCH v7 40/59] perf net_dropmonitor: Port net_dropmonitor " Ian Rogers
2026-04-25 22:41               ` [PATCH v7 41/59] perf netdev-times: Port netdev-times " Ian Rogers
2026-04-25 22:41               ` [PATCH v7 42/59] perf powerpc-hcalls: Port powerpc-hcalls " Ian Rogers
2026-04-25 22:44             ` [PATCH v7 43/59] perf sched-migration: Port sched-migration/SchedGui " Ian Rogers
2026-04-25 22:44               ` [PATCH v7 44/59] perf sctop: Port sctop " Ian Rogers
2026-04-25 22:44               ` [PATCH v7 45/59] perf stackcollapse: Port stackcollapse " Ian Rogers
2026-04-25 22:44               ` [PATCH v7 46/59] perf task-analyzer: Port task-analyzer " Ian Rogers
2026-04-25 22:44               ` [PATCH v7 47/59] perf failed-syscalls: Port failed-syscalls " Ian Rogers
2026-04-25 22:44               ` [PATCH v7 48/59] perf rw-by-file: Port rw-by-file " Ian Rogers
2026-04-25 22:44               ` [PATCH v7 49/59] perf rw-by-pid: Port rw-by-pid " Ian Rogers
2026-04-25 22:44               ` [PATCH v7 50/59] perf rwtop: Port rwtop " Ian Rogers
2026-04-25 22:44               ` [PATCH v7 51/59] perf wakeup-latency: Port wakeup-latency " Ian Rogers
2026-04-25 22:44               ` [PATCH v7 52/59] perf test: Migrate Intel PT virtual LBR test to use Python API Ian Rogers
2026-04-25 22:44               ` [PATCH v7 53/59] perf: Remove libperl support, legacy Perl scripts and tests Ian Rogers
2026-04-25 22:44               ` [PATCH v7 54/59] perf: Remove libpython support and legacy Python scripts Ian Rogers
2026-04-25 22:44               ` [PATCH v7 55/59] perf Makefile: Update Python script installation path Ian Rogers
2026-04-25 22:45               ` [PATCH v7 56/59] perf script: Refactor to support standalone scripts and remove legacy features Ian Rogers
2026-04-25 22:45               ` [PATCH v7 57/59] perf Documentation: Update for standalone Python scripts and remove obsolete data Ian Rogers
2026-04-25 22:45               ` [PATCH v7 58/59] perf python: Improve perf script -l descriptions Ian Rogers
2026-04-25 22:45               ` [PATCH v7 59/59] perf sched stats: Fix segmentation faults in diff mode Ian Rogers
2026-04-25 22:48             ` [PATCH v7 00/59] perf: Reorganize scripting support Ian Rogers
2026-04-25 22:48               ` [PATCH v7 01/59] perf inject: Fix itrace branch stack synthesis Ian Rogers
2026-04-25 23:29                 ` sashiko-bot
2026-04-25 22:48               ` [PATCH v7 02/59] perf arch arm: Sort includes and add missed explicit dependencies Ian Rogers
2026-04-25 23:05                 ` sashiko-bot
2026-04-25 22:48               ` [PATCH v7 03/59] perf arch x86: " Ian Rogers
2026-04-25 22:48               ` [PATCH v7 04/59] perf tests: " Ian Rogers
2026-04-25 22:48               ` [PATCH v7 05/59] perf script: " Ian Rogers
2026-04-25 22:48               ` [PATCH v7 06/59] perf util: " Ian Rogers
2026-04-25 22:48               ` [PATCH v7 07/59] perf python: Add " Ian Rogers
2026-04-25 22:49               ` [PATCH v7 08/59] perf evsel/evlist: Avoid unnecessary #includes Ian Rogers
2026-04-25 22:49               ` [PATCH v7 09/59] perf data: Add open flag Ian Rogers
2026-04-25 23:14                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 10/59] perf evlist: Add reference count Ian Rogers
2026-04-25 23:17                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 11/59] perf evsel: " Ian Rogers
2026-04-25 23:18                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 12/59] perf evlist: Add reference count checking Ian Rogers
2026-04-25 23:28                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 13/59] perf python: Use evsel in sample in pyrf_event Ian Rogers
2026-04-25 23:22                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 14/59] perf python: Add wrapper for perf_data file abstraction Ian Rogers
2026-04-25 23:22                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 15/59] perf python: Add python session abstraction wrapping perf's session Ian Rogers
2026-04-25 23:29                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 16/59] perf python: Add syscall name/id to convert syscall number and name Ian Rogers
2026-04-25 23:15                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 17/59] perf python: Refactor and add accessors to sample event Ian Rogers
2026-04-25 23:33                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 18/59] perf python: Add callchain support Ian Rogers
2026-04-25 23:16                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 19/59] perf python: Add config file access Ian Rogers
2026-04-25 22:49               ` [PATCH v7 20/59] perf python: Extend API for stat events in python.c Ian Rogers
2026-04-25 23:15                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 21/59] perf python: Expose brstack in sample event Ian Rogers
2026-04-25 23:13                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 22/59] perf python: Add perf.pyi stubs file Ian Rogers
2026-04-25 23:06                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 23/59] perf python: Add LiveSession helper Ian Rogers
2026-04-25 23:25                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 24/59] perf python: Move exported-sql-viewer.py and parallel-perf.py to tools/perf/python/ Ian Rogers
2026-04-25 23:11                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 25/59] perf stat-cpi: Port stat-cpi to use python module Ian Rogers
2026-04-25 22:49               ` [PATCH v7 26/59] perf mem-phys-addr: Port mem-phys-addr " Ian Rogers
2026-04-25 23:06                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 27/59] perf syscall-counts: Port syscall-counts " Ian Rogers
2026-04-25 23:09                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 28/59] perf syscall-counts-by-pid: Port syscall-counts-by-pid " Ian Rogers
2026-04-25 23:05                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 29/59] perf futex-contention: Port futex-contention " Ian Rogers
2026-04-25 23:11                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 30/59] perf flamegraph: Port flamegraph " Ian Rogers
2026-04-25 23:09                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 31/59] perf gecko: Port gecko " Ian Rogers
2026-04-25 23:06                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 32/59] perf arm-cs-trace-disasm: Port arm-cs-trace-disasm " Ian Rogers
2026-04-25 23:25                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 33/59] perf check-perf-trace: Port check-perf-trace " Ian Rogers
2026-04-25 23:06                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 34/59] perf compaction-times: Port compaction-times " Ian Rogers
2026-04-25 23:22                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 35/59] perf event_analyzing_sample: Port event_analyzing_sample " Ian Rogers
2026-04-25 22:49               ` [PATCH v7 36/59] perf export-to-sqlite: Port export-to-sqlite " Ian Rogers
2026-04-25 23:14                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 37/59] perf export-to-postgresql: Port export-to-postgresql " Ian Rogers
2026-04-25 23:13                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 38/59] perf failed-syscalls-by-pid: Port failed-syscalls-by-pid " Ian Rogers
2026-04-25 23:06                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 39/59] perf intel-pt-events: Port intel-pt-events/libxed " Ian Rogers
2026-04-25 23:13                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 40/59] perf net_dropmonitor: Port net_dropmonitor " Ian Rogers
2026-04-25 23:00                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 41/59] perf netdev-times: Port netdev-times " Ian Rogers
2026-04-25 23:07                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 42/59] perf powerpc-hcalls: Port powerpc-hcalls " Ian Rogers
2026-04-25 23:07                 ` sashiko-bot
2026-04-25 22:49               ` Ian Rogers [this message]
2026-04-25 23:12                 ` [PATCH v7 43/59] perf sched-migration: Port sched-migration/SchedGui " sashiko-bot
2026-04-25 22:49               ` [PATCH v7 44/59] perf sctop: Port sctop " Ian Rogers
2026-04-25 23:12                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 45/59] perf stackcollapse: Port stackcollapse " Ian Rogers
2026-04-25 23:09                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 46/59] perf task-analyzer: Port task-analyzer " Ian Rogers
2026-04-25 23:11                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 47/59] perf failed-syscalls: Port failed-syscalls " Ian Rogers
2026-04-25 23:11                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 48/59] perf rw-by-file: Port rw-by-file " Ian Rogers
2026-04-25 23:09                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 49/59] perf rw-by-pid: Port rw-by-pid " Ian Rogers
2026-04-25 23:05                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 50/59] perf rwtop: Port rwtop " Ian Rogers
2026-04-25 23:06                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 51/59] perf wakeup-latency: Port wakeup-latency " Ian Rogers
2026-04-25 23:12                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 52/59] perf test: Migrate Intel PT virtual LBR test to use Python API Ian Rogers
2026-04-25 23:14                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 53/59] perf: Remove libperl support, legacy Perl scripts and tests Ian Rogers
2026-04-25 23:16                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 54/59] perf: Remove libpython support and legacy Python scripts Ian Rogers
2026-04-25 22:49               ` [PATCH v7 55/59] perf Makefile: Update Python script installation path Ian Rogers
2026-04-25 23:22                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 56/59] perf script: Refactor to support standalone scripts and remove legacy features Ian Rogers
2026-04-25 23:23                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 57/59] perf Documentation: Update for standalone Python scripts and remove obsolete data Ian Rogers
2026-04-25 23:18                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 58/59] perf python: Improve perf script -l descriptions Ian Rogers
2026-04-25 23:15                 ` sashiko-bot
2026-04-25 22:49               ` [PATCH v7 59/59] perf sched stats: Fix segmentation faults in diff mode Ian Rogers
2026-04-25 23:31                 ` sashiko-bot
2026-04-23 19:43       ` [PATCH v4 28/58] perf syscall-counts-by-pid: Port syscall-counts-by-pid to use python module Ian Rogers
2026-04-23 19:43         ` [PATCH v4 29/58] perf futex-contention: Port futex-contention " Ian Rogers
2026-04-23 19:43         ` [PATCH v4 30/58] perf flamegraph: Port flamegraph " Ian Rogers
2026-04-19 23:58 ` [PATCH v1 27/58] perf syscall-counts: Port syscall-counts " Ian Rogers
2026-04-20  0:41   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 28/58] perf syscall-counts-by-pid: Port syscall-counts-by-pid " Ian Rogers
2026-04-20  0:34   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 29/58] perf futex-contention: Port futex-contention " Ian Rogers
2026-04-20  0:37   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 30/58] perf flamegraph: Port flamegraph " Ian Rogers
2026-04-20  0:27   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 31/58] perf gecko: Port gecko " Ian Rogers
2026-04-20  0:20   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 32/58] perf arm-cs-trace-disasm: Port arm-cs-trace-disasm " Ian Rogers
2026-04-20  0:28   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 33/58] perf check-perf-trace: Port check-perf-trace " Ian Rogers
2026-04-20  0:31   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 34/58] perf compaction-times: Port compaction-times " Ian Rogers
2026-04-20  0:30   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 35/58] perf event_analyzing_sample: Port event_analyzing_sample " Ian Rogers
2026-04-20  0:35   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 36/58] perf export-to-sqlite: Port export-to-sqlite " Ian Rogers
2026-04-20  0:33   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 37/58] perf export-to-postgresql: Port export-to-postgresql " Ian Rogers
2026-04-20  0:28   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 38/58] perf failed-syscalls-by-pid: Port failed-syscalls-by-pid " Ian Rogers
2026-04-20  0:32   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 39/58] perf intel-pt-events: Port intel-pt-events/libxed " Ian Rogers
2026-04-20  0:32   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 40/58] perf net_dropmonitor: Port net_dropmonitor " Ian Rogers
2026-04-20  0:22   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 41/58] perf netdev-times: Port netdev-times " Ian Rogers
2026-04-20  0:28   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 42/58] perf powerpc-hcalls: Port powerpc-hcalls " Ian Rogers
2026-04-19 23:58 ` [PATCH v1 43/58] perf sched-migration: Port sched-migration/SchedGui " Ian Rogers
2026-04-20  0:33   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 44/58] perf sctop: Port sctop " Ian Rogers
2026-04-20  0:33   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 45/58] perf stackcollapse: Port stackcollapse " Ian Rogers
2026-04-20  0:41   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 46/58] perf task-analyzer: Port task-analyzer " Ian Rogers
2026-04-20  0:46   ` sashiko-bot
2026-04-19 23:58 ` [PATCH v1 47/58] perf failed-syscalls: Port failed-syscalls " Ian Rogers
2026-04-20  0:45   ` sashiko-bot
2026-04-19 23:59 ` [PATCH v1 48/58] perf rw-by-file: Port rw-by-file " Ian Rogers
2026-04-20  0:50   ` sashiko-bot
2026-04-19 23:59 ` [PATCH v1 49/58] perf rw-by-pid: Port rw-by-pid " Ian Rogers
2026-04-20  0:44   ` sashiko-bot
2026-04-19 23:59 ` [PATCH v1 50/58] perf rwtop: Port rwtop " Ian Rogers
2026-04-20  0:42   ` sashiko-bot
2026-04-19 23:59 ` [PATCH v1 51/58] perf wakeup-latency: Port wakeup-latency " Ian Rogers
2026-04-20  0:47   ` sashiko-bot
2026-04-19 23:59 ` [PATCH v1 52/58] perf test: Migrate Intel PT virtual LBR test to use Python API Ian Rogers
2026-04-20  0:46   ` sashiko-bot
2026-04-19 23:59 ` [PATCH v1 53/58] perf: Remove libperl support, legacy Perl scripts and tests Ian Rogers
2026-04-20  0:55   ` sashiko-bot
2026-04-19 23:59 ` [PATCH v1 54/58] perf: Remove libpython support and legacy Python scripts Ian Rogers
2026-04-19 23:59 ` [PATCH v1 55/58] perf Makefile: Update Python script installation path Ian Rogers
2026-04-20  0:54   ` sashiko-bot
2026-04-19 23:59 ` [PATCH v1 56/58] perf script: Refactor to support standalone scripts and remove legacy features Ian Rogers
2026-04-20  1:00   ` sashiko-bot
2026-04-19 23:59 ` [PATCH v1 57/58] perf Documentation: Update for standalone Python scripts and remove obsolete data Ian Rogers
2026-04-20  0:45   ` sashiko-bot
2026-04-19 23:59 ` [PATCH v1 58/58] perf python: Improve perf script -l descriptions Ian Rogers

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260425224951.174663-44-irogers@google.com \
    --to=irogers@google.com \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=alice.mei.rogers@gmail.com \
    --cc=dapeng1.mi@linux.intel.com \
    --cc=james.clark@linaro.org \
    --cc=leo.yan@linux.dev \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=tmricht@linux.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox