PAPI 7.1.0.0
Loading...
Searching...
No Matches
amd64_events_k7.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2006, 2007 Advanced Micro Devices, Inc.
3 * Contributed by Ray Bryant <raybry@mpdtxmail.amd.com>
4 * Contributed by Robert Richter <robert.richter@amd.com>
5 * Modified for K7 by Vince Weaver <vince _at_ csl.cornell.edu>
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
8 * of this software and associated documentation files (the "Software"), to deal
9 * in the Software without restriction, including without limitation the rights
10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
11 * of the Software, and to permit persons to whom the Software is furnished to do so,
12 * subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included in all
15 * copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
18 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
19 * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
21 * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
22 * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 *
24 * This file is part of libpfm, a performance monitoring support library for
25 * applications on Linux.
26 */
27
28/*
29 * Definitions taken from "AMD Athlon Processor x86 Code Optimization Guide"
30 * Table 11 February 2002
31 */
32
34/* 0 */{.pme_name = "DATA_CACHE_ACCESSES",
35 .pme_code = 0x40,
36 .pme_desc = "Data Cache Accesses",
37 },
38/* 1 */{.pme_name = "DATA_CACHE_MISSES",
39 .pme_code = 0x41,
40 .pme_desc = "Data Cache Misses",
41 },
42/* 2 */{.pme_name = "DATA_CACHE_REFILLS",
43 .pme_code = 0x42,
44 .pme_desc = "Data Cache Refills from L2",
45 .pme_flags = PFMLIB_AMD64_UMASK_COMBO,
46 .pme_numasks = 6,
47 .pme_umasks = {
48 { .pme_uname = "L2_INVALID",
49 .pme_udesc = "Invalid line from L2",
50 .pme_ucode = 0x01,
51 },
52 { .pme_uname = "L2_SHARED",
53 .pme_udesc = "Shared-state line from L2",
54 .pme_ucode = 0x02,
55 },
56 { .pme_uname = "L2_EXCLUSIVE",
57 .pme_udesc = "Exclusive-state line from L2",
58 .pme_ucode = 0x04,
59 },
60 { .pme_uname = "L2_OWNED",
61 .pme_udesc = "Owned-state line from L2",
62 .pme_ucode = 0x08,
63 },
64 { .pme_uname = "L2_MODIFIED",
65 .pme_udesc = "Modified-state line from L2",
66 .pme_ucode = 0x10,
67 },
68 { .pme_uname = "ALL",
69 .pme_udesc = "Shared, Exclusive, Owned, Modified State Refills",
70 .pme_ucode = 0x1F,
71 },
72 },
73 },
74/* 3 */{.pme_name = "DATA_CACHE_REFILLS_FROM_SYSTEM",
75 .pme_code = 0x43,
76 .pme_desc = "Data Cache Refills from System",
77 .pme_flags = PFMLIB_AMD64_UMASK_COMBO,
78 .pme_numasks = 6,
79 .pme_umasks = {
80 { .pme_uname = "INVALID",
81 .pme_udesc = "Invalid",
82 .pme_ucode = 0x01,
83 },
84 { .pme_uname = "SHARED",
85 .pme_udesc = "Shared",
86 .pme_ucode = 0x02,
87 },
88 { .pme_uname = "EXCLUSIVE",
89 .pme_udesc = "Exclusive",
90 .pme_ucode = 0x04,
91 },
92 { .pme_uname = "OWNED",
93 .pme_udesc = "Owned",
94 .pme_ucode = 0x08,
95 },
96 { .pme_uname = "MODIFIED",
97 .pme_udesc = "Modified",
98 .pme_ucode = 0x10,
99 },
100 { .pme_uname = "ALL",
101 .pme_udesc = "Invalid, Shared, Exclusive, Owned, Modified",
102 .pme_ucode = 0x1F,
103 },
104 },
105 },
106/* 4 */{.pme_name = "DATA_CACHE_LINES_EVICTED",
107 .pme_code = 0x44,
108 .pme_desc = "Data Cache Lines Evicted",
109 .pme_flags = PFMLIB_AMD64_UMASK_COMBO,
110 .pme_numasks = 6,
111 .pme_umasks = {
112 { .pme_uname = "INVALID",
113 .pme_udesc = "Invalid",
114 .pme_ucode = 0x01,
115 },
116 { .pme_uname = "SHARED",
117 .pme_udesc = "Shared",
118 .pme_ucode = 0x02,
119 },
120 { .pme_uname = "EXCLUSIVE",
121 .pme_udesc = "Exclusive",
122 .pme_ucode = 0x04,
123 },
124 { .pme_uname = "OWNED",
125 .pme_udesc = "Owned",
126 .pme_ucode = 0x08,
127 },
128 { .pme_uname = "MODIFIED",
129 .pme_udesc = "Modified",
130 .pme_ucode = 0x10,
131 },
132 { .pme_uname = "ALL",
133 .pme_udesc = "Invalid, Shared, Exclusive, Owned, Modified",
134 .pme_ucode = 0x1F,
135 },
136 },
137 },
138/* 5 */{.pme_name = "L1_DTLB_MISS_AND_L2_DTLB_HIT",
139 .pme_code = 0x45,
140 .pme_desc = "L1 DTLB Miss and L2 DTLB Hit",
141 },
142/* 6 */{.pme_name = "L1_DTLB_AND_L2_DTLB_MISS",
143 .pme_code = 0x46,
144 .pme_desc = "L1 DTLB and L2 DTLB Miss",
145 },
146/* 7 */{.pme_name = "MISALIGNED_ACCESSES",
147 .pme_code = 0x47,
148 .pme_desc = "Misaligned Accesses",
149 },
150 /* CPU_CLK_UNHALTED is undocumented in the Athlon Guide? */
151/* 8 */{.pme_name = "CPU_CLK_UNHALTED",
152 .pme_code = 0x76,
153 .pme_desc = "CPU Clocks not Halted",
154 },
155/* 9 */{.pme_name = "INSTRUCTION_CACHE_FETCHES",
156 .pme_code = 0x80,
157 .pme_desc = "Instruction Cache Fetches",
158 },
159/* 10 */{.pme_name = "INSTRUCTION_CACHE_MISSES",
160 .pme_code = 0x81,
161 .pme_desc = "Instruction Cache Misses",
162 },
163/* 11 */{.pme_name = "L1_ITLB_MISS_AND_L2_ITLB_HIT",
164 .pme_code = 0x84,
165 .pme_desc = "L1 ITLB Miss and L2 ITLB Hit",
166 },
167/* 12 */{.pme_name = "L1_ITLB_MISS_AND_L2_ITLB_MISS",
168 .pme_code = 0x85,
169 .pme_desc = "L1 ITLB Miss and L2 ITLB Miss",
170 },
171/* 13 */{.pme_name = "RETIRED_INSTRUCTIONS",
172 .pme_code = 0xC0,
173 .pme_desc = "Retired Instructions (includes exceptions, interrupts, resyncs)",
174 },
175/* 14 */{.pme_name = "RETIRED_UOPS",
176 .pme_code = 0xC1,
177 .pme_desc = "Retired uops",
178 },
179/* 15 */{.pme_name = "RETIRED_BRANCH_INSTRUCTIONS",
180 .pme_code = 0xC2,
181 .pme_desc = "Retired Branch Instructions",
182 },
183/* 16 */{.pme_name = "RETIRED_MISPREDICTED_BRANCH_INSTRUCTIONS",
184 .pme_code = 0xC3,
185 .pme_desc = "Retired Mispredicted Branch Instructions",
186 },
187/* 17 */{.pme_name = "RETIRED_TAKEN_BRANCH_INSTRUCTIONS",
188 .pme_code = 0xC4,
189 .pme_desc = "Retired Taken Branch Instructions",
190 },
191/* 18 */{.pme_name = "RETIRED_TAKEN_BRANCH_INSTRUCTIONS_MISPREDICTED",
192 .pme_code = 0xC5,
193 .pme_desc = "Retired Taken Branch Instructions Mispredicted",
194 },
195/* 19 */{.pme_name = "RETIRED_FAR_CONTROL_TRANSFERS",
196 .pme_code = 0xC6,
197 .pme_desc = "Retired Far Control Transfers",
198 },
199/* 20 */{.pme_name = "RETIRED_BRANCH_RESYNCS",
200 .pme_code = 0xC7,
201 .pme_desc = "Retired Branch Resyncs (only non-control transfer branches)",
202 },
203/* 21 */{.pme_name = "INTERRUPTS_MASKED_CYCLES",
204 .pme_code = 0xCD,
205 .pme_desc = "Interrupts-Masked Cycles",
206 },
207/* 22 */{.pme_name = "INTERRUPTS_MASKED_CYCLES_WITH_INTERRUPT_PENDING",
208 .pme_code = 0xCE,
209 .pme_desc = "Interrupts-Masked Cycles with Interrupt Pending",
210 },
211/* 23 */{.pme_name = "INTERRUPTS_TAKEN",
212 .pme_code = 0xCF,
213 .pme_desc = "Interrupts Taken",
214 },
215};
216
217#define PME_AMD64_K7_EVENT_COUNT (sizeof(amd64_k7_pe)/sizeof(pme_amd64_entry_t))
218#define PME_AMD64_K7_CPU_CLK_UNHALTED 8
219#define PME_AMD64_K7_RETIRED_INSTRUCTIONS 13
static pme_amd64_entry_t amd64_k7_pe[]
#define PFMLIB_AMD64_UMASK_COMBO
char * pme_name