Lines Matching +full:skip +full:- +full:config
1 // SPDX-License-Identifier: GPL-2.0
22 stats->n++; in update_stats()
23 delta = val - stats->mean; in update_stats()
24 stats->mean += delta / stats->n; in update_stats()
25 stats->M2 += delta*(val - stats->mean); in update_stats()
27 if (val > stats->max) in update_stats()
28 stats->max = val; in update_stats()
30 if (val < stats->min) in update_stats()
31 stats->min = val; in update_stats()
36 return stats->mean; in avg_stats()
42 * (\Sum n_i^2) - ((\Sum n_i)^2)/n
43 * s^2 = -------------------------------
44 * n - 1
51 * s_mean = -------
59 if (stats->n < 2) in stddev_stats()
62 variance = stats->M2 / (stats->n - 1); in stddev_stats()
63 variance_mean = variance / stats->n; in stddev_stats()
81 struct perf_stat_evsel *ps = evsel->stats; in __perf_evsel_stat__is()
83 return ps->id == id; in __perf_evsel_stat__is()
89 ID(CYCLES_IN_TX, cpu/cycles-t/),
90 ID(TRANSACTION_START, cpu/tx-start/),
91 ID(ELISION_START, cpu/el-start/),
92 ID(CYCLES_IN_TX_CP, cpu/cycles-ct/),
93 ID(TOPDOWN_TOTAL_SLOTS, topdown-total-slots),
94 ID(TOPDOWN_SLOTS_ISSUED, topdown-slots-issued),
95 ID(TOPDOWN_SLOTS_RETIRED, topdown-slots-retired),
96 ID(TOPDOWN_FETCH_BUBBLES, topdown-fetch-bubbles),
97 ID(TOPDOWN_RECOVERY_BUBBLES, topdown-recovery-bubbles),
98 ID(TOPDOWN_RETIRING, topdown-retiring),
99 ID(TOPDOWN_BAD_SPEC, topdown-bad-spec),
100 ID(TOPDOWN_FE_BOUND, topdown-fe-bound),
101 ID(TOPDOWN_BE_BOUND, topdown-be-bound),
109 struct perf_stat_evsel *ps = evsel->stats; in perf_stat_evsel_id_init()
112 /* ps->id is 0 hence PERF_STAT_EVSEL_ID__NONE by default */ in perf_stat_evsel_id_init()
116 ps->id = i; in perf_stat_evsel_id_init()
125 struct perf_stat_evsel *ps = evsel->stats; in evsel__reset_stat_priv()
128 init_stats(&ps->res_stats[i]); in evsel__reset_stat_priv()
135 evsel->stats = zalloc(sizeof(struct perf_stat_evsel)); in evsel__alloc_stat_priv()
136 if (evsel->stats == NULL) in evsel__alloc_stat_priv()
137 return -ENOMEM; in evsel__alloc_stat_priv()
144 struct perf_stat_evsel *ps = evsel->stats; in evsel__free_stat_priv()
147 zfree(&ps->group_data); in evsel__free_stat_priv()
148 zfree(&evsel->stats); in evsel__free_stat_priv()
157 evsel->prev_raw_counts = counts; in evsel__alloc_prev_raw_counts()
159 return counts ? 0 : -ENOMEM; in evsel__alloc_prev_raw_counts()
164 perf_counts__delete(evsel->prev_raw_counts); in evsel__free_prev_raw_counts()
165 evsel->prev_raw_counts = NULL; in evsel__free_prev_raw_counts()
170 if (evsel->prev_raw_counts) in evsel__reset_prev_raw_counts()
171 perf_counts__reset(evsel->prev_raw_counts); in evsel__reset_prev_raw_counts()
177 int nthreads = perf_thread_map__nr(evsel->core.threads); in evsel__alloc_stats()
182 return -ENOMEM; in evsel__alloc_stats()
200 return -1; in perf_evlist__alloc_stats()
235 int nthreads = perf_thread_map__nr(evsel->core.threads); in perf_evsel__copy_prev_raw_counts()
239 *perf_counts(evsel->counts, cpu, thread) = in perf_evsel__copy_prev_raw_counts()
240 *perf_counts(evsel->prev_raw_counts, cpu, in perf_evsel__copy_prev_raw_counts()
245 evsel->counts->aggr = evsel->prev_raw_counts->aggr; in perf_evsel__copy_prev_raw_counts()
262 * we copy the counts from evsel->prev_raw_counts to in perf_evlist__save_aggr_prev_raw_counts()
263 * evsel->counts. The perf_stat_process_counter creates in perf_evlist__save_aggr_prev_raw_counts()
271 *perf_counts(evsel->prev_raw_counts, 0, 0) = in perf_evlist__save_aggr_prev_raw_counts()
272 evsel->prev_raw_counts->aggr; in perf_evlist__save_aggr_prev_raw_counts()
278 if (counter->per_pkg_mask) in zero_per_pkg()
279 memset(counter->per_pkg_mask, 0, cpu__max_cpu()); in zero_per_pkg()
283 struct perf_counts_values *vals, int cpu, bool *skip) in check_per_pkg() argument
285 unsigned long *mask = counter->per_pkg_mask; in check_per_pkg()
289 *skip = false; in check_per_pkg()
291 if (!counter->per_pkg) in check_per_pkg()
300 return -ENOMEM; in check_per_pkg()
302 counter->per_pkg_mask = mask; in check_per_pkg()
307 * instance to mark a package as used (skip=1). Otherwise in check_per_pkg()
313 if (!(vals->run && vals->ena)) in check_per_pkg()
318 return -1; in check_per_pkg()
320 *skip = test_and_set_bit(s, mask) == 1; in check_per_pkg()
325 process_counter_values(struct perf_stat_config *config, struct evsel *evsel, in process_counter_values() argument
329 struct perf_counts_values *aggr = &evsel->counts->aggr; in process_counter_values()
331 bool skip = false; in process_counter_values() local
333 if (check_per_pkg(evsel, count, cpu, &skip)) { in process_counter_values()
334 pr_err("failed to read per-pkg counter\n"); in process_counter_values()
335 return -1; in process_counter_values()
338 if (skip) in process_counter_values()
341 switch (config->aggr_mode) { in process_counter_values()
348 if (!evsel->snapshot) in process_counter_values()
350 perf_counts_values__scale(count, config->scale, NULL); in process_counter_values()
351 if ((config->aggr_mode == AGGR_NONE) && (!evsel->percore)) { in process_counter_values()
352 perf_stat__update_shadow_stats(evsel, count->val, in process_counter_values()
356 if (config->aggr_mode == AGGR_THREAD) { in process_counter_values()
357 if (config->stats) in process_counter_values()
359 count->val, 0, &config->stats[thread]); in process_counter_values()
362 count->val, 0, &rt_stat); in process_counter_values()
366 aggr->val += count->val; in process_counter_values()
367 aggr->ena += count->ena; in process_counter_values()
368 aggr->run += count->run; in process_counter_values()
377 static int process_counter_maps(struct perf_stat_config *config, in process_counter_maps() argument
380 int nthreads = perf_thread_map__nr(counter->core.threads); in process_counter_maps()
384 if (counter->core.system_wide) in process_counter_maps()
389 if (process_counter_values(config, counter, cpu, thread, in process_counter_maps()
390 perf_counts(counter->counts, cpu, thread))) in process_counter_maps()
391 return -1; in process_counter_maps()
398 int perf_stat_process_counter(struct perf_stat_config *config, in perf_stat_process_counter() argument
401 struct perf_counts_values *aggr = &counter->counts->aggr; in perf_stat_process_counter()
402 struct perf_stat_evsel *ps = counter->stats; in perf_stat_process_counter()
403 u64 *count = counter->counts->aggr.values; in perf_stat_process_counter()
406 aggr->val = aggr->ena = aggr->run = 0; in perf_stat_process_counter()
410 * and the display code shows ps->res_stats in perf_stat_process_counter()
415 if (config->interval || config->summary) { in perf_stat_process_counter()
417 init_stats(&ps->res_stats[i]); in perf_stat_process_counter()
420 if (counter->per_pkg) in perf_stat_process_counter()
423 ret = process_counter_maps(config, counter); in perf_stat_process_counter()
427 if (config->aggr_mode != AGGR_GLOBAL) in perf_stat_process_counter()
430 if (!counter->snapshot) in perf_stat_process_counter()
431 evsel__compute_deltas(counter, -1, -1, aggr); in perf_stat_process_counter()
432 perf_counts_values__scale(aggr, config->scale, &counter->counts->scaled); in perf_stat_process_counter()
435 update_stats(&ps->res_stats[i], count[i]); in perf_stat_process_counter()
438 fprintf(config->output, "%s: %" PRIu64 " %" PRIu64 " %" PRIu64 "\n", in perf_stat_process_counter()
443 * Save the full runtime - to allow normalization during printout: in perf_stat_process_counter()
454 struct perf_record_stat *st = &event->stat; in perf_event__process_stat_event()
457 count.val = st->val; in perf_event__process_stat_event()
458 count.ena = st->ena; in perf_event__process_stat_event()
459 count.run = st->run; in perf_event__process_stat_event()
461 counter = perf_evlist__id2evsel(session->evlist, st->id); in perf_event__process_stat_event()
464 return -EINVAL; in perf_event__process_stat_event()
467 *perf_counts(counter->counts, st->cpu, st->thread) = count; in perf_event__process_stat_event()
468 counter->supported = true; in perf_event__process_stat_event()
478 st->id, st->cpu, st->thread); in perf_event__fprintf_stat()
480 st->val, st->ena, st->run); in perf_event__fprintf_stat()
490 ret = fprintf(fp, "\n... time %" PRI_lu64 ", type %s\n", rd->time, in perf_event__fprintf_stat_round()
491 rd->type == PERF_STAT_ROUND_TYPE__FINAL ? "FINAL" : "INTERVAL"); in perf_event__fprintf_stat_round()
501 perf_event__read_stat_config(&sc, &event->stat_config); in perf_event__fprintf_stat_config()
512 struct perf_stat_config *config, in create_perf_stat_counter() argument
516 struct perf_event_attr *attr = &evsel->core.attr; in create_perf_stat_counter()
517 struct evsel *leader = evsel->leader; in create_perf_stat_counter()
519 attr->read_format = PERF_FORMAT_TOTAL_TIME_ENABLED | in create_perf_stat_counter()
527 if (leader->core.nr_members > 1) in create_perf_stat_counter()
528 attr->read_format |= PERF_FORMAT_ID|PERF_FORMAT_GROUP; in create_perf_stat_counter()
530 attr->inherit = !config->no_inherit; in create_perf_stat_counter()
536 attr->sample_period = 0; in create_perf_stat_counter()
538 if (config->identifier) in create_perf_stat_counter()
539 attr->sample_type = PERF_SAMPLE_IDENTIFIER; in create_perf_stat_counter()
541 if (config->all_user) { in create_perf_stat_counter()
542 attr->exclude_kernel = 1; in create_perf_stat_counter()
543 attr->exclude_user = 0; in create_perf_stat_counter()
546 if (config->all_kernel) { in create_perf_stat_counter()
547 attr->exclude_kernel = 0; in create_perf_stat_counter()
548 attr->exclude_user = 1; in create_perf_stat_counter()
557 attr->disabled = 1; in create_perf_stat_counter()
563 if (target__none(target) && !config->initial_delay) in create_perf_stat_counter()
564 attr->enable_on_exec = 1; in create_perf_stat_counter()
570 return evsel__open_per_thread(evsel, evsel->core.threads); in create_perf_stat_counter()