Files
Ian RogersandNamhyung Kim fed8332b0e perf python: Add perf.pyi stubs file
Add Python type stubs for the perf module to improve IDE support and
static analysis.  Includes docstrings for classes, methods, and
constants derived from C source and JSON definitions.

Assisted-by: Gemini:gemini-3.1-pro-preview
Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alice Rogers <alice.mei.rogers@gmail.com>
Cc: Dapeng Mi <dapeng1.mi@linux.intel.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@linaro.org>
Cc: Leo Yan <leo.yan@linux.dev>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Richter <tmricht@linux.ibm.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
2026-06-30 10:17:18 -07:00

673 lines
16 KiB
Python

"""Type stubs for the perf Python module."""
from typing import Callable, Dict, List, Optional, Any, Iterator
def config_get(name: str) -> Optional[str]:
"""Get a configuration value from perf config.
Args:
name: The configuration variable name (e.g., 'colors.top').
Returns:
The configuration value as a string, or None if not set.
"""
...
def metrics() -> List[Dict[str, str]]:
"""Get a list of available metrics.
Returns:
A list of dictionaries, each describing a metric.
"""
...
def syscall_name(id: int, *, elf_machine: Optional[int] = None) -> str:
"""Convert a syscall number to its name.
Args:
sc_id: The syscall number.
elf_machine: Optional ELF machine type.
Returns:
The name of the syscall.
"""
...
def syscall_id(name: str, *, elf_machine: Optional[int] = None) -> int:
"""Convert a syscall name to its number.
Args:
name: The syscall name.
elf_machine: Optional ELF machine type.
Returns:
The number of the syscall.
"""
...
def parse_events(
event_string: str,
cpus: Optional[cpu_map] = None,
threads: Optional['thread_map'] = None
) -> 'evlist':
"""Parse an event string and return an evlist.
Args:
event_string: The event string (e.g., 'cycles,instructions').
cpus: Optional CPU map to bind events to.
threads: Optional thread map to bind events to.
Returns:
An evlist containing the parsed events.
"""
...
def parse_metrics(
metrics_string: str,
pmu: Optional[str] = None,
cpus: Optional[cpu_map] = None,
threads: Optional['thread_map'] = None
) -> 'evlist':
"""Parse a string of metrics or metric groups and return an evlist."""
...
def tracepoint(sys: str, name: str) -> int:
"""Returns the tracepoint ID for a given system and name."""
...
def pmus() -> Iterator[Any]:
"""Returns a sequence of pmus."""
...
class data:
"""Represents a perf data file."""
def __init__(self, path: str = ..., fd: int = ...) -> None: ...
class thread:
"""Represents a thread in the system."""
def comm(self) -> str:
"""Get the command name of the thread."""
...
pid: int
tid: int
ppid: int
cpu: int
class counts_values:
"""Raw counter values."""
id: int
val: int
ena: int
run: int
lost: int
values: List[int]
class thread_map:
"""Map of threads being monitored."""
def __init__(self, pid: int = -1, tid: int = -1) -> None:
"""Initialize a thread map.
Args:
pid: Process ID to monitor (-1 for all).
tid: Thread ID to monitor (-1 for all).
"""
...
def __len__(self) -> int: ...
def __getitem__(self, index: int) -> int: ...
def __iter__(self) -> Iterator[int]: ...
class evsel:
"""Event selector, represents a single event being monitored."""
def __init__(
self,
type: int = ...,
config: int = ...,
sample_freq: int = ...,
sample_period: int = ...,
sample_type: int = ...,
read_format: int = ...,
disabled: bool = ...,
inherit: bool = ...,
pinned: bool = ...,
exclusive: bool = ...,
exclude_user: bool = ...,
exclude_kernel: bool = ...,
exclude_hv: bool = ...,
exclude_idle: bool = ...,
mmap: bool = ...,
context_switch: bool = ...,
comm: bool = ...,
freq: bool = ...,
inherit_stat: bool = ...,
enable_on_exec: bool = ...,
task: bool = ...,
watermark: int = ...,
precise_ip: int = ...,
mmap_data: bool = ...,
sample_id_all: bool = ...,
wakeup_events: int = ...,
bp_type: int = ...,
bp_addr: int = ...,
bp_len: int = ...,
idx: int = ...,
) -> None: ...
def __str__(self) -> str:
"""Return string representation of the event."""
...
def open(self) -> None:
"""Open the event selector file descriptor table."""
...
def read(self, cpu: int, thread: int) -> counts_values:
"""Read counter values for a specific CPU and thread."""
...
ids: List[int]
def cpus(self) -> cpu_map:
"""Get CPU map for this event."""
...
def threads(self) -> thread_map:
"""Get thread map for this event."""
...
tracking: bool
config: int
read_format: int
sample_period: int
sample_type: int
size: int
type: int
wakeup_events: int
class _sample_members:
sample_pid: int
sample_tid: int
sample_time: int
sample_id: int
sample_stream_id: int
sample_period: int
sample_cpu: int
class sample_event(_sample_members):
"""Represents a sample event from perf."""
evsel: evsel
sample_ip: int
sample_addr: int
sample_phys_addr: int
sample_weight: int
sample_data_src: int
sample_insn_count: int
sample_cyc_count: int
type: int
raw_buf: bytes
dso: str
dso_long_name: str
dso_bid: Optional[bytes]
map_start: int
map_end: int
map_pgoff: int
symbol: str
sym_start: int
sym_end: int
brstack: Optional['branch_stack']
callchain: Optional['callchain']
def srccode(self) -> str: ...
def insn(self) -> str: ...
def __getattr__(self, name: str) -> Any: ...
class mmap_event(_sample_members):
"""Represents a mmap event from perf."""
type: int
misc: int
pid: int
tid: int
start: int
len: int
pgoff: int
filename: str
evsel: Optional['evsel']
class mmap2_event(_sample_members):
"""Represents a mmap2 event from perf."""
type: int
misc: int
pid: int
tid: int
start: int
len: int
pgoff: int
prot: int
flags: int
filename: str
maj: Optional[int]
min: Optional[int]
ino: Optional[int]
ino_generation: Optional[int]
build_id: Optional[bytes]
evsel: Optional['evsel']
class lost_event(_sample_members):
"""Represents a lost events record."""
type: int
id: int
lost: int
evsel: Optional['evsel']
class comm_event(_sample_members):
"""Represents a COMM record."""
type: int
pid: int
tid: int
comm: str
evsel: Optional['evsel']
class task_event(_sample_members):
"""Represents an EXIT or FORK record."""
type: int
pid: int
ppid: int
tid: int
ptid: int
time: int
evsel: Optional['evsel']
class throttle_event(_sample_members):
"""Represents a THROTTLE or UNTHROTTLE record."""
type: int
time: int
id: int
stream_id: int
evsel: Optional['evsel']
class read_event(_sample_members):
"""Represents a READ record."""
type: int
pid: int
tid: int
evsel: Optional['evsel']
class switch_event(_sample_members):
"""Represents a SWITCH or SWITCH_CPU_WIDE record."""
type: int
next_prev_pid: int
next_prev_tid: int
evsel: Optional['evsel']
class branch_entry:
"""Represents a branch entry in the branch stack.
Attributes:
from_ip: Source address of the branch (corresponds to 'from' keyword in C).
to_ip: Destination address of the branch.
mispred: True if the branch was mispredicted.
predicted: True if the branch was predicted.
in_tx: True if the branch was in a transaction.
abort: True if the branch was an abort.
cycles: Number of cycles since the last branch.
type: Type of branch.
"""
from_ip: int
to_ip: int
mispred: bool
predicted: bool
in_tx: bool
abort: bool
cycles: int
type: int
class branch_stack:
"""Sequence of branch entries in the branch stack."""
def __len__(self) -> int: ...
def __getitem__(self, index: int) -> branch_entry: ...
class callchain_node:
"""Represents a frame in the callchain."""
ip: int
symbol: Optional[str]
dso: Optional[str]
class callchain:
"""Sequence of callchain frames."""
def __len__(self) -> int: ...
def __getitem__(self, index: int) -> callchain_node: ...
class stat_event(_sample_members):
"""Represents a stat event from perf."""
type: int
id: int
cpu: int
thread: int
val: int
ena: int
run: int
evsel: Optional['evsel']
class stat_round_event(_sample_members):
"""Represents a stat round event from perf."""
type: int
time: int
stat_round_type: int
evsel: Optional['evsel']
class cpu_map:
"""Map of CPUs being monitored."""
def __init__(self, cpustr: Optional[str] = None) -> None: ...
def __len__(self) -> int: ...
def __getitem__(self, index: int) -> int: ...
def __iter__(self) -> Iterator[int]: ...
class evlist:
def __init__(self, cpus: cpu_map, threads: thread_map) -> None: ...
def open(self) -> None:
"""Open the events in the list."""
...
def close(self) -> None:
"""Close the events in the list."""
...
def mmap(self) -> None:
"""Memory map the event buffers."""
...
def poll(self, timeout: int) -> int:
"""Poll for events.
Args:
timeout: Timeout in milliseconds.
Returns:
Number of events ready.
"""
...
def read_on_cpu(self, cpu: int) -> Optional[Any]:
"""Read a sample event from a specific CPU.
Args:
cpu: The CPU number.
Returns:
A sample_event or other event type if available, or None.
"""
...
def all_cpus(self) -> cpu_map:
"""Get a cpu_map of all CPUs in the system."""
...
def metrics(self) -> List[str]:
"""Get a list of metric names within the evlist."""
...
def compute_metric(self, metric: str, cpu: int, thread: int) -> float:
"""Compute metric for given name, cpu and thread.
Args:
metric: The metric name.
cpu: The CPU number.
thread: The thread ID.
Returns:
The computed metric value.
"""
...
def config(self) -> None:
"""Configure the events in the list."""
...
def disable(self) -> None:
"""Disable all events in the list."""
...
def enable(self) -> None:
"""Enable all events in the list."""
...
def get_pollfd(self) -> List[int]:
"""Get a list of file descriptors for polling."""
...
def add(self, evsel: evsel) -> int:
"""Add an event to the list."""
...
def __iter__(self) -> Iterator[evsel]:
"""Iterate over the events (evsel) in the list."""
...
class session:
def __init__(
self,
data: data,
sample: Optional[Callable[[sample_event], None]] = None,
stat: Optional[Callable[[Any, Optional[str]], None]] = None
) -> None:
"""Initialize a perf session.
Args:
data: The perf data file to read.
sample: Callback for sample events.
stat: Callback for stat events.
"""
...
def process_events(self) -> None:
"""Process all events in the session."""
...
def find_thread(self, pid: int) -> thread:
"""Returns the thread associated with a pid."""
...
# Event Types
TYPE_HARDWARE: int
"""Hardware event."""
TYPE_SOFTWARE: int
"""Software event."""
TYPE_TRACEPOINT: int
"""Tracepoint event."""
TYPE_HW_CACHE: int
"""Hardware cache event."""
TYPE_RAW: int
"""Raw hardware event."""
TYPE_BREAKPOINT: int
"""Breakpoint event."""
# Hardware Counters
COUNT_HW_CPU_CYCLES: int
"""Total cycles. Be wary of what happens during CPU frequency scaling."""
COUNT_HW_INSTRUCTIONS: int
"""Retired instructions. Be careful, these can be affected by various issues,
most notably hardware interrupt counts."""
COUNT_HW_CACHE_REFERENCES: int
"""Cache accesses. Usually this indicates Last Level Cache accesses but this
may vary depending on your CPU."""
COUNT_HW_CACHE_MISSES: int
"""Cache misses. Usually this indicates Last Level Cache misses."""
COUNT_HW_BRANCH_INSTRUCTIONS: int
"""Retired branch instructions."""
COUNT_HW_BRANCH_MISSES: int
"""Mispredicted branch instructions."""
COUNT_HW_BUS_CYCLES: int
"""Bus cycles, which can be different from total cycles."""
COUNT_HW_STALLED_CYCLES_FRONTEND: int
"""Stalled cycles during issue [This event is an alias of idle-cycles-frontend]."""
COUNT_HW_STALLED_CYCLES_BACKEND: int
"""Stalled cycles during retirement [This event is an alias of idle-cycles-backend]."""
COUNT_HW_REF_CPU_CYCLES: int
"""Total cycles; not affected by CPU frequency scaling."""
# Cache Counters
COUNT_HW_CACHE_L1D: int
"""Level 1 data cache."""
COUNT_HW_CACHE_L1I: int
"""Level 1 instruction cache."""
COUNT_HW_CACHE_LL: int
"""Last Level Cache."""
COUNT_HW_CACHE_DTLB: int
"""Data TLB."""
COUNT_HW_CACHE_ITLB: int
"""Instruction TLB."""
COUNT_HW_CACHE_BPU: int
"""Branch Processing Unit."""
COUNT_HW_CACHE_OP_READ: int
"""Read accesses."""
COUNT_HW_CACHE_OP_WRITE: int
"""Write accesses."""
COUNT_HW_CACHE_OP_PREFETCH: int
"""Prefetch accesses."""
COUNT_HW_CACHE_RESULT_ACCESS: int
"""Accesses."""
COUNT_HW_CACHE_RESULT_MISS: int
"""Misses."""
# Software Counters
COUNT_SW_CPU_CLOCK: int
"""CPU clock event."""
COUNT_SW_TASK_CLOCK: int
"""Task clock event."""
COUNT_SW_PAGE_FAULTS: int
"""Page faults."""
COUNT_SW_CONTEXT_SWITCHES: int
"""Context switches."""
COUNT_SW_CPU_MIGRATIONS: int
"""CPU migrations."""
COUNT_SW_PAGE_FAULTS_MIN: int
"""Minor page faults."""
COUNT_SW_PAGE_FAULTS_MAJ: int
"""Major page faults."""
COUNT_SW_ALIGNMENT_FAULTS: int
"""Alignment faults."""
COUNT_SW_EMULATION_FAULTS: int
"""Emulation faults."""
COUNT_SW_DUMMY: int
"""Dummy event."""
# Sample Fields
SAMPLE_IP: int
"""Instruction pointer."""
SAMPLE_TID: int
"""Process and thread ID."""
SAMPLE_TIME: int
"""Timestamp."""
SAMPLE_ADDR: int
"""Sampled address."""
SAMPLE_READ: int
"""Read barcode."""
SAMPLE_CALLCHAIN: int
"""Call chain."""
SAMPLE_ID: int
"""Unique ID."""
SAMPLE_CPU: int
"""CPU number."""
SAMPLE_PERIOD: int
"""Sample period."""
SAMPLE_STREAM_ID: int
"""Stream ID."""
SAMPLE_RAW: int
"""Raw sample."""
# Format Fields
FORMAT_TOTAL_TIME_ENABLED: int
"""Total time enabled."""
FORMAT_TOTAL_TIME_RUNNING: int
"""Total time running."""
FORMAT_ID: int
"""Event ID."""
FORMAT_GROUP: int
"""Event group."""
# Record Types
RECORD_MMAP: int
"""MMAP record. Contains header, pid, tid, addr, len, pgoff, filename, and sample_id."""
RECORD_LOST: int
"""Lost events record. Contains header, id, lost count, and sample_id."""
RECORD_COMM: int
"""COMM record. Contains header, pid, tid, comm, and sample_id."""
RECORD_EXIT: int
"""EXIT record. Contains header, pid, ppid, tid, ptid, time, and sample_id."""
RECORD_THROTTLE: int
"""THROTTLE record. Contains header, time, id, stream_id, and sample_id."""
RECORD_UNTHROTTLE: int
"""UNTHROTTLE record. Contains header, time, id, stream_id, and sample_id."""
RECORD_FORK: int
"""FORK record. Contains header, pid, ppid, tid, ptid, time, and sample_id."""
RECORD_READ: int
"""READ record. Contains header, and read values."""
RECORD_SAMPLE: int
"""SAMPLE record. Contains header, and sample data requested by sample_type."""
RECORD_MMAP2: int
"""MMAP2 record. Contains header, pid, tid, addr, len, pgoff, maj, min, ino,
ino_generation, prot, flags, filename, and sample_id."""
RECORD_AUX: int
"""AUX record. Contains header, aux_offset, aux_size, flags, and sample_id."""
RECORD_ITRACE_START: int
"""ITRACE_START record. Contains header, pid, tid, and sample_id."""
RECORD_LOST_SAMPLES: int
"""LOST_SAMPLES record. Contains header, lost count, and sample_id."""
RECORD_SWITCH: int
"""SWITCH record. Contains header, and sample_id."""
RECORD_SWITCH_CPU_WIDE: int
"""SWITCH_CPU_WIDE record. Contains header, and sample_id."""
RECORD_STAT: int
"""STAT record."""
RECORD_STAT_ROUND: int
"""STAT_ROUND record."""
RECORD_MISC_SWITCH_OUT: int
"""MISC_SWITCH_OUT record."""