xref: /linux/tools/perf/python/perf.pyi (revision fed8332b0e0ba9dec1729f0422f0b0d96f7893f2)
1*fed8332bSIan Rogers"""Type stubs for the perf Python module."""
2*fed8332bSIan Rogersfrom typing import Callable, Dict, List, Optional, Any, Iterator
3*fed8332bSIan Rogers
4*fed8332bSIan Rogersdef config_get(name: str) -> Optional[str]:
5*fed8332bSIan Rogers    """Get a configuration value from perf config.
6*fed8332bSIan Rogers
7*fed8332bSIan Rogers    Args:
8*fed8332bSIan Rogers        name: The configuration variable name (e.g., 'colors.top').
9*fed8332bSIan Rogers
10*fed8332bSIan Rogers    Returns:
11*fed8332bSIan Rogers        The configuration value as a string, or None if not set.
12*fed8332bSIan Rogers    """
13*fed8332bSIan Rogers    ...
14*fed8332bSIan Rogers
15*fed8332bSIan Rogersdef metrics() -> List[Dict[str, str]]:
16*fed8332bSIan Rogers    """Get a list of available metrics.
17*fed8332bSIan Rogers
18*fed8332bSIan Rogers    Returns:
19*fed8332bSIan Rogers        A list of dictionaries, each describing a metric.
20*fed8332bSIan Rogers    """
21*fed8332bSIan Rogers    ...
22*fed8332bSIan Rogers
23*fed8332bSIan Rogersdef syscall_name(id: int, *, elf_machine: Optional[int] = None) -> str:
24*fed8332bSIan Rogers    """Convert a syscall number to its name.
25*fed8332bSIan Rogers
26*fed8332bSIan Rogers    Args:
27*fed8332bSIan Rogers        sc_id: The syscall number.
28*fed8332bSIan Rogers        elf_machine: Optional ELF machine type.
29*fed8332bSIan Rogers
30*fed8332bSIan Rogers    Returns:
31*fed8332bSIan Rogers        The name of the syscall.
32*fed8332bSIan Rogers    """
33*fed8332bSIan Rogers    ...
34*fed8332bSIan Rogers
35*fed8332bSIan Rogersdef syscall_id(name: str, *, elf_machine: Optional[int] = None) -> int:
36*fed8332bSIan Rogers    """Convert a syscall name to its number.
37*fed8332bSIan Rogers
38*fed8332bSIan Rogers    Args:
39*fed8332bSIan Rogers        name: The syscall name.
40*fed8332bSIan Rogers        elf_machine: Optional ELF machine type.
41*fed8332bSIan Rogers
42*fed8332bSIan Rogers    Returns:
43*fed8332bSIan Rogers        The number of the syscall.
44*fed8332bSIan Rogers    """
45*fed8332bSIan Rogers    ...
46*fed8332bSIan Rogers
47*fed8332bSIan Rogersdef parse_events(
48*fed8332bSIan Rogers    event_string: str,
49*fed8332bSIan Rogers    cpus: Optional[cpu_map] = None,
50*fed8332bSIan Rogers    threads: Optional['thread_map'] = None
51*fed8332bSIan Rogers) -> 'evlist':
52*fed8332bSIan Rogers    """Parse an event string and return an evlist.
53*fed8332bSIan Rogers
54*fed8332bSIan Rogers    Args:
55*fed8332bSIan Rogers        event_string: The event string (e.g., 'cycles,instructions').
56*fed8332bSIan Rogers        cpus: Optional CPU map to bind events to.
57*fed8332bSIan Rogers        threads: Optional thread map to bind events to.
58*fed8332bSIan Rogers
59*fed8332bSIan Rogers    Returns:
60*fed8332bSIan Rogers        An evlist containing the parsed events.
61*fed8332bSIan Rogers    """
62*fed8332bSIan Rogers    ...
63*fed8332bSIan Rogers
64*fed8332bSIan Rogersdef parse_metrics(
65*fed8332bSIan Rogers    metrics_string: str,
66*fed8332bSIan Rogers    pmu: Optional[str] = None,
67*fed8332bSIan Rogers    cpus: Optional[cpu_map] = None,
68*fed8332bSIan Rogers    threads: Optional['thread_map'] = None
69*fed8332bSIan Rogers) -> 'evlist':
70*fed8332bSIan Rogers    """Parse a string of metrics or metric groups and return an evlist."""
71*fed8332bSIan Rogers    ...
72*fed8332bSIan Rogers
73*fed8332bSIan Rogersdef tracepoint(sys: str, name: str) -> int:
74*fed8332bSIan Rogers    """Returns the tracepoint ID for a given system and name."""
75*fed8332bSIan Rogers    ...
76*fed8332bSIan Rogers
77*fed8332bSIan Rogersdef pmus() -> Iterator[Any]:
78*fed8332bSIan Rogers    """Returns a sequence of pmus."""
79*fed8332bSIan Rogers    ...
80*fed8332bSIan Rogers
81*fed8332bSIan Rogersclass data:
82*fed8332bSIan Rogers    """Represents a perf data file."""
83*fed8332bSIan Rogers    def __init__(self, path: str = ..., fd: int = ...) -> None: ...
84*fed8332bSIan Rogers
85*fed8332bSIan Rogersclass thread:
86*fed8332bSIan Rogers    """Represents a thread in the system."""
87*fed8332bSIan Rogers    def comm(self) -> str:
88*fed8332bSIan Rogers        """Get the command name of the thread."""
89*fed8332bSIan Rogers        ...
90*fed8332bSIan Rogers    pid: int
91*fed8332bSIan Rogers    tid: int
92*fed8332bSIan Rogers    ppid: int
93*fed8332bSIan Rogers    cpu: int
94*fed8332bSIan Rogers
95*fed8332bSIan Rogersclass counts_values:
96*fed8332bSIan Rogers    """Raw counter values."""
97*fed8332bSIan Rogers    id: int
98*fed8332bSIan Rogers    val: int
99*fed8332bSIan Rogers    ena: int
100*fed8332bSIan Rogers    run: int
101*fed8332bSIan Rogers    lost: int
102*fed8332bSIan Rogers    values: List[int]
103*fed8332bSIan Rogers
104*fed8332bSIan Rogersclass thread_map:
105*fed8332bSIan Rogers    """Map of threads being monitored."""
106*fed8332bSIan Rogers    def __init__(self, pid: int = -1, tid: int = -1) -> None:
107*fed8332bSIan Rogers        """Initialize a thread map.
108*fed8332bSIan Rogers
109*fed8332bSIan Rogers        Args:
110*fed8332bSIan Rogers            pid: Process ID to monitor (-1 for all).
111*fed8332bSIan Rogers            tid: Thread ID to monitor (-1 for all).
112*fed8332bSIan Rogers        """
113*fed8332bSIan Rogers        ...
114*fed8332bSIan Rogers    def __len__(self) -> int: ...
115*fed8332bSIan Rogers    def __getitem__(self, index: int) -> int: ...
116*fed8332bSIan Rogers    def __iter__(self) -> Iterator[int]: ...
117*fed8332bSIan Rogers
118*fed8332bSIan Rogersclass evsel:
119*fed8332bSIan Rogers    """Event selector, represents a single event being monitored."""
120*fed8332bSIan Rogers    def __init__(
121*fed8332bSIan Rogers        self,
122*fed8332bSIan Rogers        type: int = ...,
123*fed8332bSIan Rogers        config: int = ...,
124*fed8332bSIan Rogers        sample_freq: int = ...,
125*fed8332bSIan Rogers        sample_period: int = ...,
126*fed8332bSIan Rogers        sample_type: int = ...,
127*fed8332bSIan Rogers        read_format: int = ...,
128*fed8332bSIan Rogers        disabled: bool = ...,
129*fed8332bSIan Rogers        inherit: bool = ...,
130*fed8332bSIan Rogers        pinned: bool = ...,
131*fed8332bSIan Rogers        exclusive: bool = ...,
132*fed8332bSIan Rogers        exclude_user: bool = ...,
133*fed8332bSIan Rogers        exclude_kernel: bool = ...,
134*fed8332bSIan Rogers        exclude_hv: bool = ...,
135*fed8332bSIan Rogers        exclude_idle: bool = ...,
136*fed8332bSIan Rogers        mmap: bool = ...,
137*fed8332bSIan Rogers        context_switch: bool = ...,
138*fed8332bSIan Rogers        comm: bool = ...,
139*fed8332bSIan Rogers        freq: bool = ...,
140*fed8332bSIan Rogers        inherit_stat: bool = ...,
141*fed8332bSIan Rogers        enable_on_exec: bool = ...,
142*fed8332bSIan Rogers        task: bool = ...,
143*fed8332bSIan Rogers        watermark: int = ...,
144*fed8332bSIan Rogers        precise_ip: int = ...,
145*fed8332bSIan Rogers        mmap_data: bool = ...,
146*fed8332bSIan Rogers        sample_id_all: bool = ...,
147*fed8332bSIan Rogers        wakeup_events: int = ...,
148*fed8332bSIan Rogers        bp_type: int = ...,
149*fed8332bSIan Rogers        bp_addr: int = ...,
150*fed8332bSIan Rogers        bp_len: int = ...,
151*fed8332bSIan Rogers        idx: int = ...,
152*fed8332bSIan Rogers    ) -> None: ...
153*fed8332bSIan Rogers    def __str__(self) -> str:
154*fed8332bSIan Rogers        """Return string representation of the event."""
155*fed8332bSIan Rogers        ...
156*fed8332bSIan Rogers    def open(self) -> None:
157*fed8332bSIan Rogers        """Open the event selector file descriptor table."""
158*fed8332bSIan Rogers        ...
159*fed8332bSIan Rogers    def read(self, cpu: int, thread: int) -> counts_values:
160*fed8332bSIan Rogers        """Read counter values for a specific CPU and thread."""
161*fed8332bSIan Rogers        ...
162*fed8332bSIan Rogers    ids: List[int]
163*fed8332bSIan Rogers    def cpus(self) -> cpu_map:
164*fed8332bSIan Rogers        """Get CPU map for this event."""
165*fed8332bSIan Rogers        ...
166*fed8332bSIan Rogers    def threads(self) -> thread_map:
167*fed8332bSIan Rogers        """Get thread map for this event."""
168*fed8332bSIan Rogers        ...
169*fed8332bSIan Rogers    tracking: bool
170*fed8332bSIan Rogers    config: int
171*fed8332bSIan Rogers    read_format: int
172*fed8332bSIan Rogers    sample_period: int
173*fed8332bSIan Rogers    sample_type: int
174*fed8332bSIan Rogers    size: int
175*fed8332bSIan Rogers    type: int
176*fed8332bSIan Rogers    wakeup_events: int
177*fed8332bSIan Rogers
178*fed8332bSIan Rogers
179*fed8332bSIan Rogersclass _sample_members:
180*fed8332bSIan Rogers    sample_pid: int
181*fed8332bSIan Rogers    sample_tid: int
182*fed8332bSIan Rogers    sample_time: int
183*fed8332bSIan Rogers    sample_id: int
184*fed8332bSIan Rogers    sample_stream_id: int
185*fed8332bSIan Rogers    sample_period: int
186*fed8332bSIan Rogers    sample_cpu: int
187*fed8332bSIan Rogers
188*fed8332bSIan Rogersclass sample_event(_sample_members):
189*fed8332bSIan Rogers    """Represents a sample event from perf."""
190*fed8332bSIan Rogers    evsel: evsel
191*fed8332bSIan Rogers    sample_ip: int
192*fed8332bSIan Rogers    sample_addr: int
193*fed8332bSIan Rogers    sample_phys_addr: int
194*fed8332bSIan Rogers    sample_weight: int
195*fed8332bSIan Rogers    sample_data_src: int
196*fed8332bSIan Rogers    sample_insn_count: int
197*fed8332bSIan Rogers    sample_cyc_count: int
198*fed8332bSIan Rogers    type: int
199*fed8332bSIan Rogers    raw_buf: bytes
200*fed8332bSIan Rogers    dso: str
201*fed8332bSIan Rogers    dso_long_name: str
202*fed8332bSIan Rogers    dso_bid: Optional[bytes]
203*fed8332bSIan Rogers    map_start: int
204*fed8332bSIan Rogers    map_end: int
205*fed8332bSIan Rogers    map_pgoff: int
206*fed8332bSIan Rogers    symbol: str
207*fed8332bSIan Rogers    sym_start: int
208*fed8332bSIan Rogers    sym_end: int
209*fed8332bSIan Rogers    brstack: Optional['branch_stack']
210*fed8332bSIan Rogers    callchain: Optional['callchain']
211*fed8332bSIan Rogers    def srccode(self) -> str: ...
212*fed8332bSIan Rogers    def insn(self) -> str: ...
213*fed8332bSIan Rogers    def __getattr__(self, name: str) -> Any: ...
214*fed8332bSIan Rogers
215*fed8332bSIan Rogersclass mmap_event(_sample_members):
216*fed8332bSIan Rogers    """Represents a mmap event from perf."""
217*fed8332bSIan Rogers    type: int
218*fed8332bSIan Rogers    misc: int
219*fed8332bSIan Rogers    pid: int
220*fed8332bSIan Rogers    tid: int
221*fed8332bSIan Rogers    start: int
222*fed8332bSIan Rogers    len: int
223*fed8332bSIan Rogers    pgoff: int
224*fed8332bSIan Rogers    filename: str
225*fed8332bSIan Rogers    evsel: Optional['evsel']
226*fed8332bSIan Rogers
227*fed8332bSIan Rogersclass mmap2_event(_sample_members):
228*fed8332bSIan Rogers    """Represents a mmap2 event from perf."""
229*fed8332bSIan Rogers    type: int
230*fed8332bSIan Rogers    misc: int
231*fed8332bSIan Rogers    pid: int
232*fed8332bSIan Rogers    tid: int
233*fed8332bSIan Rogers    start: int
234*fed8332bSIan Rogers    len: int
235*fed8332bSIan Rogers    pgoff: int
236*fed8332bSIan Rogers    prot: int
237*fed8332bSIan Rogers    flags: int
238*fed8332bSIan Rogers    filename: str
239*fed8332bSIan Rogers    maj: Optional[int]
240*fed8332bSIan Rogers    min: Optional[int]
241*fed8332bSIan Rogers    ino: Optional[int]
242*fed8332bSIan Rogers    ino_generation: Optional[int]
243*fed8332bSIan Rogers    build_id: Optional[bytes]
244*fed8332bSIan Rogers    evsel: Optional['evsel']
245*fed8332bSIan Rogers
246*fed8332bSIan Rogersclass lost_event(_sample_members):
247*fed8332bSIan Rogers    """Represents a lost events record."""
248*fed8332bSIan Rogers    type: int
249*fed8332bSIan Rogers    id: int
250*fed8332bSIan Rogers    lost: int
251*fed8332bSIan Rogers    evsel: Optional['evsel']
252*fed8332bSIan Rogers
253*fed8332bSIan Rogersclass comm_event(_sample_members):
254*fed8332bSIan Rogers    """Represents a COMM record."""
255*fed8332bSIan Rogers    type: int
256*fed8332bSIan Rogers    pid: int
257*fed8332bSIan Rogers    tid: int
258*fed8332bSIan Rogers    comm: str
259*fed8332bSIan Rogers    evsel: Optional['evsel']
260*fed8332bSIan Rogers
261*fed8332bSIan Rogersclass task_event(_sample_members):
262*fed8332bSIan Rogers    """Represents an EXIT or FORK record."""
263*fed8332bSIan Rogers    type: int
264*fed8332bSIan Rogers    pid: int
265*fed8332bSIan Rogers    ppid: int
266*fed8332bSIan Rogers    tid: int
267*fed8332bSIan Rogers    ptid: int
268*fed8332bSIan Rogers    time: int
269*fed8332bSIan Rogers    evsel: Optional['evsel']
270*fed8332bSIan Rogers
271*fed8332bSIan Rogersclass throttle_event(_sample_members):
272*fed8332bSIan Rogers    """Represents a THROTTLE or UNTHROTTLE record."""
273*fed8332bSIan Rogers    type: int
274*fed8332bSIan Rogers    time: int
275*fed8332bSIan Rogers    id: int
276*fed8332bSIan Rogers    stream_id: int
277*fed8332bSIan Rogers    evsel: Optional['evsel']
278*fed8332bSIan Rogers
279*fed8332bSIan Rogersclass read_event(_sample_members):
280*fed8332bSIan Rogers    """Represents a READ record."""
281*fed8332bSIan Rogers    type: int
282*fed8332bSIan Rogers    pid: int
283*fed8332bSIan Rogers    tid: int
284*fed8332bSIan Rogers    evsel: Optional['evsel']
285*fed8332bSIan Rogers
286*fed8332bSIan Rogersclass switch_event(_sample_members):
287*fed8332bSIan Rogers    """Represents a SWITCH or SWITCH_CPU_WIDE record."""
288*fed8332bSIan Rogers    type: int
289*fed8332bSIan Rogers    next_prev_pid: int
290*fed8332bSIan Rogers    next_prev_tid: int
291*fed8332bSIan Rogers    evsel: Optional['evsel']
292*fed8332bSIan Rogers
293*fed8332bSIan Rogersclass branch_entry:
294*fed8332bSIan Rogers    """Represents a branch entry in the branch stack.
295*fed8332bSIan Rogers
296*fed8332bSIan Rogers    Attributes:
297*fed8332bSIan Rogers        from_ip: Source address of the branch (corresponds to 'from' keyword in C).
298*fed8332bSIan Rogers        to_ip: Destination address of the branch.
299*fed8332bSIan Rogers        mispred: True if the branch was mispredicted.
300*fed8332bSIan Rogers        predicted: True if the branch was predicted.
301*fed8332bSIan Rogers        in_tx: True if the branch was in a transaction.
302*fed8332bSIan Rogers        abort: True if the branch was an abort.
303*fed8332bSIan Rogers        cycles: Number of cycles since the last branch.
304*fed8332bSIan Rogers        type: Type of branch.
305*fed8332bSIan Rogers    """
306*fed8332bSIan Rogers    from_ip: int
307*fed8332bSIan Rogers    to_ip: int
308*fed8332bSIan Rogers    mispred: bool
309*fed8332bSIan Rogers    predicted: bool
310*fed8332bSIan Rogers    in_tx: bool
311*fed8332bSIan Rogers    abort: bool
312*fed8332bSIan Rogers    cycles: int
313*fed8332bSIan Rogers    type: int
314*fed8332bSIan Rogers
315*fed8332bSIan Rogersclass branch_stack:
316*fed8332bSIan Rogers    """Sequence of branch entries in the branch stack."""
317*fed8332bSIan Rogers    def __len__(self) -> int: ...
318*fed8332bSIan Rogers    def __getitem__(self, index: int) -> branch_entry: ...
319*fed8332bSIan Rogers
320*fed8332bSIan Rogersclass callchain_node:
321*fed8332bSIan Rogers    """Represents a frame in the callchain."""
322*fed8332bSIan Rogers    ip: int
323*fed8332bSIan Rogers    symbol: Optional[str]
324*fed8332bSIan Rogers    dso: Optional[str]
325*fed8332bSIan Rogers
326*fed8332bSIan Rogersclass callchain:
327*fed8332bSIan Rogers    """Sequence of callchain frames."""
328*fed8332bSIan Rogers    def __len__(self) -> int: ...
329*fed8332bSIan Rogers    def __getitem__(self, index: int) -> callchain_node: ...
330*fed8332bSIan Rogers
331*fed8332bSIan Rogersclass stat_event(_sample_members):
332*fed8332bSIan Rogers    """Represents a stat event from perf."""
333*fed8332bSIan Rogers    type: int
334*fed8332bSIan Rogers    id: int
335*fed8332bSIan Rogers    cpu: int
336*fed8332bSIan Rogers    thread: int
337*fed8332bSIan Rogers    val: int
338*fed8332bSIan Rogers    ena: int
339*fed8332bSIan Rogers    run: int
340*fed8332bSIan Rogers    evsel: Optional['evsel']
341*fed8332bSIan Rogers
342*fed8332bSIan Rogersclass stat_round_event(_sample_members):
343*fed8332bSIan Rogers    """Represents a stat round event from perf."""
344*fed8332bSIan Rogers    type: int
345*fed8332bSIan Rogers    time: int
346*fed8332bSIan Rogers    stat_round_type: int
347*fed8332bSIan Rogers    evsel: Optional['evsel']
348*fed8332bSIan Rogers
349*fed8332bSIan Rogersclass cpu_map:
350*fed8332bSIan Rogers    """Map of CPUs being monitored."""
351*fed8332bSIan Rogers    def __init__(self, cpustr: Optional[str] = None) -> None: ...
352*fed8332bSIan Rogers    def __len__(self) -> int: ...
353*fed8332bSIan Rogers    def __getitem__(self, index: int) -> int: ...
354*fed8332bSIan Rogers    def __iter__(self) -> Iterator[int]: ...
355*fed8332bSIan Rogers
356*fed8332bSIan Rogers
357*fed8332bSIan Rogersclass evlist:
358*fed8332bSIan Rogers    def __init__(self, cpus: cpu_map, threads: thread_map) -> None: ...
359*fed8332bSIan Rogers    def open(self) -> None:
360*fed8332bSIan Rogers        """Open the events in the list."""
361*fed8332bSIan Rogers        ...
362*fed8332bSIan Rogers    def close(self) -> None:
363*fed8332bSIan Rogers        """Close the events in the list."""
364*fed8332bSIan Rogers        ...
365*fed8332bSIan Rogers    def mmap(self) -> None:
366*fed8332bSIan Rogers        """Memory map the event buffers."""
367*fed8332bSIan Rogers        ...
368*fed8332bSIan Rogers    def poll(self, timeout: int) -> int:
369*fed8332bSIan Rogers        """Poll for events.
370*fed8332bSIan Rogers
371*fed8332bSIan Rogers        Args:
372*fed8332bSIan Rogers            timeout: Timeout in milliseconds.
373*fed8332bSIan Rogers
374*fed8332bSIan Rogers        Returns:
375*fed8332bSIan Rogers            Number of events ready.
376*fed8332bSIan Rogers        """
377*fed8332bSIan Rogers        ...
378*fed8332bSIan Rogers    def read_on_cpu(self, cpu: int) -> Optional[Any]:
379*fed8332bSIan Rogers        """Read a sample event from a specific CPU.
380*fed8332bSIan Rogers
381*fed8332bSIan Rogers        Args:
382*fed8332bSIan Rogers            cpu: The CPU number.
383*fed8332bSIan Rogers
384*fed8332bSIan Rogers        Returns:
385*fed8332bSIan Rogers            A sample_event or other event type if available, or None.
386*fed8332bSIan Rogers        """
387*fed8332bSIan Rogers        ...
388*fed8332bSIan Rogers    def all_cpus(self) -> cpu_map:
389*fed8332bSIan Rogers        """Get a cpu_map of all CPUs in the system."""
390*fed8332bSIan Rogers        ...
391*fed8332bSIan Rogers    def metrics(self) -> List[str]:
392*fed8332bSIan Rogers        """Get a list of metric names within the evlist."""
393*fed8332bSIan Rogers        ...
394*fed8332bSIan Rogers    def compute_metric(self, metric: str, cpu: int, thread: int) -> float:
395*fed8332bSIan Rogers        """Compute metric for given name, cpu and thread.
396*fed8332bSIan Rogers
397*fed8332bSIan Rogers        Args:
398*fed8332bSIan Rogers            metric: The metric name.
399*fed8332bSIan Rogers            cpu: The CPU number.
400*fed8332bSIan Rogers            thread: The thread ID.
401*fed8332bSIan Rogers
402*fed8332bSIan Rogers        Returns:
403*fed8332bSIan Rogers            The computed metric value.
404*fed8332bSIan Rogers        """
405*fed8332bSIan Rogers        ...
406*fed8332bSIan Rogers    def config(self) -> None:
407*fed8332bSIan Rogers        """Configure the events in the list."""
408*fed8332bSIan Rogers        ...
409*fed8332bSIan Rogers    def disable(self) -> None:
410*fed8332bSIan Rogers        """Disable all events in the list."""
411*fed8332bSIan Rogers        ...
412*fed8332bSIan Rogers    def enable(self) -> None:
413*fed8332bSIan Rogers        """Enable all events in the list."""
414*fed8332bSIan Rogers        ...
415*fed8332bSIan Rogers    def get_pollfd(self) -> List[int]:
416*fed8332bSIan Rogers        """Get a list of file descriptors for polling."""
417*fed8332bSIan Rogers        ...
418*fed8332bSIan Rogers    def add(self, evsel: evsel) -> int:
419*fed8332bSIan Rogers        """Add an event to the list."""
420*fed8332bSIan Rogers        ...
421*fed8332bSIan Rogers    def __iter__(self) -> Iterator[evsel]:
422*fed8332bSIan Rogers        """Iterate over the events (evsel) in the list."""
423*fed8332bSIan Rogers        ...
424*fed8332bSIan Rogers
425*fed8332bSIan Rogers
426*fed8332bSIan Rogersclass session:
427*fed8332bSIan Rogers    def __init__(
428*fed8332bSIan Rogers        self,
429*fed8332bSIan Rogers        data: data,
430*fed8332bSIan Rogers        sample: Optional[Callable[[sample_event], None]] = None,
431*fed8332bSIan Rogers        stat: Optional[Callable[[Any, Optional[str]], None]] = None
432*fed8332bSIan Rogers    ) -> None:
433*fed8332bSIan Rogers        """Initialize a perf session.
434*fed8332bSIan Rogers
435*fed8332bSIan Rogers        Args:
436*fed8332bSIan Rogers            data: The perf data file to read.
437*fed8332bSIan Rogers            sample: Callback for sample events.
438*fed8332bSIan Rogers            stat: Callback for stat events.
439*fed8332bSIan Rogers        """
440*fed8332bSIan Rogers        ...
441*fed8332bSIan Rogers    def process_events(self) -> None:
442*fed8332bSIan Rogers        """Process all events in the session."""
443*fed8332bSIan Rogers        ...
444*fed8332bSIan Rogers    def find_thread(self, pid: int) -> thread:
445*fed8332bSIan Rogers        """Returns the thread associated with a pid."""
446*fed8332bSIan Rogers        ...
447*fed8332bSIan Rogers
448*fed8332bSIan Rogers# Event Types
449*fed8332bSIan RogersTYPE_HARDWARE: int
450*fed8332bSIan Rogers"""Hardware event."""
451*fed8332bSIan Rogers
452*fed8332bSIan RogersTYPE_SOFTWARE: int
453*fed8332bSIan Rogers"""Software event."""
454*fed8332bSIan Rogers
455*fed8332bSIan RogersTYPE_TRACEPOINT: int
456*fed8332bSIan Rogers"""Tracepoint event."""
457*fed8332bSIan Rogers
458*fed8332bSIan RogersTYPE_HW_CACHE: int
459*fed8332bSIan Rogers"""Hardware cache event."""
460*fed8332bSIan Rogers
461*fed8332bSIan RogersTYPE_RAW: int
462*fed8332bSIan Rogers"""Raw hardware event."""
463*fed8332bSIan Rogers
464*fed8332bSIan RogersTYPE_BREAKPOINT: int
465*fed8332bSIan Rogers"""Breakpoint event."""
466*fed8332bSIan Rogers
467*fed8332bSIan Rogers
468*fed8332bSIan Rogers# Hardware Counters
469*fed8332bSIan RogersCOUNT_HW_CPU_CYCLES: int
470*fed8332bSIan Rogers"""Total cycles. Be wary of what happens during CPU frequency scaling."""
471*fed8332bSIan Rogers
472*fed8332bSIan RogersCOUNT_HW_INSTRUCTIONS: int
473*fed8332bSIan Rogers"""Retired instructions. Be careful, these can be affected by various issues,
474*fed8332bSIan Rogersmost notably hardware interrupt counts."""
475*fed8332bSIan Rogers
476*fed8332bSIan RogersCOUNT_HW_CACHE_REFERENCES: int
477*fed8332bSIan Rogers"""Cache accesses. Usually this indicates Last Level Cache accesses but this
478*fed8332bSIan Rogersmay vary depending on your CPU."""
479*fed8332bSIan Rogers
480*fed8332bSIan RogersCOUNT_HW_CACHE_MISSES: int
481*fed8332bSIan Rogers"""Cache misses. Usually this indicates Last Level Cache misses."""
482*fed8332bSIan Rogers
483*fed8332bSIan RogersCOUNT_HW_BRANCH_INSTRUCTIONS: int
484*fed8332bSIan Rogers"""Retired branch instructions."""
485*fed8332bSIan Rogers
486*fed8332bSIan RogersCOUNT_HW_BRANCH_MISSES: int
487*fed8332bSIan Rogers"""Mispredicted branch instructions."""
488*fed8332bSIan Rogers
489*fed8332bSIan RogersCOUNT_HW_BUS_CYCLES: int
490*fed8332bSIan Rogers"""Bus cycles, which can be different from total cycles."""
491*fed8332bSIan Rogers
492*fed8332bSIan RogersCOUNT_HW_STALLED_CYCLES_FRONTEND: int
493*fed8332bSIan Rogers"""Stalled cycles during issue [This event is an alias of idle-cycles-frontend]."""
494*fed8332bSIan Rogers
495*fed8332bSIan RogersCOUNT_HW_STALLED_CYCLES_BACKEND: int
496*fed8332bSIan Rogers"""Stalled cycles during retirement [This event is an alias of idle-cycles-backend]."""
497*fed8332bSIan Rogers
498*fed8332bSIan RogersCOUNT_HW_REF_CPU_CYCLES: int
499*fed8332bSIan Rogers"""Total cycles; not affected by CPU frequency scaling."""
500*fed8332bSIan Rogers
501*fed8332bSIan Rogers
502*fed8332bSIan Rogers# Cache Counters
503*fed8332bSIan RogersCOUNT_HW_CACHE_L1D: int
504*fed8332bSIan Rogers"""Level 1 data cache."""
505*fed8332bSIan Rogers
506*fed8332bSIan RogersCOUNT_HW_CACHE_L1I: int
507*fed8332bSIan Rogers"""Level 1 instruction cache."""
508*fed8332bSIan Rogers
509*fed8332bSIan RogersCOUNT_HW_CACHE_LL: int
510*fed8332bSIan Rogers"""Last Level Cache."""
511*fed8332bSIan Rogers
512*fed8332bSIan RogersCOUNT_HW_CACHE_DTLB: int
513*fed8332bSIan Rogers"""Data TLB."""
514*fed8332bSIan Rogers
515*fed8332bSIan RogersCOUNT_HW_CACHE_ITLB: int
516*fed8332bSIan Rogers"""Instruction TLB."""
517*fed8332bSIan Rogers
518*fed8332bSIan RogersCOUNT_HW_CACHE_BPU: int
519*fed8332bSIan Rogers"""Branch Processing Unit."""
520*fed8332bSIan Rogers
521*fed8332bSIan RogersCOUNT_HW_CACHE_OP_READ: int
522*fed8332bSIan Rogers"""Read accesses."""
523*fed8332bSIan Rogers
524*fed8332bSIan RogersCOUNT_HW_CACHE_OP_WRITE: int
525*fed8332bSIan Rogers"""Write accesses."""
526*fed8332bSIan Rogers
527*fed8332bSIan RogersCOUNT_HW_CACHE_OP_PREFETCH: int
528*fed8332bSIan Rogers"""Prefetch accesses."""
529*fed8332bSIan Rogers
530*fed8332bSIan RogersCOUNT_HW_CACHE_RESULT_ACCESS: int
531*fed8332bSIan Rogers"""Accesses."""
532*fed8332bSIan Rogers
533*fed8332bSIan RogersCOUNT_HW_CACHE_RESULT_MISS: int
534*fed8332bSIan Rogers"""Misses."""
535*fed8332bSIan Rogers
536*fed8332bSIan Rogers
537*fed8332bSIan Rogers# Software Counters
538*fed8332bSIan RogersCOUNT_SW_CPU_CLOCK: int
539*fed8332bSIan Rogers"""CPU clock event."""
540*fed8332bSIan Rogers
541*fed8332bSIan RogersCOUNT_SW_TASK_CLOCK: int
542*fed8332bSIan Rogers"""Task clock event."""
543*fed8332bSIan Rogers
544*fed8332bSIan RogersCOUNT_SW_PAGE_FAULTS: int
545*fed8332bSIan Rogers"""Page faults."""
546*fed8332bSIan Rogers
547*fed8332bSIan RogersCOUNT_SW_CONTEXT_SWITCHES: int
548*fed8332bSIan Rogers"""Context switches."""
549*fed8332bSIan Rogers
550*fed8332bSIan RogersCOUNT_SW_CPU_MIGRATIONS: int
551*fed8332bSIan Rogers"""CPU migrations."""
552*fed8332bSIan Rogers
553*fed8332bSIan RogersCOUNT_SW_PAGE_FAULTS_MIN: int
554*fed8332bSIan Rogers"""Minor page faults."""
555*fed8332bSIan Rogers
556*fed8332bSIan RogersCOUNT_SW_PAGE_FAULTS_MAJ: int
557*fed8332bSIan Rogers"""Major page faults."""
558*fed8332bSIan Rogers
559*fed8332bSIan RogersCOUNT_SW_ALIGNMENT_FAULTS: int
560*fed8332bSIan Rogers"""Alignment faults."""
561*fed8332bSIan Rogers
562*fed8332bSIan RogersCOUNT_SW_EMULATION_FAULTS: int
563*fed8332bSIan Rogers"""Emulation faults."""
564*fed8332bSIan Rogers
565*fed8332bSIan RogersCOUNT_SW_DUMMY: int
566*fed8332bSIan Rogers"""Dummy event."""
567*fed8332bSIan Rogers
568*fed8332bSIan Rogers
569*fed8332bSIan Rogers# Sample Fields
570*fed8332bSIan RogersSAMPLE_IP: int
571*fed8332bSIan Rogers"""Instruction pointer."""
572*fed8332bSIan Rogers
573*fed8332bSIan RogersSAMPLE_TID: int
574*fed8332bSIan Rogers"""Process and thread ID."""
575*fed8332bSIan Rogers
576*fed8332bSIan RogersSAMPLE_TIME: int
577*fed8332bSIan Rogers"""Timestamp."""
578*fed8332bSIan Rogers
579*fed8332bSIan RogersSAMPLE_ADDR: int
580*fed8332bSIan Rogers"""Sampled address."""
581*fed8332bSIan Rogers
582*fed8332bSIan RogersSAMPLE_READ: int
583*fed8332bSIan Rogers"""Read barcode."""
584*fed8332bSIan Rogers
585*fed8332bSIan RogersSAMPLE_CALLCHAIN: int
586*fed8332bSIan Rogers"""Call chain."""
587*fed8332bSIan Rogers
588*fed8332bSIan RogersSAMPLE_ID: int
589*fed8332bSIan Rogers"""Unique ID."""
590*fed8332bSIan Rogers
591*fed8332bSIan RogersSAMPLE_CPU: int
592*fed8332bSIan Rogers"""CPU number."""
593*fed8332bSIan Rogers
594*fed8332bSIan RogersSAMPLE_PERIOD: int
595*fed8332bSIan Rogers"""Sample period."""
596*fed8332bSIan Rogers
597*fed8332bSIan RogersSAMPLE_STREAM_ID: int
598*fed8332bSIan Rogers"""Stream ID."""
599*fed8332bSIan Rogers
600*fed8332bSIan RogersSAMPLE_RAW: int
601*fed8332bSIan Rogers"""Raw sample."""
602*fed8332bSIan Rogers
603*fed8332bSIan Rogers
604*fed8332bSIan Rogers# Format Fields
605*fed8332bSIan RogersFORMAT_TOTAL_TIME_ENABLED: int
606*fed8332bSIan Rogers"""Total time enabled."""
607*fed8332bSIan Rogers
608*fed8332bSIan RogersFORMAT_TOTAL_TIME_RUNNING: int
609*fed8332bSIan Rogers"""Total time running."""
610*fed8332bSIan Rogers
611*fed8332bSIan RogersFORMAT_ID: int
612*fed8332bSIan Rogers"""Event ID."""
613*fed8332bSIan Rogers
614*fed8332bSIan RogersFORMAT_GROUP: int
615*fed8332bSIan Rogers"""Event group."""
616*fed8332bSIan Rogers
617*fed8332bSIan Rogers
618*fed8332bSIan Rogers# Record Types
619*fed8332bSIan RogersRECORD_MMAP: int
620*fed8332bSIan Rogers"""MMAP record. Contains header, pid, tid, addr, len, pgoff, filename, and sample_id."""
621*fed8332bSIan Rogers
622*fed8332bSIan RogersRECORD_LOST: int
623*fed8332bSIan Rogers"""Lost events record. Contains header, id, lost count, and sample_id."""
624*fed8332bSIan Rogers
625*fed8332bSIan RogersRECORD_COMM: int
626*fed8332bSIan Rogers"""COMM record. Contains header, pid, tid, comm, and sample_id."""
627*fed8332bSIan Rogers
628*fed8332bSIan RogersRECORD_EXIT: int
629*fed8332bSIan Rogers"""EXIT record. Contains header, pid, ppid, tid, ptid, time, and sample_id."""
630*fed8332bSIan Rogers
631*fed8332bSIan RogersRECORD_THROTTLE: int
632*fed8332bSIan Rogers"""THROTTLE record. Contains header, time, id, stream_id, and sample_id."""
633*fed8332bSIan Rogers
634*fed8332bSIan RogersRECORD_UNTHROTTLE: int
635*fed8332bSIan Rogers"""UNTHROTTLE record. Contains header, time, id, stream_id, and sample_id."""
636*fed8332bSIan Rogers
637*fed8332bSIan RogersRECORD_FORK: int
638*fed8332bSIan Rogers"""FORK record. Contains header, pid, ppid, tid, ptid, time, and sample_id."""
639*fed8332bSIan Rogers
640*fed8332bSIan RogersRECORD_READ: int
641*fed8332bSIan Rogers"""READ record. Contains header, and read values."""
642*fed8332bSIan Rogers
643*fed8332bSIan RogersRECORD_SAMPLE: int
644*fed8332bSIan Rogers"""SAMPLE record. Contains header, and sample data requested by sample_type."""
645*fed8332bSIan Rogers
646*fed8332bSIan RogersRECORD_MMAP2: int
647*fed8332bSIan Rogers"""MMAP2 record. Contains header, pid, tid, addr, len, pgoff, maj, min, ino,
648*fed8332bSIan Rogersino_generation, prot, flags, filename, and sample_id."""
649*fed8332bSIan Rogers
650*fed8332bSIan RogersRECORD_AUX: int
651*fed8332bSIan Rogers"""AUX record. Contains header, aux_offset, aux_size, flags, and sample_id."""
652*fed8332bSIan Rogers
653*fed8332bSIan RogersRECORD_ITRACE_START: int
654*fed8332bSIan Rogers"""ITRACE_START record. Contains header, pid, tid, and sample_id."""
655*fed8332bSIan Rogers
656*fed8332bSIan RogersRECORD_LOST_SAMPLES: int
657*fed8332bSIan Rogers"""LOST_SAMPLES record. Contains header, lost count, and sample_id."""
658*fed8332bSIan Rogers
659*fed8332bSIan RogersRECORD_SWITCH: int
660*fed8332bSIan Rogers"""SWITCH record. Contains header, and sample_id."""
661*fed8332bSIan Rogers
662*fed8332bSIan RogersRECORD_SWITCH_CPU_WIDE: int
663*fed8332bSIan Rogers"""SWITCH_CPU_WIDE record. Contains header, and sample_id."""
664*fed8332bSIan Rogers
665*fed8332bSIan RogersRECORD_STAT: int
666*fed8332bSIan Rogers"""STAT record."""
667*fed8332bSIan Rogers
668*fed8332bSIan RogersRECORD_STAT_ROUND: int
669*fed8332bSIan Rogers"""STAT_ROUND record."""
670*fed8332bSIan Rogers
671*fed8332bSIan RogersRECORD_MISC_SWITCH_OUT: int
672*fed8332bSIan Rogers"""MISC_SWITCH_OUT record."""
673