72{
78 uint64_t cpu_list;
79 void *desc;
80 unsigned int num_counters;
81 uint32_t
i, j, l, k,
ncpus, npmds;
82 size_t len;
83 int ret;
85
88
91
92 memset(&ctx, 0, sizeof(ctx));
93 memset(pc, 0, sizeof(pc));
94
95 ncpus = (uint32_t)sysconf(_SC_NPROCESSORS_ONLN);
97 fatal_error(
"cannot retrieve number of online processors\n");
98
99 if (argc > 1) {
100 cpu_list = strtoul(argv[1],NULL,0);
103 } else {
104 cpu_list = ((1<<
ncpus)-1);
105 }
106
107
108
109
110 memset(&inp,0, sizeof(inp));
111 memset(&outp,0, sizeof(outp));
112
115
116 name = malloc(len+1);
118 fatal_error(
"cannot allocate memory for event name\n");
119
120
123
126
128
130
131 if (
i > num_counters) {
133 printf(
"too many events provided (max=%d events), using first %d event(s)\n", num_counters,
i);
134 }
135
136
137
139
140
141
142
143
145
146
147
148
151
152
154
155 printf(
"ncpus=%u npmds=%u\n",
ncpus, npmds);
156
158 if (pd == NULL)
160
164 }
165
166
167
168
169
170
171
172
173
174
175
176
177 for(l=0, k= 0; l <
ncpus; l++) {
180 }
181
182
183
184
185
186
187
188
189
190
192
193 ret =
pfms_create(&cpu_list, 1, &ctx, NULL, &desc);
194 if (ret == -1)
196
197
198
199
201 if (ret == -1)
203
204
205
206
208 if (ret == -1)
210
211
212
213
215 if (ret == -1)
217
218 printf("monitoring for 10s on all CPUs\n");
219
220
221
222
224 if (ret == -1)
226
227
228
229
230 sleep(10);
231
232
233
234
236 if (ret == -1)
238
239
240
241
242
243
244
245
246
247
249 if (ret == -1)
251
252
253
254
255 for(j=0, k= 0; j <
ncpus; j++) {
258 printf("CPU%-3d PMD%u %20"PRIu64" %s\n",
259 j,
260 pd[k].reg_num,
261 pd[k].reg_value,
263 }
264 }
265
266
267
268
269
271 if (ret == -1)
273
275
276 return 0;
277}
#define PFM_FL_SYSTEM_WIDE
int pfms_write_pmcs(void *desc, pfarg_pmc_t *pmcs, uint32_t n)
int pfms_write_pmds(void *desc, pfarg_pmd_t *pmds, uint32_t n)
int pfms_create(uint64_t *cpu_list, size_t n, pfarg_ctx_t *ctx, pfms_ovfl_t *ovfl, void **desc)
int pfms_stop(void *desc)
int pfms_load(void *desc)
int pfms_close(void *desc)
int pfms_initialize(void)
int pfms_read_pmds(void *desc, pfarg_pmd_t *pmds, uint32_t n)
int pfms_start(void *desc)
pfm_err_t pfm_get_inst_retired_event(pfmlib_event_t *e)
char * pfm_strerror(int code)
pfm_err_t pfm_dispatch_events(pfmlib_input_param_t *p, void *model_in, pfmlib_output_param_t *q, void *model_out)
pfm_err_t pfm_get_full_event_name(pfmlib_event_t *e, char *name, size_t maxlen)
pfm_err_t pfm_get_cycle_event(pfmlib_event_t *e)
pfm_err_t pfm_initialize(void)
pfm_err_t pfm_get_max_event_name_len(size_t *len)
#define PFMLIB_PFP_SYSTEMWIDE
pfm_err_t pfm_get_num_counters(unsigned int *num)
pfmlib_reg_t pfp_pmds[PFMLIB_MAX_PMDS]
pfmlib_reg_t pfp_pmcs[PFMLIB_MAX_PMCS]
unsigned int pfp_pmc_count
unsigned int pfp_pmd_count
unsigned long long reg_value
static void fatal_error(char *fmt,...) __attribute__((noreturn))
static uint32_t popcount(uint64_t c)