linux/tools/perf/pmu-events/pmu-events.h
Kan Liang b0a9e8f81f perf stat,jevents: Introduce Default tags for the default mode
Introduce a new metricgroup, Default, to tag all the metric groups which
will be collected in the default mode.

Add a new field, DefaultMetricgroupName, in the JSON file to indicate
the real metric group name. It will be printed in the default output
to replace the event names.

There is nothing changed for the output format.

On SPR, both TopdownL1 and TopdownL2 are displayed in the default
output.

On ARM, Intel ICL and later platforms (before SPR), only TopdownL1 is
displayed in the default output.

Suggested-by: Stephane Eranian <eranian@google.com>
Reviewed-by: Ian Rogers <irogers@google.com>
Signed-off-by: Kan Liang <kan.liang@linux.intel.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ahmad Yasin <ahmad.yasin@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lore.kernel.org/r/20230615135315.3662428-4-kan.liang@linux.intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2023-06-15 22:16:48 -03:00

100 lines
2.8 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
#ifndef PMU_EVENTS_H
#define PMU_EVENTS_H
#include <stdbool.h>
struct perf_pmu;
enum aggr_mode_class {
PerChip = 1,
PerCore
};
/**
* enum metric_event_groups - How events within a pmu_metric should be grouped.
*/
enum metric_event_groups {
/**
* @MetricGroupEvents: Default, group events within the metric.
*/
MetricGroupEvents = 0,
/**
* @MetricNoGroupEvents: Don't group events for the metric.
*/
MetricNoGroupEvents = 1,
/**
* @MetricNoGroupEventsNmi: Don't group events for the metric if the NMI
* watchdog is enabled.
*/
MetricNoGroupEventsNmi = 2,
/**
* @MetricNoGroupEventsSmt: Don't group events for the metric if SMT is
* enabled.
*/
MetricNoGroupEventsSmt = 3,
};
/*
* Describe each PMU event. Each CPU has a table of PMU events.
*/
struct pmu_event {
const char *name;
const char *compat;
const char *event;
const char *desc;
const char *topic;
const char *long_desc;
const char *pmu;
const char *unit;
bool perpkg;
bool deprecated;
};
struct pmu_metric {
const char *pmu;
const char *metric_name;
const char *metric_group;
const char *metric_expr;
const char *metric_threshold;
const char *unit;
const char *compat;
const char *desc;
const char *long_desc;
const char *metricgroup_no_group;
const char *default_metricgroup_name;
enum aggr_mode_class aggr_mode;
enum metric_event_groups event_grouping;
};
struct pmu_events_table;
struct pmu_metrics_table;
typedef int (*pmu_event_iter_fn)(const struct pmu_event *pe,
const struct pmu_events_table *table,
void *data);
typedef int (*pmu_metric_iter_fn)(const struct pmu_metric *pm,
const struct pmu_metrics_table *table,
void *data);
int pmu_events_table_for_each_event(const struct pmu_events_table *table, pmu_event_iter_fn fn,
void *data);
int pmu_metrics_table_for_each_metric(const struct pmu_metrics_table *table, pmu_metric_iter_fn fn,
void *data);
const struct pmu_events_table *perf_pmu__find_events_table(struct perf_pmu *pmu);
const struct pmu_metrics_table *perf_pmu__find_metrics_table(struct perf_pmu *pmu);
const struct pmu_events_table *find_core_events_table(const char *arch, const char *cpuid);
const struct pmu_metrics_table *find_core_metrics_table(const char *arch, const char *cpuid);
int pmu_for_each_core_event(pmu_event_iter_fn fn, void *data);
int pmu_for_each_core_metric(pmu_metric_iter_fn fn, void *data);
const struct pmu_events_table *find_sys_events_table(const char *name);
const struct pmu_metrics_table *find_sys_metrics_table(const char *name);
int pmu_for_each_sys_event(pmu_event_iter_fn fn, void *data);
int pmu_for_each_sys_metric(pmu_metric_iter_fn fn, void *data);
const char *describe_metricgroup(const char *group);
#endif