Thomas Gleixner | 386b05e | 2009-06-06 14:56:33 +0200 | [diff] [blame] | 1 | perf-list(1) |
Ingo Molnar | 6e6b754 | 2008-04-15 22:39:31 +0200 | [diff] [blame] | 2 | ============ |
Thomas Gleixner | 386b05e | 2009-06-06 14:56:33 +0200 | [diff] [blame] | 3 | |
| 4 | NAME |
| 5 | ---- |
| 6 | perf-list - List all symbolic event types |
| 7 | |
| 8 | SYNOPSIS |
| 9 | -------- |
| 10 | [verse] |
Andi Kleen | 71b0acc | 2017-08-31 12:40:32 -0700 | [diff] [blame] | 11 | 'perf list' [--no-desc] [--long-desc] |
| 12 | [hw|sw|cache|tracepoint|pmu|sdt|metric|metricgroup|event_glob] |
Thomas Gleixner | 386b05e | 2009-06-06 14:56:33 +0200 | [diff] [blame] | 13 | |
| 14 | DESCRIPTION |
| 15 | ----------- |
| 16 | This command displays the symbolic event types which can be selected in the |
| 17 | various perf commands with the -e option. |
| 18 | |
Andi Kleen | 1c5f01f | 2016-09-15 15:24:45 -0700 | [diff] [blame] | 19 | OPTIONS |
| 20 | ------- |
Sangwon Hong | 6feb3fe | 2018-07-17 20:07:38 +0900 | [diff] [blame] | 21 | -d:: |
| 22 | --desc:: |
| 23 | Print extra event descriptions. (default) |
| 24 | |
Andi Kleen | 1c5f01f | 2016-09-15 15:24:45 -0700 | [diff] [blame] | 25 | --no-desc:: |
| 26 | Don't print descriptions. |
| 27 | |
Sukadev Bhattiprolu | c8d6828 | 2016-09-15 15:24:48 -0700 | [diff] [blame] | 28 | -v:: |
| 29 | --long-desc:: |
| 30 | Print longer event descriptions. |
| 31 | |
Sangwon Hong | 6feb3fe | 2018-07-17 20:07:38 +0900 | [diff] [blame] | 32 | --debug:: |
| 33 | Enable debugging output. |
| 34 | |
Andi Kleen | bf874fc | 2017-03-20 13:17:11 -0700 | [diff] [blame] | 35 | --details:: |
| 36 | Print how named events are resolved internally into perf events, and also |
| 37 | any extra expressions computed by perf stat. |
| 38 | |
Jin Yao | a7f6c8c | 2019-10-15 10:53:57 +0800 | [diff] [blame] | 39 | --deprecated:: |
| 40 | Print deprecated events. By default the deprecated events are hidden. |
| 41 | |
Jin Yao | 0e0ae87 | 2021-09-03 10:52:39 +0800 | [diff] [blame] | 42 | --cputype:: |
| 43 | Print events applying cpu with this type for hybrid platform |
| 44 | (e.g. --cputype core or --cputype atom) |
| 45 | |
Robert Richter | 75bc5ca | 2012-08-07 19:43:15 +0200 | [diff] [blame] | 46 | [[EVENT_MODIFIERS]] |
Sonny Rao | ffec516 | 2010-10-14 20:51:00 -0500 | [diff] [blame] | 47 | EVENT MODIFIERS |
| 48 | --------------- |
| 49 | |
Masanari Iida | 96355f2 | 2014-09-10 00:18:50 +0900 | [diff] [blame] | 50 | Events can optionally have a modifier by appending a colon and one or |
Robert Richter | 2055fda | 2012-08-07 19:43:16 +0200 | [diff] [blame] | 51 | more modifiers. Modifiers allow the user to restrict the events to be |
| 52 | counted. The following modifiers exist: |
| 53 | |
| 54 | u - user-space counting |
| 55 | k - kernel counting |
| 56 | h - hypervisor counting |
Jiri Olsa | a1e12da | 2015-04-07 23:25:14 +0200 | [diff] [blame] | 57 | I - non idle counting |
Robert Richter | 2055fda | 2012-08-07 19:43:16 +0200 | [diff] [blame] | 58 | G - guest counting (in KVM guests) |
| 59 | H - host counting (not in KVM guests) |
| 60 | p - precise level |
Jiri Olsa | 7f94af7 | 2015-10-05 20:06:05 +0200 | [diff] [blame] | 61 | P - use maximum detected precise level |
Jiri Olsa | 3c17631 | 2012-10-10 17:39:03 +0200 | [diff] [blame] | 62 | S - read sample value (PERF_SAMPLE_READ) |
Michael Ellerman | e9a7c41 | 2013-08-06 23:28:05 +1000 | [diff] [blame] | 63 | D - pin the event to the PMU |
Andi Kleen | 5a5dfe4 | 2017-08-31 12:40:26 -0700 | [diff] [blame] | 64 | W - group is weak and will fallback to non-group if not schedulable, |
Andi Kleen | 0997a26 | 2020-10-14 07:42:55 -0700 | [diff] [blame] | 65 | e - group or event are exclusive and do not share the PMU |
Sonny Rao | ffec516 | 2010-10-14 20:51:00 -0500 | [diff] [blame] | 66 | |
| 67 | The 'p' modifier can be used for specifying how precise the instruction |
Robert Richter | 2055fda | 2012-08-07 19:43:16 +0200 | [diff] [blame] | 68 | address should be. The 'p' modifier can be specified multiple times: |
Sonny Rao | ffec516 | 2010-10-14 20:51:00 -0500 | [diff] [blame] | 69 | |
Robert Richter | 2055fda | 2012-08-07 19:43:16 +0200 | [diff] [blame] | 70 | 0 - SAMPLE_IP can have arbitrary skid |
| 71 | 1 - SAMPLE_IP must have constant skid |
| 72 | 2 - SAMPLE_IP requested to have 0 skid |
Andi Kleen | 4ca0d81 | 2016-03-21 08:56:33 -0700 | [diff] [blame] | 73 | 3 - SAMPLE_IP must have 0 skid, or uses randomization to avoid |
| 74 | sample shadowing effects. |
Robert Richter | 2055fda | 2012-08-07 19:43:16 +0200 | [diff] [blame] | 75 | |
| 76 | For Intel systems precise event sampling is implemented with PEBS |
Andi Kleen | 4ca0d81 | 2016-03-21 08:56:33 -0700 | [diff] [blame] | 77 | which supports up to precise-level 2, and precise level 3 for |
| 78 | some special cases |
Robert Richter | 2055fda | 2012-08-07 19:43:16 +0200 | [diff] [blame] | 79 | |
| 80 | On AMD systems it is implemented using IBS (up to precise-level 2). |
| 81 | The precise modifier works with event types 0x76 (cpu-cycles, CPU |
| 82 | clocks not halted) and 0xC1 (micro-ops retired). Both events map to |
| 83 | IBS execution sampling (IBS op) with the IBS Op Counter Control bit |
Sandipan Das | 7a2e149 | 2021-11-23 14:16:13 +0530 | [diff] [blame] | 84 | (IbsOpCntCtl) set respectively (see the |
| 85 | Core Complex (CCX) -> Processor x86 Core -> Instruction Based Sampling (IBS) |
| 86 | section of the [AMD Processor Programming Reference (PPR)] relevant to the |
| 87 | family, model and stepping of the processor being used). |
| 88 | |
Robert Richter | 2055fda | 2012-08-07 19:43:16 +0200 | [diff] [blame] | 89 | Manual Volume 2: System Programming, 13.3 Instruction-Based |
| 90 | Sampling). Examples to use IBS: |
| 91 | |
| 92 | perf record -a -e cpu-cycles:p ... # use ibs op counting cycles |
| 93 | perf record -a -e r076:p ... # same as -e cpu-cycles:p |
| 94 | perf record -a -e r0C1:p ... # use ibs op counting micro-ops |
Sonny Rao | ffec516 | 2010-10-14 20:51:00 -0500 | [diff] [blame] | 95 | |
Arnaldo Carvalho de Melo | 9e32a3c | 2010-05-05 11:20:05 -0300 | [diff] [blame] | 96 | RAW HARDWARE EVENT DESCRIPTOR |
| 97 | ----------------------------- |
| 98 | Even when an event is not available in a symbolic form within perf right now, |
Arnaldo Carvalho de Melo | 1cf4a06 | 2010-05-07 14:07:05 -0300 | [diff] [blame] | 99 | it can be encoded in a per processor specific way. |
| 100 | |
Sandipan Das | 4edb117 | 2021-11-23 14:16:12 +0530 | [diff] [blame] | 101 | For instance on x86 CPUs, N is a hexadecimal value that represents the raw register encoding with the |
Arnaldo Carvalho de Melo | 1cf4a06 | 2010-05-07 14:07:05 -0300 | [diff] [blame] | 102 | layout of IA32_PERFEVTSELx MSRs (see [IntelĀ® 64 and IA-32 Architectures Software Developer's Manual Volume 3B: System Programming Guide] Figure 30-1 Layout |
Sandipan Das | 7a2e149 | 2021-11-23 14:16:13 +0530 | [diff] [blame] | 103 | of IA32_PERFEVTSELx MSRs) or AMD's PERF_CTL MSRs (see the |
| 104 | Core Complex (CCX) -> Processor x86 Core -> MSR Registers section of the |
| 105 | [AMD Processor Programming Reference (PPR)] relevant to the family, model |
| 106 | and stepping of the processor being used). |
Arnaldo Carvalho de Melo | 1cf4a06 | 2010-05-07 14:07:05 -0300 | [diff] [blame] | 107 | |
Robert Richter | 75bc5ca | 2012-08-07 19:43:15 +0200 | [diff] [blame] | 108 | Note: Only the following bit fields can be set in x86 counter |
| 109 | registers: event, umask, edge, inv, cmask. Esp. guest/host only and |
| 110 | OS/user mode flags must be setup using <<EVENT_MODIFIERS, EVENT |
| 111 | MODIFIERS>>. |
| 112 | |
Arnaldo Carvalho de Melo | 1cf4a06 | 2010-05-07 14:07:05 -0300 | [diff] [blame] | 113 | Example: |
| 114 | |
| 115 | If the Intel docs for a QM720 Core i7 describe an event as: |
Arnaldo Carvalho de Melo | 9e32a3c | 2010-05-05 11:20:05 -0300 | [diff] [blame] | 116 | |
| 117 | Event Umask Event Mask |
| 118 | Num. Value Mnemonic Description Comment |
| 119 | |
| 120 | A8H 01H LSD.UOPS Counts the number of micro-ops Use cmask=1 and |
| 121 | delivered by loop stream detector invert to count |
| 122 | cycles |
| 123 | |
| 124 | raw encoding of 0x1A8 can be used: |
| 125 | |
| 126 | perf stat -e r1a8 -a sleep 1 |
| 127 | perf record -e r1a8 ... |
| 128 | |
Jiri Olsa | 3a6c51e | 2020-04-17 00:14:05 +0200 | [diff] [blame] | 129 | It's also possible to use pmu syntax: |
| 130 | |
| 131 | perf record -e r1a8 -a sleep 1 |
| 132 | perf record -e cpu/r1a8/ ... |
Jiri Olsa | c33cdf5 | 2020-07-25 14:19:58 +0200 | [diff] [blame] | 133 | perf record -e cpu/r0x1a8/ ... |
Jiri Olsa | 3a6c51e | 2020-04-17 00:14:05 +0200 | [diff] [blame] | 134 | |
Sandipan Das | 4edb117 | 2021-11-23 14:16:12 +0530 | [diff] [blame] | 135 | Some processors, like those from AMD, support event codes and unit masks |
| 136 | larger than a byte. In such cases, the bits corresponding to the event |
| 137 | configuration parameters can be seen with: |
| 138 | |
| 139 | cat /sys/bus/event_source/devices/<pmu>/format/<config> |
| 140 | |
| 141 | Example: |
| 142 | |
| 143 | If the AMD docs for an EPYC 7713 processor describe an event as: |
| 144 | |
| 145 | Event Umask Event Mask |
| 146 | Num. Value Mnemonic Description |
| 147 | |
| 148 | 28FH 03H op_cache_hit_miss.op_cache_hit Counts Op Cache micro-tag |
| 149 | hit events. |
| 150 | |
| 151 | raw encoding of 0x0328F cannot be used since the upper nibble of the |
| 152 | EventSelect bits have to be specified via bits 32-35 as can be seen with: |
| 153 | |
| 154 | cat /sys/bus/event_source/devices/cpu/format/event |
| 155 | |
| 156 | raw encoding of 0x20000038F should be used instead: |
| 157 | |
| 158 | perf stat -e r20000038f -a sleep 1 |
| 159 | perf record -e r20000038f ... |
| 160 | |
| 161 | It's also possible to use pmu syntax: |
| 162 | |
| 163 | perf record -e r20000038f -a sleep 1 |
| 164 | perf record -e cpu/r20000038f/ ... |
| 165 | perf record -e cpu/r0x20000038f/ ... |
| 166 | |
Arnaldo Carvalho de Melo | 1cf4a06 | 2010-05-07 14:07:05 -0300 | [diff] [blame] | 167 | You should refer to the processor specific documentation for getting these |
| 168 | details. Some of them are referenced in the SEE ALSO section below. |
| 169 | |
Andi Kleen | 85f8f96 | 2016-04-04 15:58:06 -0700 | [diff] [blame] | 170 | ARBITRARY PMUS |
| 171 | -------------- |
| 172 | |
| 173 | perf also supports an extended syntax for specifying raw parameters |
| 174 | to PMUs. Using this typically requires looking up the specific event |
| 175 | in the CPU vendor specific documentation. |
| 176 | |
| 177 | The available PMUs and their raw parameters can be listed with |
| 178 | |
| 179 | ls /sys/devices/*/format |
| 180 | |
| 181 | For example the raw event "LSD.UOPS" core pmu event above could |
| 182 | be specified as |
| 183 | |
Alexey Budankov | f92da71 | 2018-06-04 09:50:56 +0300 | [diff] [blame] | 184 | perf stat -e cpu/event=0xa8,umask=0x1,name=LSD.UOPS_CYCLES,cmask=0x1/ ... |
| 185 | |
| 186 | or using extended name syntax |
| 187 | |
| 188 | perf stat -e cpu/event=0xa8,umask=0x1,cmask=0x1,name=\'LSD.UOPS_CYCLES:cmask=0x1\'/ ... |
Andi Kleen | 85f8f96 | 2016-04-04 15:58:06 -0700 | [diff] [blame] | 189 | |
| 190 | PER SOCKET PMUS |
| 191 | --------------- |
| 192 | |
| 193 | Some PMUs are not associated with a core, but with a whole CPU socket. |
| 194 | Events on these PMUs generally cannot be sampled, but only counted globally |
| 195 | with perf stat -a. They can be bound to one logical CPU, but will measure |
| 196 | all the CPUs in the same socket. |
| 197 | |
| 198 | This example measures memory bandwidth every second |
| 199 | on the first memory controller on socket 0 of a Intel Xeon system |
| 200 | |
| 201 | perf stat -C 0 -a uncore_imc_0/cas_count_read/,uncore_imc_0/cas_count_write/ -I 1000 ... |
| 202 | |
| 203 | Each memory controller has its own PMU. Measuring the complete system |
| 204 | bandwidth would require specifying all imc PMUs (see perf list output), |
Agustin Vega-Frias | b2b9d3a | 2018-03-06 09:04:42 -0500 | [diff] [blame] | 205 | and adding the values together. To simplify creation of multiple events, |
| 206 | prefix and glob matching is supported in the PMU name, and the prefix |
| 207 | 'uncore_' is also ignored when performing the match. So the command above |
| 208 | can be expanded to all memory controllers by using the syntaxes: |
| 209 | |
| 210 | perf stat -C 0 -a imc/cas_count_read/,imc/cas_count_write/ -I 1000 ... |
| 211 | perf stat -C 0 -a *imc*/cas_count_read/,*imc*/cas_count_write/ -I 1000 ... |
Andi Kleen | 85f8f96 | 2016-04-04 15:58:06 -0700 | [diff] [blame] | 212 | |
| 213 | This example measures the combined core power every second |
| 214 | |
| 215 | perf stat -I 1000 -e power/energy-cores/ -a |
| 216 | |
| 217 | ACCESS RESTRICTIONS |
| 218 | ------------------- |
| 219 | |
| 220 | For non root users generally only context switched PMU events are available. |
| 221 | This is normally only the events in the cpu PMU, the predefined events |
| 222 | like cycles and instructions and some software events. |
| 223 | |
| 224 | Other PMUs and global measurements are normally root only. |
| 225 | Some event qualifiers, such as "any", are also root only. |
| 226 | |
Ingo Molnar | 1a7ea32 | 2018-12-03 11:22:00 +0100 | [diff] [blame] | 227 | This can be overridden by setting the kernel.perf_event_paranoid |
Andi Kleen | 85f8f96 | 2016-04-04 15:58:06 -0700 | [diff] [blame] | 228 | sysctl to -1, which allows non root to use these events. |
| 229 | |
| 230 | For accessing trace point events perf needs to have read access to |
| 231 | /sys/kernel/debug/tracing, even when perf_event_paranoid is in a relaxed |
| 232 | setting. |
| 233 | |
| 234 | TRACING |
| 235 | ------- |
| 236 | |
| 237 | Some PMUs control advanced hardware tracing capabilities, such as Intel PT, |
| 238 | that allows low overhead execution tracing. These are described in a separate |
| 239 | intel-pt.txt document. |
| 240 | |
Cody P Schafer | f9ab9c1 | 2015-01-07 17:13:53 -0800 | [diff] [blame] | 241 | PARAMETERIZED EVENTS |
| 242 | -------------------- |
| 243 | |
| 244 | Some pmu events listed by 'perf-list' will be displayed with '?' in them. For |
| 245 | example: |
| 246 | |
| 247 | hv_gpci/dtbp_ptitc,phys_processor_idx=?/ |
| 248 | |
| 249 | This means that when provided as an event, a value for '?' must |
| 250 | also be supplied. For example: |
| 251 | |
| 252 | perf stat -C 0 -e 'hv_gpci/dtbp_ptitc,phys_processor_idx=0x2/' ... |
| 253 | |
Jin Yao | 064b4e8 | 2019-04-12 21:59:47 +0800 | [diff] [blame] | 254 | EVENT QUALIFIERS: |
| 255 | |
| 256 | It is also possible to add extra qualifiers to an event: |
| 257 | |
| 258 | percore: |
| 259 | |
| 260 | Sums up the event counts for all hardware threads in a core, e.g.: |
| 261 | |
| 262 | |
| 263 | perf stat -e cpu/event=0,umask=0x3,percore=1/ |
| 264 | |
| 265 | |
Andi Kleen | 85f8f96 | 2016-04-04 15:58:06 -0700 | [diff] [blame] | 266 | EVENT GROUPS |
| 267 | ------------ |
| 268 | |
| 269 | Perf supports time based multiplexing of events, when the number of events |
| 270 | active exceeds the number of hardware performance counters. Multiplexing |
| 271 | can cause measurement errors when the workload changes its execution |
| 272 | profile. |
| 273 | |
| 274 | When metrics are computed using formulas from event counts, it is useful to |
| 275 | ensure some events are always measured together as a group to minimize multiplexing |
| 276 | errors. Event groups can be specified using { }. |
| 277 | |
| 278 | perf stat -e '{instructions,cycles}' ... |
| 279 | |
| 280 | The number of available performance counters depend on the CPU. A group |
| 281 | cannot contain more events than available counters. |
| 282 | For example Intel Core CPUs typically have four generic performance counters |
| 283 | for the core, plus three fixed counters for instructions, cycles and |
| 284 | ref-cycles. Some special events have restrictions on which counter they |
| 285 | can schedule, and may not support multiple instances in a single group. |
Andi Kleen | 98ad761 | 2017-10-10 15:43:22 -0700 | [diff] [blame] | 286 | When too many events are specified in the group some of them will not |
Andi Kleen | 85f8f96 | 2016-04-04 15:58:06 -0700 | [diff] [blame] | 287 | be measured. |
| 288 | |
| 289 | Globally pinned events can limit the number of counters available for |
| 290 | other groups. On x86 systems, the NMI watchdog pins a counter by default. |
| 291 | The nmi watchdog can be disabled as root with |
| 292 | |
| 293 | echo 0 > /proc/sys/kernel/nmi_watchdog |
| 294 | |
| 295 | Events from multiple different PMUs cannot be mixed in a group, with |
| 296 | some exceptions for software events. |
| 297 | |
| 298 | LEADER SAMPLING |
| 299 | --------------- |
| 300 | |
| 301 | perf also supports group leader sampling using the :S specifier. |
| 302 | |
| 303 | perf record -e '{cycles,instructions}:S' ... |
| 304 | perf report --group |
| 305 | |
Tobias Tefke | 788faab | 2018-07-09 12:57:15 +0200 | [diff] [blame] | 306 | Normally all events in an event group sample, but with :S only |
Andi Kleen | 85f8f96 | 2016-04-04 15:58:06 -0700 | [diff] [blame] | 307 | the first event (the leader) samples, and it only reads the values of the |
| 308 | other events in the group. |
| 309 | |
Adrian Hunter | e345997 | 2020-04-01 13:16:13 +0300 | [diff] [blame] | 310 | However, in the case AUX area events (e.g. Intel PT or CoreSight), the AUX |
| 311 | area event must be the leader, so then the second event samples, not the first. |
| 312 | |
Thomas Gleixner | 386b05e | 2009-06-06 14:56:33 +0200 | [diff] [blame] | 313 | OPTIONS |
| 314 | ------- |
Arnaldo Carvalho de Melo | 668b878 | 2011-02-17 15:38:58 -0200 | [diff] [blame] | 315 | |
| 316 | Without options all known events will be listed. |
| 317 | |
| 318 | To limit the list use: |
| 319 | |
| 320 | . 'hw' or 'hardware' to list hardware events such as cache-misses, etc. |
| 321 | |
| 322 | . 'sw' or 'software' to list software events such as context switches, etc. |
| 323 | |
| 324 | . 'cache' or 'hwcache' to list hardware cache events such as L1-dcache-loads, etc. |
| 325 | |
| 326 | . 'tracepoint' to list all tracepoint events, alternatively use |
| 327 | 'subsys_glob:event_glob' to filter by tracepoint subsystems such as sched, |
| 328 | block, etc. |
| 329 | |
Andi Kleen | dc098b3 | 2013-04-20 11:02:29 -0700 | [diff] [blame] | 330 | . 'pmu' to print the kernel supplied PMU events. |
| 331 | |
Ravi Bangoria | 6963d3c | 2017-03-27 08:25:38 +0530 | [diff] [blame] | 332 | . 'sdt' to list all Statically Defined Tracepoint events. |
| 333 | |
Andi Kleen | 71b0acc | 2017-08-31 12:40:32 -0700 | [diff] [blame] | 334 | . 'metric' to list metrics |
| 335 | |
| 336 | . 'metricgroup' to list metricgroups with metrics. |
| 337 | |
Arnaldo Carvalho de Melo | 668b878 | 2011-02-17 15:38:58 -0200 | [diff] [blame] | 338 | . If none of the above is matched, it will apply the supplied glob to all |
| 339 | events, printing the ones that match. |
| 340 | |
Arnaldo Carvalho de Melo | dbc6740 | 2015-10-01 12:12:22 -0300 | [diff] [blame] | 341 | . As a last resort, it will do a substring search in all event names. |
| 342 | |
Arnaldo Carvalho de Melo | 668b878 | 2011-02-17 15:38:58 -0200 | [diff] [blame] | 343 | One or more types can be used at the same time, listing the events for the |
| 344 | types specified. |
Thomas Gleixner | 386b05e | 2009-06-06 14:56:33 +0200 | [diff] [blame] | 345 | |
Yunlong Song | 5ef803e | 2015-02-27 18:21:28 +0800 | [diff] [blame] | 346 | Support raw format: |
| 347 | |
| 348 | . '--raw-dump', shows the raw-dump of all the events. |
| 349 | . '--raw-dump [hw|sw|cache|tracepoint|pmu|event_glob]', shows the raw-dump of |
| 350 | a certain kind of events. |
| 351 | |
Thomas Gleixner | 386b05e | 2009-06-06 14:56:33 +0200 | [diff] [blame] | 352 | SEE ALSO |
| 353 | -------- |
| 354 | linkperf:perf-stat[1], linkperf:perf-top[1], |
Arnaldo Carvalho de Melo | 1cf4a06 | 2010-05-07 14:07:05 -0300 | [diff] [blame] | 355 | linkperf:perf-record[1], |
Andi Kleen | 85f8f96 | 2016-04-04 15:58:06 -0700 | [diff] [blame] | 356 | http://www.intel.com/sdm/[IntelĀ® 64 and IA-32 Architectures Software Developer's Manual Volume 3B: System Programming Guide], |
Sandipan Das | 7a2e149 | 2021-11-23 14:16:13 +0530 | [diff] [blame] | 357 | https://bugzilla.kernel.org/show_bug.cgi?id=206537[AMD Processor Programming Reference (PPR)] |