~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/perf/Documentation/intel-pt.txt

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /tools/perf/Documentation/intel-pt.txt (Version linux-6.12-rc7) and /tools/perf/Documentation/intel-pt.txt (Version linux-5.5.19)


  1 Documentation for support for Intel Processor  !!   1 Intel Processor Trace
                                                   >>   2 =====================
                                                   >>   3 
                                                   >>   4 Overview
                                                   >>   5 ========
                                                   >>   6 
                                                   >>   7 Intel Processor Trace (Intel PT) is an extension of Intel Architecture that
                                                   >>   8 collects information about software execution such as control flow, execution
                                                   >>   9 modes and timings and formats it into highly compressed binary packets.
                                                   >>  10 Technical details are documented in the Intel 64 and IA-32 Architectures
                                                   >>  11 Software Developer Manuals, Chapter 36 Intel Processor Trace.
                                                   >>  12 
                                                   >>  13 Intel PT is first supported in Intel Core M and 5th generation Intel Core
                                                   >>  14 processors that are based on the Intel micro-architecture code name Broadwell.
                                                   >>  15 
                                                   >>  16 Trace data is collected by 'perf record' and stored within the perf.data file.
                                                   >>  17 See below for options to 'perf record'.
                                                   >>  18 
                                                   >>  19 Trace data must be 'decoded' which involves walking the object code and matching
                                                   >>  20 the trace data packets. For example a TNT packet only tells whether a
                                                   >>  21 conditional branch was taken or not taken, so to make use of that packet the
                                                   >>  22 decoder must know precisely which instruction was being executed.
                                                   >>  23 
                                                   >>  24 Decoding is done on-the-fly.  The decoder outputs samples in the same format as
                                                   >>  25 samples output by perf hardware events, for example as though the "instructions"
                                                   >>  26 or "branches" events had been recorded.  Presently 3 tools support this:
                                                   >>  27 'perf script', 'perf report' and 'perf inject'.  See below for more information
                                                   >>  28 on using those tools.
                                                   >>  29 
                                                   >>  30 The main distinguishing feature of Intel PT is that the decoder can determine
                                                   >>  31 the exact flow of software execution.  Intel PT can be used to understand why
                                                   >>  32 and how did software get to a certain point, or behave a certain way.  The
                                                   >>  33 software does not have to be recompiled, so Intel PT works with debug or release
                                                   >>  34 builds, however the executed images are needed - which makes use in JIT-compiled
                                                   >>  35 environments, or with self-modified code, a challenge.  Also symbols need to be
                                                   >>  36 provided to make sense of addresses.
                                                   >>  37 
                                                   >>  38 A limitation of Intel PT is that it produces huge amounts of trace data
                                                   >>  39 (hundreds of megabytes per second per core) which takes a long time to decode,
                                                   >>  40 for example two or three orders of magnitude longer than it took to collect.
                                                   >>  41 Another limitation is the performance impact of tracing, something that will
                                                   >>  42 vary depending on the use-case and architecture.
                                                   >>  43 
                                                   >>  44 
                                                   >>  45 Quickstart
                                                   >>  46 ==========
                                                   >>  47 
                                                   >>  48 It is important to start small.  That is because it is easy to capture vastly
                                                   >>  49 more data than can possibly be processed.
                                                   >>  50 
                                                   >>  51 The simplest thing to do with Intel PT is userspace profiling of small programs.
                                                   >>  52 Data is captured with 'perf record' e.g. to trace 'ls' userspace-only:
                                                   >>  53 
                                                   >>  54         perf record -e intel_pt//u ls
                                                   >>  55 
                                                   >>  56 And profiled with 'perf report' e.g.
                                                   >>  57 
                                                   >>  58         perf report
                                                   >>  59 
                                                   >>  60 To also trace kernel space presents a problem, namely kernel self-modifying
                                                   >>  61 code.  A fairly good kernel image is available in /proc/kcore but to get an
                                                   >>  62 accurate image a copy of /proc/kcore needs to be made under the same conditions
                                                   >>  63 as the data capture.  A script perf-with-kcore can do that, but beware that the
                                                   >>  64 script makes use of 'sudo' to copy /proc/kcore.  If you have perf installed
                                                   >>  65 locally from the source tree you can do:
                                                   >>  66 
                                                   >>  67         ~/libexec/perf-core/perf-with-kcore record pt_ls -e intel_pt// -- ls
                                                   >>  68 
                                                   >>  69 which will create a directory named 'pt_ls' and put the perf.data file and
                                                   >>  70 copies of /proc/kcore, /proc/kallsyms and /proc/modules into it.  Then to use
                                                   >>  71 'perf report' becomes:
                                                   >>  72 
                                                   >>  73         ~/libexec/perf-core/perf-with-kcore report pt_ls
                                                   >>  74 
                                                   >>  75 Because samples are synthesized after-the-fact, the sampling period can be
                                                   >>  76 selected for reporting. e.g. sample every microsecond
                                                   >>  77 
                                                   >>  78         ~/libexec/perf-core/perf-with-kcore report pt_ls --itrace=i1usge
                                                   >>  79 
                                                   >>  80 See the sections below for more information about the --itrace option.
                                                   >>  81 
                                                   >>  82 Beware the smaller the period, the more samples that are produced, and the
                                                   >>  83 longer it takes to process them.
                                                   >>  84 
                                                   >>  85 Also note that the coarseness of Intel PT timing information will start to
                                                   >>  86 distort the statistical value of the sampling as the sampling period becomes
                                                   >>  87 smaller.
                                                   >>  88 
                                                   >>  89 To represent software control flow, "branches" samples are produced.  By default
                                                   >>  90 a branch sample is synthesized for every single branch.  To get an idea what
                                                   >>  91 data is available you can use the 'perf script' tool with all itrace sampling
                                                   >>  92 options, which will list all the samples.
                                                   >>  93 
                                                   >>  94         perf record -e intel_pt//u ls
                                                   >>  95         perf script --itrace=ibxwpe
                                                   >>  96 
                                                   >>  97 An interesting field that is not printed by default is 'flags' which can be
                                                   >>  98 displayed as follows:
                                                   >>  99 
                                                   >> 100         perf script --itrace=ibxwpe -F+flags
                                                   >> 101 
                                                   >> 102 The flags are "bcrosyiABEx" which stand for branch, call, return, conditional,
                                                   >> 103 system, asynchronous, interrupt, transaction abort, trace begin, trace end, and
                                                   >> 104 in transaction, respectively.
                                                   >> 105 
                                                   >> 106 Another interesting field that is not printed by default is 'ipc' which can be
                                                   >> 107 displayed as follows:
                                                   >> 108 
                                                   >> 109         perf script --itrace=be -F+ipc
                                                   >> 110 
                                                   >> 111 There are two ways that instructions-per-cycle (IPC) can be calculated depending
                                                   >> 112 on the recording.
                                                   >> 113 
                                                   >> 114 If the 'cyc' config term (see config terms section below) was used, then IPC is
                                                   >> 115 calculated using the cycle count from CYC packets, otherwise MTC packets are
                                                   >> 116 used - refer to the 'mtc' config term.  When MTC is used, however, the values
                                                   >> 117 are less accurate because the timing is less accurate.
                                                   >> 118 
                                                   >> 119 Because Intel PT does not update the cycle count on every branch or instruction,
                                                   >> 120 the values will often be zero.  When there are values, they will be the number
                                                   >> 121 of instructions and number of cycles since the last update, and thus represent
                                                   >> 122 the average IPC since the last IPC for that event type.  Note IPC for "branches"
                                                   >> 123 events is calculated separately from IPC for "instructions" events.
                                                   >> 124 
                                                   >> 125 Also note that the IPC instruction count may or may not include the current
                                                   >> 126 instruction.  If the cycle count is associated with an asynchronous branch
                                                   >> 127 (e.g. page fault or interrupt), then the instruction count does not include the
                                                   >> 128 current instruction, otherwise it does.  That is consistent with whether or not
                                                   >> 129 that instruction has retired when the cycle count is updated.
                                                   >> 130 
                                                   >> 131 Another note, in the case of "branches" events, non-taken branches are not
                                                   >> 132 presently sampled, so IPC values for them do not appear e.g. a CYC packet with a
                                                   >> 133 TNT packet that starts with a non-taken branch.  To see every possible IPC
                                                   >> 134 value, "instructions" events can be used e.g. --itrace=i0ns
                                                   >> 135 
                                                   >> 136 While it is possible to create scripts to analyze the data, an alternative
                                                   >> 137 approach is available to export the data to a sqlite or postgresql database.
                                                   >> 138 Refer to script export-to-sqlite.py or export-to-postgresql.py for more details,
                                                   >> 139 and to script exported-sql-viewer.py for an example of using the database.
                                                   >> 140 
                                                   >> 141 There is also script intel-pt-events.py which provides an example of how to
                                                   >> 142 unpack the raw data for power events and PTWRITE.
                                                   >> 143 
                                                   >> 144 As mentioned above, it is easy to capture too much data.  One way to limit the
                                                   >> 145 data captured is to use 'snapshot' mode which is explained further below.
                                                   >> 146 Refer to 'new snapshot option' and 'Intel PT modes of operation' further below.
                                                   >> 147 
                                                   >> 148 Another problem that will be experienced is decoder errors.  They can be caused
                                                   >> 149 by inability to access the executed image, self-modified or JIT-ed code, or the
                                                   >> 150 inability to match side-band information (such as context switches and mmaps)
                                                   >> 151 which results in the decoder not knowing what code was executed.
                                                   >> 152 
                                                   >> 153 There is also the problem of perf not being able to copy the data fast enough,
                                                   >> 154 resulting in data lost because the buffer was full.  See 'Buffer handling' below
                                                   >> 155 for more details.
                                                   >> 156 
                                                   >> 157 
                                                   >> 158 perf record
                                                   >> 159 ===========
                                                   >> 160 
                                                   >> 161 new event
                                                   >> 162 ---------
                                                   >> 163 
                                                   >> 164 The Intel PT kernel driver creates a new PMU for Intel PT.  PMU events are
                                                   >> 165 selected by providing the PMU name followed by the "config" separated by slashes.
                                                   >> 166 An enhancement has been made to allow default "config" e.g. the option
                                                   >> 167 
                                                   >> 168         -e intel_pt//
                                                   >> 169 
                                                   >> 170 will use a default config value.  Currently that is the same as
                                                   >> 171 
                                                   >> 172         -e intel_pt/tsc,noretcomp=0/
                                                   >> 173 
                                                   >> 174 which is the same as
                                                   >> 175 
                                                   >> 176         -e intel_pt/tsc=1,noretcomp=0/
                                                   >> 177 
                                                   >> 178 Note there are now new config terms - see section 'config terms' further below.
                                                   >> 179 
                                                   >> 180 The config terms are listed in /sys/devices/intel_pt/format.  They are bit
                                                   >> 181 fields within the config member of the struct perf_event_attr which is
                                                   >> 182 passed to the kernel by the perf_event_open system call.  They correspond to bit
                                                   >> 183 fields in the IA32_RTIT_CTL MSR.  Here is a list of them and their definitions:
                                                   >> 184 
                                                   >> 185         $ grep -H . /sys/bus/event_source/devices/intel_pt/format/*
                                                   >> 186         /sys/bus/event_source/devices/intel_pt/format/cyc:config:1
                                                   >> 187         /sys/bus/event_source/devices/intel_pt/format/cyc_thresh:config:19-22
                                                   >> 188         /sys/bus/event_source/devices/intel_pt/format/mtc:config:9
                                                   >> 189         /sys/bus/event_source/devices/intel_pt/format/mtc_period:config:14-17
                                                   >> 190         /sys/bus/event_source/devices/intel_pt/format/noretcomp:config:11
                                                   >> 191         /sys/bus/event_source/devices/intel_pt/format/psb_period:config:24-27
                                                   >> 192         /sys/bus/event_source/devices/intel_pt/format/tsc:config:10
                                                   >> 193 
                                                   >> 194 Note that the default config must be overridden for each term i.e.
                                                   >> 195 
                                                   >> 196         -e intel_pt/noretcomp=0/
                                                   >> 197 
                                                   >> 198 is the same as:
                                                   >> 199 
                                                   >> 200         -e intel_pt/tsc=1,noretcomp=0/
                                                   >> 201 
                                                   >> 202 So, to disable TSC packets use:
                                                   >> 203 
                                                   >> 204         -e intel_pt/tsc=0/
                                                   >> 205 
                                                   >> 206 It is also possible to specify the config value explicitly:
                                                   >> 207 
                                                   >> 208         -e intel_pt/config=0x400/
                                                   >> 209 
                                                   >> 210 Note that, as with all events, the event is suffixed with event modifiers:
                                                   >> 211 
                                                   >> 212         u       userspace
                                                   >> 213         k       kernel
                                                   >> 214         h       hypervisor
                                                   >> 215         G       guest
                                                   >> 216         H       host
                                                   >> 217         p       precise ip
                                                   >> 218 
                                                   >> 219 'h', 'G' and 'H' are for virtualization which is not supported by Intel PT.
                                                   >> 220 'p' is also not relevant to Intel PT.  So only options 'u' and 'k' are
                                                   >> 221 meaningful for Intel PT.
                                                   >> 222 
                                                   >> 223 perf_event_attr is displayed if the -vv option is used e.g.
                                                   >> 224 
                                                   >> 225         ------------------------------------------------------------
                                                   >> 226         perf_event_attr:
                                                   >> 227         type                             6
                                                   >> 228         size                             112
                                                   >> 229         config                           0x400
                                                   >> 230         { sample_period, sample_freq }   1
                                                   >> 231         sample_type                      IP|TID|TIME|CPU|IDENTIFIER
                                                   >> 232         read_format                      ID
                                                   >> 233         disabled                         1
                                                   >> 234         inherit                          1
                                                   >> 235         exclude_kernel                   1
                                                   >> 236         exclude_hv                       1
                                                   >> 237         enable_on_exec                   1
                                                   >> 238         sample_id_all                    1
                                                   >> 239         ------------------------------------------------------------
                                                   >> 240         sys_perf_event_open: pid 31104  cpu 0  group_fd -1  flags 0x8
                                                   >> 241         sys_perf_event_open: pid 31104  cpu 1  group_fd -1  flags 0x8
                                                   >> 242         sys_perf_event_open: pid 31104  cpu 2  group_fd -1  flags 0x8
                                                   >> 243         sys_perf_event_open: pid 31104  cpu 3  group_fd -1  flags 0x8
                                                   >> 244         ------------------------------------------------------------
                                                   >> 245 
                                                   >> 246 
                                                   >> 247 config terms
                                                   >> 248 ------------
                                                   >> 249 
                                                   >> 250 The June 2015 version of Intel 64 and IA-32 Architectures Software Developer
                                                   >> 251 Manuals, Chapter 36 Intel Processor Trace, defined new Intel PT features.
                                                   >> 252 Some of the features are reflect in new config terms.  All the config terms are
                                                   >> 253 described below.
                                                   >> 254 
                                                   >> 255 tsc             Always supported.  Produces TSC timestamp packets to provide
                                                   >> 256                 timing information.  In some cases it is possible to decode
                                                   >> 257                 without timing information, for example a per-thread context
                                                   >> 258                 that does not overlap executable memory maps.
                                                   >> 259 
                                                   >> 260                 The default config selects tsc (i.e. tsc=1).
                                                   >> 261 
                                                   >> 262 noretcomp       Always supported.  Disables "return compression" so a TIP packet
                                                   >> 263                 is produced when a function returns.  Causes more packets to be
                                                   >> 264                 produced but might make decoding more reliable.
                                                   >> 265 
                                                   >> 266                 The default config does not select noretcomp (i.e. noretcomp=0).
                                                   >> 267 
                                                   >> 268 psb_period      Allows the frequency of PSB packets to be specified.
                                                   >> 269 
                                                   >> 270                 The PSB packet is a synchronization packet that provides a
                                                   >> 271                 starting point for decoding or recovery from errors.
                                                   >> 272 
                                                   >> 273                 Support for psb_period is indicated by:
                                                   >> 274 
                                                   >> 275                         /sys/bus/event_source/devices/intel_pt/caps/psb_cyc
                                                   >> 276 
                                                   >> 277                 which contains "1" if the feature is supported and "0"
                                                   >> 278                 otherwise.
                                                   >> 279 
                                                   >> 280                 Valid values are given by:
                                                   >> 281 
                                                   >> 282                         /sys/bus/event_source/devices/intel_pt/caps/psb_periods
                                                   >> 283 
                                                   >> 284                 which contains a hexadecimal value, the bits of which represent
                                                   >> 285                 valid values e.g. bit 2 set means value 2 is valid.
                                                   >> 286 
                                                   >> 287                 The psb_period value is converted to the approximate number of
                                                   >> 288                 trace bytes between PSB packets as:
                                                   >> 289 
                                                   >> 290                         2 ^ (value + 11)
                                                   >> 291 
                                                   >> 292                 e.g. value 3 means 16KiB bytes between PSBs
                                                   >> 293 
                                                   >> 294                 If an invalid value is entered, the error message
                                                   >> 295                 will give a list of valid values e.g.
                                                   >> 296 
                                                   >> 297                         $ perf record -e intel_pt/psb_period=15/u uname
                                                   >> 298                         Invalid psb_period for intel_pt. Valid values are: 0-5
                                                   >> 299 
                                                   >> 300                 If MTC packets are selected, the default config selects a value
                                                   >> 301                 of 3 (i.e. psb_period=3) or the nearest lower value that is
                                                   >> 302                 supported (0 is always supported).  Otherwise the default is 0.
                                                   >> 303 
                                                   >> 304                 If decoding is expected to be reliable and the buffer is large
                                                   >> 305                 then a large PSB period can be used.
                                                   >> 306 
                                                   >> 307                 Because a TSC packet is produced with PSB, the PSB period can
                                                   >> 308                 also affect the granularity to timing information in the absence
                                                   >> 309                 of MTC or CYC.
                                                   >> 310 
                                                   >> 311 mtc             Produces MTC timing packets.
                                                   >> 312 
                                                   >> 313                 MTC packets provide finer grain timestamp information than TSC
                                                   >> 314                 packets.  MTC packets record time using the hardware crystal
                                                   >> 315                 clock (CTC) which is related to TSC packets using a TMA packet.
                                                   >> 316 
                                                   >> 317                 Support for this feature is indicated by:
                                                   >> 318 
                                                   >> 319                         /sys/bus/event_source/devices/intel_pt/caps/mtc
                                                   >> 320 
                                                   >> 321                 which contains "1" if the feature is supported and
                                                   >> 322                 "0" otherwise.
                                                   >> 323 
                                                   >> 324                 The frequency of MTC packets can also be specified - see
                                                   >> 325                 mtc_period below.
                                                   >> 326 
                                                   >> 327 mtc_period      Specifies how frequently MTC packets are produced - see mtc
                                                   >> 328                 above for how to determine if MTC packets are supported.
                                                   >> 329 
                                                   >> 330                 Valid values are given by:
                                                   >> 331 
                                                   >> 332                         /sys/bus/event_source/devices/intel_pt/caps/mtc_periods
                                                   >> 333 
                                                   >> 334                 which contains a hexadecimal value, the bits of which represent
                                                   >> 335                 valid values e.g. bit 2 set means value 2 is valid.
                                                   >> 336 
                                                   >> 337                 The mtc_period value is converted to the MTC frequency as:
                                                   >> 338 
                                                   >> 339                         CTC-frequency / (2 ^ value)
                                                   >> 340 
                                                   >> 341                 e.g. value 3 means one eighth of CTC-frequency
                                                   >> 342 
                                                   >> 343                 Where CTC is the hardware crystal clock, the frequency of which
                                                   >> 344                 can be related to TSC via values provided in cpuid leaf 0x15.
                                                   >> 345 
                                                   >> 346                 If an invalid value is entered, the error message
                                                   >> 347                 will give a list of valid values e.g.
                                                   >> 348 
                                                   >> 349                         $ perf record -e intel_pt/mtc_period=15/u uname
                                                   >> 350                         Invalid mtc_period for intel_pt. Valid values are: 0,3,6,9
                                                   >> 351 
                                                   >> 352                 The default value is 3 or the nearest lower value
                                                   >> 353                 that is supported (0 is always supported).
                                                   >> 354 
                                                   >> 355 cyc             Produces CYC timing packets.
                                                   >> 356 
                                                   >> 357                 CYC packets provide even finer grain timestamp information than
                                                   >> 358                 MTC and TSC packets.  A CYC packet contains the number of CPU
                                                   >> 359                 cycles since the last CYC packet. Unlike MTC and TSC packets,
                                                   >> 360                 CYC packets are only sent when another packet is also sent.
                                                   >> 361 
                                                   >> 362                 Support for this feature is indicated by:
                                                   >> 363 
                                                   >> 364                         /sys/bus/event_source/devices/intel_pt/caps/psb_cyc
                                                   >> 365 
                                                   >> 366                 which contains "1" if the feature is supported and
                                                   >> 367                 "0" otherwise.
                                                   >> 368 
                                                   >> 369                 The number of CYC packets produced can be reduced by specifying
                                                   >> 370                 a threshold - see cyc_thresh below.
                                                   >> 371 
                                                   >> 372 cyc_thresh      Specifies how frequently CYC packets are produced - see cyc
                                                   >> 373                 above for how to determine if CYC packets are supported.
                                                   >> 374 
                                                   >> 375                 Valid cyc_thresh values are given by:
                                                   >> 376 
                                                   >> 377                         /sys/bus/event_source/devices/intel_pt/caps/cycle_thresholds
                                                   >> 378 
                                                   >> 379                 which contains a hexadecimal value, the bits of which represent
                                                   >> 380                 valid values e.g. bit 2 set means value 2 is valid.
                                                   >> 381 
                                                   >> 382                 The cyc_thresh value represents the minimum number of CPU cycles
                                                   >> 383                 that must have passed before a CYC packet can be sent.  The
                                                   >> 384                 number of CPU cycles is:
                                                   >> 385 
                                                   >> 386                         2 ^ (value - 1)
                                                   >> 387 
                                                   >> 388                 e.g. value 4 means 8 CPU cycles must pass before a CYC packet
                                                   >> 389                 can be sent.  Note a CYC packet is still only sent when another
                                                   >> 390                 packet is sent, not at, e.g. every 8 CPU cycles.
                                                   >> 391 
                                                   >> 392                 If an invalid value is entered, the error message
                                                   >> 393                 will give a list of valid values e.g.
                                                   >> 394 
                                                   >> 395                         $ perf record -e intel_pt/cyc,cyc_thresh=15/u uname
                                                   >> 396                         Invalid cyc_thresh for intel_pt. Valid values are: 0-12
                                                   >> 397 
                                                   >> 398                 CYC packets are not requested by default.
                                                   >> 399 
                                                   >> 400 pt              Specifies pass-through which enables the 'branch' config term.
                                                   >> 401 
                                                   >> 402                 The default config selects 'pt' if it is available, so a user will
                                                   >> 403                 never need to specify this term.
                                                   >> 404 
                                                   >> 405 branch          Enable branch tracing.  Branch tracing is enabled by default so to
                                                   >> 406                 disable branch tracing use 'branch=0'.
                                                   >> 407 
                                                   >> 408                 The default config selects 'branch' if it is available.
                                                   >> 409 
                                                   >> 410 ptw             Enable PTWRITE packets which are produced when a ptwrite instruction
                                                   >> 411                 is executed.
                                                   >> 412 
                                                   >> 413                 Support for this feature is indicated by:
                                                   >> 414 
                                                   >> 415                         /sys/bus/event_source/devices/intel_pt/caps/ptwrite
                                                   >> 416 
                                                   >> 417                 which contains "1" if the feature is supported and
                                                   >> 418                 "0" otherwise.
                                                   >> 419 
                                                   >> 420 fup_on_ptw      Enable a FUP packet to follow the PTWRITE packet.  The FUP packet
                                                   >> 421                 provides the address of the ptwrite instruction.  In the absence of
                                                   >> 422                 fup_on_ptw, the decoder will use the address of the previous branch
                                                   >> 423                 if branch tracing is enabled, otherwise the address will be zero.
                                                   >> 424                 Note that fup_on_ptw will work even when branch tracing is disabled.
                                                   >> 425 
                                                   >> 426 pwr_evt         Enable power events.  The power events provide information about
                                                   >> 427                 changes to the CPU C-state.
                                                   >> 428 
                                                   >> 429                 Support for this feature is indicated by:
                                                   >> 430 
                                                   >> 431                         /sys/bus/event_source/devices/intel_pt/caps/power_event_trace
                                                   >> 432 
                                                   >> 433                 which contains "1" if the feature is supported and
                                                   >> 434                 "0" otherwise.
                                                   >> 435 
                                                   >> 436 
                                                   >> 437 AUX area sampling option
                                                   >> 438 ------------------------
                                                   >> 439 
                                                   >> 440 To select Intel PT "sampling" the AUX area sampling option can be used:
                                                   >> 441 
                                                   >> 442         --aux-sample
                                                   >> 443 
                                                   >> 444 Optionally it can be followed by the sample size in bytes e.g.
                                                   >> 445 
                                                   >> 446         --aux-sample=8192
                                                   >> 447 
                                                   >> 448 In addition, the Intel PT event to sample must be defined e.g.
                                                   >> 449 
                                                   >> 450         -e intel_pt//u
                                                   >> 451 
                                                   >> 452 Samples on other events will be created containing Intel PT data e.g. the
                                                   >> 453 following will create Intel PT samples on the branch-misses event, note the
                                                   >> 454 events must be grouped using {}:
                                                   >> 455 
                                                   >> 456         perf record --aux-sample -e '{intel_pt//u,branch-misses:u}'
                                                   >> 457 
                                                   >> 458 An alternative to '--aux-sample' is to add the config term 'aux-sample-size' to
                                                   >> 459 events.  In this case, the grouping is implied e.g.
                                                   >> 460 
                                                   >> 461         perf record -e intel_pt//u -e branch-misses/aux-sample-size=8192/u
                                                   >> 462 
                                                   >> 463 is the same as:
                                                   >> 464 
                                                   >> 465         perf record -e '{intel_pt//u,branch-misses/aux-sample-size=8192/u}'
                                                   >> 466 
                                                   >> 467 but allows for also using an address filter e.g.:
                                                   >> 468 
                                                   >> 469         perf record -e intel_pt//u --filter 'filter * @/bin/ls' -e branch-misses/aux-sample-size=8192/u -- ls
                                                   >> 470 
                                                   >> 471 It is important to select a sample size that is big enough to contain at least
                                                   >> 472 one PSB packet.  If not a warning will be displayed:
                                                   >> 473 
                                                   >> 474         Intel PT sample size (%zu) may be too small for PSB period (%zu)
                                                   >> 475 
                                                   >> 476 The calculation used for that is: if sample_size <= psb_period + 256 display the
                                                   >> 477 warning.  When sampling is used, psb_period defaults to 0 (2KiB).
                                                   >> 478 
                                                   >> 479 The default sample size is 4KiB.
                                                   >> 480 
                                                   >> 481 The sample size is passed in aux_sample_size in struct perf_event_attr.  The
                                                   >> 482 sample size is limited by the maximum event size which is 64KiB.  It is
                                                   >> 483 difficult to know how big the event might be without the trace sample attached,
                                                   >> 484 but the tool validates that the sample size is not greater than 60KiB.
                                                   >> 485 
                                                   >> 486 
                                                   >> 487 new snapshot option
                                                   >> 488 -------------------
                                                   >> 489 
                                                   >> 490 The difference between full trace and snapshot from the kernel's perspective is
                                                   >> 491 that in full trace we don't overwrite trace data that the user hasn't collected
                                                   >> 492 yet (and indicated that by advancing aux_tail), whereas in snapshot mode we let
                                                   >> 493 the trace run and overwrite older data in the buffer so that whenever something
                                                   >> 494 interesting happens, we can stop it and grab a snapshot of what was going on
                                                   >> 495 around that interesting moment.
                                                   >> 496 
                                                   >> 497 To select snapshot mode a new option has been added:
                                                   >> 498 
                                                   >> 499         -S
                                                   >> 500 
                                                   >> 501 Optionally it can be followed by the snapshot size e.g.
                                                   >> 502 
                                                   >> 503         -S0x100000
                                                   >> 504 
                                                   >> 505 The default snapshot size is the auxtrace mmap size.  If neither auxtrace mmap size
                                                   >> 506 nor snapshot size is specified, then the default is 4MiB for privileged users
                                                   >> 507 (or if /proc/sys/kernel/perf_event_paranoid < 0), 128KiB for unprivileged users.
                                                   >> 508 If an unprivileged user does not specify mmap pages, the mmap pages will be
                                                   >> 509 reduced as described in the 'new auxtrace mmap size option' section below.
                                                   >> 510 
                                                   >> 511 The snapshot size is displayed if the option -vv is used e.g.
                                                   >> 512 
                                                   >> 513         Intel PT snapshot size: %zu
                                                   >> 514 
                                                   >> 515 
                                                   >> 516 new auxtrace mmap size option
                                                   >> 517 ---------------------------
                                                   >> 518 
                                                   >> 519 Intel PT buffer size is specified by an addition to the -m option e.g.
                                                   >> 520 
                                                   >> 521         -m,16
                                                   >> 522 
                                                   >> 523 selects a buffer size of 16 pages i.e. 64KiB.
                                                   >> 524 
                                                   >> 525 Note that the existing functionality of -m is unchanged.  The auxtrace mmap size
                                                   >> 526 is specified by the optional addition of a comma and the value.
                                                   >> 527 
                                                   >> 528 The default auxtrace mmap size for Intel PT is 4MiB/page_size for privileged users
                                                   >> 529 (or if /proc/sys/kernel/perf_event_paranoid < 0), 128KiB for unprivileged users.
                                                   >> 530 If an unprivileged user does not specify mmap pages, the mmap pages will be
                                                   >> 531 reduced from the default 512KiB/page_size to 256KiB/page_size, otherwise the
                                                   >> 532 user is likely to get an error as they exceed their mlock limit (Max locked
                                                   >> 533 memory as shown in /proc/self/limits).  Note that perf does not count the first
                                                   >> 534 512KiB (actually /proc/sys/kernel/perf_event_mlock_kb minus 1 page) per cpu
                                                   >> 535 against the mlock limit so an unprivileged user is allowed 512KiB per cpu plus
                                                   >> 536 their mlock limit (which defaults to 64KiB but is not multiplied by the number
                                                   >> 537 of cpus).
                                                   >> 538 
                                                   >> 539 In full-trace mode, powers of two are allowed for buffer size, with a minimum
                                                   >> 540 size of 2 pages.  In snapshot mode or sampling mode, it is the same but the
                                                   >> 541 minimum size is 1 page.
                                                   >> 542 
                                                   >> 543 The mmap size and auxtrace mmap size are displayed if the -vv option is used e.g.
                                                   >> 544 
                                                   >> 545         mmap length 528384
                                                   >> 546         auxtrace mmap length 4198400
                                                   >> 547 
                                                   >> 548 
                                                   >> 549 Intel PT modes of operation
                                                   >> 550 ---------------------------
                                                   >> 551 
                                                   >> 552 Intel PT can be used in 2 modes:
                                                   >> 553         full-trace mode
                                                   >> 554         sample mode
                                                   >> 555         snapshot mode
                                                   >> 556 
                                                   >> 557 Full-trace mode traces continuously e.g.
                                                   >> 558 
                                                   >> 559         perf record -e intel_pt//u uname
                                                   >> 560 
                                                   >> 561 Sample mode attaches a Intel PT sample to other events e.g.
                                                   >> 562 
                                                   >> 563         perf record --aux-sample -e intel_pt//u -e branch-misses:u
                                                   >> 564 
                                                   >> 565 Snapshot mode captures the available data when a signal is sent e.g.
                                                   >> 566 
                                                   >> 567         perf record -v -e intel_pt//u -S ./loopy 1000000000 &
                                                   >> 568         [1] 11435
                                                   >> 569         kill -USR2 11435
                                                   >> 570         Recording AUX area tracing snapshot
                                                   >> 571 
                                                   >> 572 Note that the signal sent is SIGUSR2.
                                                   >> 573 Note that "Recording AUX area tracing snapshot" is displayed because the -v
                                                   >> 574 option is used.
                                                   >> 575 
                                                   >> 576 The 2 modes cannot be used together.
                                                   >> 577 
                                                   >> 578 
                                                   >> 579 Buffer handling
                                                   >> 580 ---------------
                                                   >> 581 
                                                   >> 582 There may be buffer limitations (i.e. single ToPa entry) which means that actual
                                                   >> 583 buffer sizes are limited to powers of 2 up to 4MiB (MAX_ORDER).  In order to
                                                   >> 584 provide other sizes, and in particular an arbitrarily large size, multiple
                                                   >> 585 buffers are logically concatenated.  However an interrupt must be used to switch
                                                   >> 586 between buffers.  That has two potential problems:
                                                   >> 587         a) the interrupt may not be handled in time so that the current buffer
                                                   >> 588         becomes full and some trace data is lost.
                                                   >> 589         b) the interrupts may slow the system and affect the performance
                                                   >> 590         results.
                                                   >> 591 
                                                   >> 592 If trace data is lost, the driver sets 'truncated' in the PERF_RECORD_AUX event
                                                   >> 593 which the tools report as an error.
                                                   >> 594 
                                                   >> 595 In full-trace mode, the driver waits for data to be copied out before allowing
                                                   >> 596 the (logical) buffer to wrap-around.  If data is not copied out quickly enough,
                                                   >> 597 again 'truncated' is set in the PERF_RECORD_AUX event.  If the driver has to
                                                   >> 598 wait, the intel_pt event gets disabled.  Because it is difficult to know when
                                                   >> 599 that happens, perf tools always re-enable the intel_pt event after copying out
                                                   >> 600 data.
                                                   >> 601 
                                                   >> 602 
                                                   >> 603 Intel PT and build ids
                                                   >> 604 ----------------------
                                                   >> 605 
                                                   >> 606 By default "perf record" post-processes the event stream to find all build ids
                                                   >> 607 for executables for all addresses sampled.  Deliberately, Intel PT is not
                                                   >> 608 decoded for that purpose (it would take too long).  Instead the build ids for
                                                   >> 609 all executables encountered (due to mmap, comm or task events) are included
                                                   >> 610 in the perf.data file.
                                                   >> 611 
                                                   >> 612 To see buildids included in the perf.data file use the command:
                                                   >> 613 
                                                   >> 614         perf buildid-list
                                                   >> 615 
                                                   >> 616 If the perf.data file contains Intel PT data, that is the same as:
                                                   >> 617 
                                                   >> 618         perf buildid-list --with-hits
                                                   >> 619 
                                                   >> 620 
                                                   >> 621 Snapshot mode and event disabling
                                                   >> 622 ---------------------------------
                                                   >> 623 
                                                   >> 624 In order to make a snapshot, the intel_pt event is disabled using an IOCTL,
                                                   >> 625 namely PERF_EVENT_IOC_DISABLE.  However doing that can also disable the
                                                   >> 626 collection of side-band information.  In order to prevent that,  a dummy
                                                   >> 627 software event has been introduced that permits tracking events (like mmaps) to
                                                   >> 628 continue to be recorded while intel_pt is disabled.  That is important to ensure
                                                   >> 629 there is complete side-band information to allow the decoding of subsequent
                                                   >> 630 snapshots.
                                                   >> 631 
                                                   >> 632 A test has been created for that.  To find the test:
                                                   >> 633 
                                                   >> 634         perf test list
                                                   >> 635         ...
                                                   >> 636         23: Test using a dummy software event to keep tracking
                                                   >> 637 
                                                   >> 638 To run the test:
                                                   >> 639 
                                                   >> 640         perf test 23
                                                   >> 641         23: Test using a dummy software event to keep tracking     : Ok
                                                   >> 642 
                                                   >> 643 
                                                   >> 644 perf record modes (nothing new here)
                                                   >> 645 ------------------------------------
                                                   >> 646 
                                                   >> 647 perf record essentially operates in one of three modes:
                                                   >> 648         per thread
                                                   >> 649         per cpu
                                                   >> 650         workload only
                                                   >> 651 
                                                   >> 652 "per thread" mode is selected by -t or by --per-thread (with -p or -u or just a
                                                   >> 653 workload).
                                                   >> 654 "per cpu" is selected by -C or -a.
                                                   >> 655 "workload only" mode is selected by not using the other options but providing a
                                                   >> 656 command to run (i.e. the workload).
                                                   >> 657 
                                                   >> 658 In per-thread mode an exact list of threads is traced.  There is no inheritance.
                                                   >> 659 Each thread has its own event buffer.
                                                   >> 660 
                                                   >> 661 In per-cpu mode all processes (or processes from the selected cgroup i.e. -G
                                                   >> 662 option, or processes selected with -p or -u) are traced.  Each cpu has its own
                                                   >> 663 buffer. Inheritance is allowed.
                                                   >> 664 
                                                   >> 665 In workload-only mode, the workload is traced but with per-cpu buffers.
                                                   >> 666 Inheritance is allowed.  Note that you can now trace a workload in per-thread
                                                   >> 667 mode by using the --per-thread option.
                                                   >> 668 
                                                   >> 669 
                                                   >> 670 Privileged vs non-privileged users
                                                   >> 671 ----------------------------------
                                                   >> 672 
                                                   >> 673 Unless /proc/sys/kernel/perf_event_paranoid is set to -1, unprivileged users
                                                   >> 674 have memory limits imposed upon them.  That affects what buffer sizes they can
                                                   >> 675 have as outlined above.
                                                   >> 676 
                                                   >> 677 The v4.2 kernel introduced support for a context switch metadata event,
                                                   >> 678 PERF_RECORD_SWITCH, which allows unprivileged users to see when their processes
                                                   >> 679 are scheduled out and in, just not by whom, which is left for the
                                                   >> 680 PERF_RECORD_SWITCH_CPU_WIDE, that is only accessible in system wide context,
                                                   >> 681 which in turn requires CAP_SYS_ADMIN.
                                                   >> 682 
                                                   >> 683 Please see the 45ac1403f564 ("perf: Add PERF_RECORD_SWITCH to indicate context
                                                   >> 684 switches") commit, that introduces these metadata events for further info.
                                                   >> 685 
                                                   >> 686 When working with kernels < v4.2, the following considerations must be taken,
                                                   >> 687 as the sched:sched_switch tracepoints will be used to receive such information:
                                                   >> 688 
                                                   >> 689 Unless /proc/sys/kernel/perf_event_paranoid is set to -1, unprivileged users are
                                                   >> 690 not permitted to use tracepoints which means there is insufficient side-band
                                                   >> 691 information to decode Intel PT in per-cpu mode, and potentially workload-only
                                                   >> 692 mode too if the workload creates new processes.
                                                   >> 693 
                                                   >> 694 Note also, that to use tracepoints, read-access to debugfs is required.  So if
                                                   >> 695 debugfs is not mounted or the user does not have read-access, it will again not
                                                   >> 696 be possible to decode Intel PT in per-cpu mode.
                                                   >> 697 
                                                   >> 698 
                                                   >> 699 sched_switch tracepoint
                                                   >> 700 -----------------------
                                                   >> 701 
                                                   >> 702 The sched_switch tracepoint is used to provide side-band data for Intel PT
                                                   >> 703 decoding in kernels where the PERF_RECORD_SWITCH metadata event isn't
                                                   >> 704 available.
                                                   >> 705 
                                                   >> 706 The sched_switch events are automatically added. e.g. the second event shown
                                                   >> 707 below:
                                                   >> 708 
                                                   >> 709         $ perf record -vv -e intel_pt//u uname
                                                   >> 710         ------------------------------------------------------------
                                                   >> 711         perf_event_attr:
                                                   >> 712         type                             6
                                                   >> 713         size                             112
                                                   >> 714         config                           0x400
                                                   >> 715         { sample_period, sample_freq }   1
                                                   >> 716         sample_type                      IP|TID|TIME|CPU|IDENTIFIER
                                                   >> 717         read_format                      ID
                                                   >> 718         disabled                         1
                                                   >> 719         inherit                          1
                                                   >> 720         exclude_kernel                   1
                                                   >> 721         exclude_hv                       1
                                                   >> 722         enable_on_exec                   1
                                                   >> 723         sample_id_all                    1
                                                   >> 724         ------------------------------------------------------------
                                                   >> 725         sys_perf_event_open: pid 31104  cpu 0  group_fd -1  flags 0x8
                                                   >> 726         sys_perf_event_open: pid 31104  cpu 1  group_fd -1  flags 0x8
                                                   >> 727         sys_perf_event_open: pid 31104  cpu 2  group_fd -1  flags 0x8
                                                   >> 728         sys_perf_event_open: pid 31104  cpu 3  group_fd -1  flags 0x8
                                                   >> 729         ------------------------------------------------------------
                                                   >> 730         perf_event_attr:
                                                   >> 731         type                             2
                                                   >> 732         size                             112
                                                   >> 733         config                           0x108
                                                   >> 734         { sample_period, sample_freq }   1
                                                   >> 735         sample_type                      IP|TID|TIME|CPU|PERIOD|RAW|IDENTIFIER
                                                   >> 736         read_format                      ID
                                                   >> 737         inherit                          1
                                                   >> 738         sample_id_all                    1
                                                   >> 739         exclude_guest                    1
                                                   >> 740         ------------------------------------------------------------
                                                   >> 741         sys_perf_event_open: pid -1  cpu 0  group_fd -1  flags 0x8
                                                   >> 742         sys_perf_event_open: pid -1  cpu 1  group_fd -1  flags 0x8
                                                   >> 743         sys_perf_event_open: pid -1  cpu 2  group_fd -1  flags 0x8
                                                   >> 744         sys_perf_event_open: pid -1  cpu 3  group_fd -1  flags 0x8
                                                   >> 745         ------------------------------------------------------------
                                                   >> 746         perf_event_attr:
                                                   >> 747         type                             1
                                                   >> 748         size                             112
                                                   >> 749         config                           0x9
                                                   >> 750         { sample_period, sample_freq }   1
                                                   >> 751         sample_type                      IP|TID|TIME|IDENTIFIER
                                                   >> 752         read_format                      ID
                                                   >> 753         disabled                         1
                                                   >> 754         inherit                          1
                                                   >> 755         exclude_kernel                   1
                                                   >> 756         exclude_hv                       1
                                                   >> 757         mmap                             1
                                                   >> 758         comm                             1
                                                   >> 759         enable_on_exec                   1
                                                   >> 760         task                             1
                                                   >> 761         sample_id_all                    1
                                                   >> 762         mmap2                            1
                                                   >> 763         comm_exec                        1
                                                   >> 764         ------------------------------------------------------------
                                                   >> 765         sys_perf_event_open: pid 31104  cpu 0  group_fd -1  flags 0x8
                                                   >> 766         sys_perf_event_open: pid 31104  cpu 1  group_fd -1  flags 0x8
                                                   >> 767         sys_perf_event_open: pid 31104  cpu 2  group_fd -1  flags 0x8
                                                   >> 768         sys_perf_event_open: pid 31104  cpu 3  group_fd -1  flags 0x8
                                                   >> 769         mmap size 528384B
                                                   >> 770         AUX area mmap length 4194304
                                                   >> 771         perf event ring buffer mmapped per cpu
                                                   >> 772         Synthesizing auxtrace information
                                                   >> 773         Linux
                                                   >> 774         [ perf record: Woken up 1 times to write data ]
                                                   >> 775         [ perf record: Captured and wrote 0.042 MB perf.data ]
                                                   >> 776 
                                                   >> 777 Note, the sched_switch event is only added if the user is permitted to use it
                                                   >> 778 and only in per-cpu mode.
                                                   >> 779 
                                                   >> 780 Note also, the sched_switch event is only added if TSC packets are requested.
                                                   >> 781 That is because, in the absence of timing information, the sched_switch events
                                                   >> 782 cannot be matched against the Intel PT trace.
                                                   >> 783 
                                                   >> 784 
                                                   >> 785 perf script
                                                   >> 786 ===========
                                                   >> 787 
                                                   >> 788 By default, perf script will decode trace data found in the perf.data file.
                                                   >> 789 This can be further controlled by new option --itrace.
                                                   >> 790 
                                                   >> 791 
                                                   >> 792 New --itrace option
                                                   >> 793 -------------------
                                                   >> 794 
                                                   >> 795 Having no option is the same as
                                                   >> 796 
                                                   >> 797         --itrace
                                                   >> 798 
                                                   >> 799 which, in turn, is the same as
                                                   >> 800 
                                                   >> 801         --itrace=cepwx
                                                   >> 802 
                                                   >> 803 The letters are:
                                                   >> 804 
                                                   >> 805         i       synthesize "instructions" events
                                                   >> 806         b       synthesize "branches" events
                                                   >> 807         x       synthesize "transactions" events
                                                   >> 808         w       synthesize "ptwrite" events
                                                   >> 809         p       synthesize "power" events
                                                   >> 810         c       synthesize branches events (calls only)
                                                   >> 811         r       synthesize branches events (returns only)
                                                   >> 812         e       synthesize tracing error events
                                                   >> 813         d       create a debug log
                                                   >> 814         g       synthesize a call chain (use with i or x)
                                                   >> 815         l       synthesize last branch entries (use with i or x)
                                                   >> 816         s       skip initial number of events
                                                   >> 817 
                                                   >> 818 "Instructions" events look like they were recorded by "perf record -e
                                                   >> 819 instructions".
                                                   >> 820 
                                                   >> 821 "Branches" events look like they were recorded by "perf record -e branches". "c"
                                                   >> 822 and "r" can be combined to get calls and returns.
                                                   >> 823 
                                                   >> 824 "Transactions" events correspond to the start or end of transactions. The
                                                   >> 825 'flags' field can be used in perf script to determine whether the event is a
                                                   >> 826 tranasaction start, commit or abort.
                                                   >> 827 
                                                   >> 828 Note that "instructions", "branches" and "transactions" events depend on code
                                                   >> 829 flow packets which can be disabled by using the config term "branch=0".  Refer
                                                   >> 830 to the config terms section above.
                                                   >> 831 
                                                   >> 832 "ptwrite" events record the payload of the ptwrite instruction and whether
                                                   >> 833 "fup_on_ptw" was used.  "ptwrite" events depend on PTWRITE packets which are
                                                   >> 834 recorded only if the "ptw" config term was used.  Refer to the config terms
                                                   >> 835 section above.  perf script "synth" field displays "ptwrite" information like
                                                   >> 836 this: "ip: 0 payload: 0x123456789abcdef0"  where "ip" is 1 if "fup_on_ptw" was
                                                   >> 837 used.
                                                   >> 838 
                                                   >> 839 "Power" events correspond to power event packets and CBR (core-to-bus ratio)
                                                   >> 840 packets.  While CBR packets are always recorded when tracing is enabled, power
                                                   >> 841 event packets are recorded only if the "pwr_evt" config term was used.  Refer to
                                                   >> 842 the config terms section above.  The power events record information about
                                                   >> 843 C-state changes, whereas CBR is indicative of CPU frequency.  perf script
                                                   >> 844 "event,synth" fields display information like this:
                                                   >> 845         cbr:  cbr: 22 freq: 2189 MHz (200%)
                                                   >> 846         mwait:  hints: 0x60 extensions: 0x1
                                                   >> 847         pwre:  hw: 0 cstate: 2 sub-cstate: 0
                                                   >> 848         exstop:  ip: 1
                                                   >> 849         pwrx:  deepest cstate: 2 last cstate: 2 wake reason: 0x4
                                                   >> 850 Where:
                                                   >> 851         "cbr" includes the frequency and the percentage of maximum non-turbo
                                                   >> 852         "mwait" shows mwait hints and extensions
                                                   >> 853         "pwre" shows C-state transitions (to a C-state deeper than C0) and
                                                   >> 854         whether initiated by hardware
                                                   >> 855         "exstop" indicates execution stopped and whether the IP was recorded
                                                   >> 856         exactly,
                                                   >> 857         "pwrx" indicates return to C0
                                                   >> 858 For more details refer to the Intel 64 and IA-32 Architectures Software
                                                   >> 859 Developer Manuals.
                                                   >> 860 
                                                   >> 861 Error events show where the decoder lost the trace.  Error events
                                                   >> 862 are quite important.  Users must know if what they are seeing is a complete
                                                   >> 863 picture or not.
                                                   >> 864 
                                                   >> 865 The "d" option will cause the creation of a file "intel_pt.log" containing all
                                                   >> 866 decoded packets and instructions.  Note that this option slows down the decoder
                                                   >> 867 and that the resulting file may be very large.
                                                   >> 868 
                                                   >> 869 In addition, the period of the "instructions" event can be specified. e.g.
                                                   >> 870 
                                                   >> 871         --itrace=i10us
                                                   >> 872 
                                                   >> 873 sets the period to 10us i.e. one  instruction sample is synthesized for each 10
                                                   >> 874 microseconds of trace.  Alternatives to "us" are "ms" (milliseconds),
                                                   >> 875 "ns" (nanoseconds), "t" (TSC ticks) or "i" (instructions).
                                                   >> 876 
                                                   >> 877 "ms", "us" and "ns" are converted to TSC ticks.
                                                   >> 878 
                                                   >> 879 The timing information included with Intel PT does not give the time of every
                                                   >> 880 instruction.  Consequently, for the purpose of sampling, the decoder estimates
                                                   >> 881 the time since the last timing packet based on 1 tick per instruction.  The time
                                                   >> 882 on the sample is *not* adjusted and reflects the last known value of TSC.
                                                   >> 883 
                                                   >> 884 For Intel PT, the default period is 100us.
                                                   >> 885 
                                                   >> 886 Setting it to a zero period means "as often as possible".
                                                   >> 887 
                                                   >> 888 In the case of Intel PT that is the same as a period of 1 and a unit of
                                                   >> 889 'instructions' (i.e. --itrace=i1i).
                                                   >> 890 
                                                   >> 891 Also the call chain size (default 16, max. 1024) for instructions or
                                                   >> 892 transactions events can be specified. e.g.
                                                   >> 893 
                                                   >> 894         --itrace=ig32
                                                   >> 895         --itrace=xg32
                                                   >> 896 
                                                   >> 897 Also the number of last branch entries (default 64, max. 1024) for instructions or
                                                   >> 898 transactions events can be specified. e.g.
                                                   >> 899 
                                                   >> 900        --itrace=il10
                                                   >> 901        --itrace=xl10
                                                   >> 902 
                                                   >> 903 Note that last branch entries are cleared for each sample, so there is no overlap
                                                   >> 904 from one sample to the next.
                                                   >> 905 
                                                   >> 906 To disable trace decoding entirely, use the option --no-itrace.
                                                   >> 907 
                                                   >> 908 It is also possible to skip events generated (instructions, branches, transactions)
                                                   >> 909 at the beginning. This is useful to ignore initialization code.
                                                   >> 910 
                                                   >> 911         --itrace=i0nss1000000
                                                   >> 912 
                                                   >> 913 skips the first million instructions.
                                                   >> 914 
                                                   >> 915 dump option
                                                   >> 916 -----------
                                                   >> 917 
                                                   >> 918 perf script has an option (-D) to "dump" the events i.e. display the binary
                                                   >> 919 data.
                                                   >> 920 
                                                   >> 921 When -D is used, Intel PT packets are displayed.  The packet decoder does not
                                                   >> 922 pay attention to PSB packets, but just decodes the bytes - so the packets seen
                                                   >> 923 by the actual decoder may not be identical in places where the data is corrupt.
                                                   >> 924 One example of that would be when the buffer-switching interrupt has been too
                                                   >> 925 slow, and the buffer has been filled completely.  In that case, the last packet
                                                   >> 926 in the buffer might be truncated and immediately followed by a PSB as the trace
                                                   >> 927 continues in the next buffer.
                                                   >> 928 
                                                   >> 929 To disable the display of Intel PT packets, combine the -D option with
                                                   >> 930 --no-itrace.
                                                   >> 931 
                                                   >> 932 
                                                   >> 933 perf report
                                                   >> 934 ===========
                                                   >> 935 
                                                   >> 936 By default, perf report will decode trace data found in the perf.data file.
                                                   >> 937 This can be further controlled by new option --itrace exactly the same as
                                                   >> 938 perf script, with the exception that the default is --itrace=igxe.
                                                   >> 939 
                                                   >> 940 
                                                   >> 941 perf inject
                                                   >> 942 ===========
                                                   >> 943 
                                                   >> 944 perf inject also accepts the --itrace option in which case tracing data is
                                                   >> 945 removed and replaced with the synthesized events. e.g.
                                                   >> 946 
                                                   >> 947         perf inject --itrace -i perf.data -o perf.data.new
                                                   >> 948 
                                                   >> 949 Below is an example of using Intel PT with autofdo.  It requires autofdo
                                                   >> 950 (https://github.com/google/autofdo) and gcc version 5.  The bubble
                                                   >> 951 sort example is from the AutoFDO tutorial (https://gcc.gnu.org/wiki/AutoFDO/Tutorial)
                                                   >> 952 amended to take the number of elements as a parameter.
                                                   >> 953 
                                                   >> 954         $ gcc-5 -O3 sort.c -o sort_optimized
                                                   >> 955         $ ./sort_optimized 30000
                                                   >> 956         Bubble sorting array of 30000 elements
                                                   >> 957         2254 ms
                                                   >> 958 
                                                   >> 959         $ cat ~/.perfconfig
                                                   >> 960         [intel-pt]
                                                   >> 961                 mispred-all = on
                                                   >> 962 
                                                   >> 963         $ perf record -e intel_pt//u ./sort 3000
                                                   >> 964         Bubble sorting array of 3000 elements
                                                   >> 965         58 ms
                                                   >> 966         [ perf record: Woken up 2 times to write data ]
                                                   >> 967         [ perf record: Captured and wrote 3.939 MB perf.data ]
                                                   >> 968         $ perf inject -i perf.data -o inj --itrace=i100usle --strip
                                                   >> 969         $ ./create_gcov --binary=./sort --profile=inj --gcov=sort.gcov -gcov_version=1
                                                   >> 970         $ gcc-5 -O3 -fauto-profile=sort.gcov sort.c -o sort_autofdo
                                                   >> 971         $ ./sort_autofdo 30000
                                                   >> 972         Bubble sorting array of 30000 elements
                                                   >> 973         2155 ms
                                                   >> 974 
                                                   >> 975 Note there is currently no advantage to using Intel PT instead of LBR, but
                                                   >> 976 that may change in the future if greater use is made of the data.
                                                   >> 977 
                                                   >> 978 
                                                   >> 979 PEBS via Intel PT
                                                   >> 980 =================
                                                   >> 981 
                                                   >> 982 Some hardware has the feature to redirect PEBS records to the Intel PT trace.
                                                   >> 983 Recording is selected by using the aux-output config term e.g.
                                                   >> 984 
                                                   >> 985         perf record -c 10000 -e '{intel_pt/branch=0/,cycles/aux-output/ppp}' uname
                                                   >> 986 
                                                   >> 987 Note that currently, software only supports redirecting at most one PEBS event.
                                                   >> 988 
                                                   >> 989 To display PEBS events from the Intel PT trace, use the itrace 'o' option e.g.
                                                   >> 990 
                                                   >> 991         perf script --itrace=oe
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php