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