| """Type stubs for the perf Python module.""" |
| from typing import Callable, Dict, List, Optional, Any, Iterator, Union |
| |
| 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, Union[str, List[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.""" |