Skip to content

Commit

Permalink
perf jevents: Add support for parsing perchip/percore events
Browse files Browse the repository at this point in the history
Initially, every time we want to add new terms like chip, core thread etc,
we need to create corrsponding fields in pmu_events and event struct.

This patch adds an enum called 'aggr_mode_class' which store all these
aggregation like perchip/percore. It also adds new field 'aggr_mode'
to capture these terms.

Now, if user wants to add any new term, they just need to add it in
the enum defined.

Signed-off-by: Kajol Jain <kjain@linux.ibm.com>
Acked-by: Jiri Olsa <jolsa@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Jin Yao <yao.jin@linux.intel.com>
Cc: John Garry <john.garry@huawei.com>
Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Clarke <pc@us.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
Link: http://lore.kernel.org/lkml/20200907064133.75090-4-kjain@linux.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
Kajol Jain authored and Arnaldo Carvalho de Melo committed Sep 10, 2020
1 parent 71a374b commit 560ccbc
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 0 deletions.
20 changes: 20 additions & 0 deletions tools/perf/pmu-events/jevents.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
#include <linux/list.h>
#include "jsmn.h"
#include "json.h"
#include "pmu-events.h"

int verbose;
char *prog;
Expand All @@ -60,13 +61,25 @@ struct json_event {
char *pmu;
char *unit;
char *perpkg;
char *aggr_mode;
char *metric_expr;
char *metric_name;
char *metric_group;
char *deprecated;
char *metric_constraint;
};

enum aggr_mode_class convert(const char *aggr_mode)
{
if (!strcmp(aggr_mode, "PerCore"))
return PerCore;
else if (!strcmp(aggr_mode, "PerChip"))
return PerChip;

pr_err("%s: Wrong AggregationMode value '%s'\n", prog, aggr_mode);
return -1;
}

typedef int (*func)(void *data, struct json_event *je);

int eprintf(int level, int var, const char *fmt, ...)
Expand Down Expand Up @@ -356,6 +369,8 @@ static int print_events_table_entry(void *data, struct json_event *je)
fprintf(outfp, "\t.unit = \"%s\",\n", je->unit);
if (je->perpkg)
fprintf(outfp, "\t.perpkg = \"%s\",\n", je->perpkg);
if (je->aggr_mode)
fprintf(outfp, "\t.aggr_mode = \"%d\",\n", convert(je->aggr_mode));
if (je->metric_expr)
fprintf(outfp, "\t.metric_expr = \"%s\",\n", je->metric_expr);
if (je->metric_name)
Expand All @@ -380,6 +395,7 @@ struct event_struct {
char *pmu;
char *unit;
char *perpkg;
char *aggr_mode;
char *metric_expr;
char *metric_name;
char *metric_group;
Expand Down Expand Up @@ -409,6 +425,7 @@ struct event_struct {
op(pmu); \
op(unit); \
op(perpkg); \
op(aggr_mode); \
op(metric_expr); \
op(metric_name); \
op(metric_group); \
Expand Down Expand Up @@ -614,6 +631,8 @@ static int json_events(const char *fn,
addfield(map, &je.unit, "", "", val);
} else if (json_streq(map, field, "PerPkg")) {
addfield(map, &je.perpkg, "", "", val);
} else if (json_streq(map, field, "AggregationMode")) {
addfield(map, &je.aggr_mode, "", "", val);
} else if (json_streq(map, field, "Deprecated")) {
addfield(map, &je.deprecated, "", "", val);
} else if (json_streq(map, field, "MetricName")) {
Expand Down Expand Up @@ -674,6 +693,7 @@ static int json_events(const char *fn,
free(je.pmu);
free(filter);
free(je.perpkg);
free(je.aggr_mode);
free(je.deprecated);
free(je.unit);
free(je.metric_expr);
Expand Down
6 changes: 6 additions & 0 deletions tools/perf/pmu-events/pmu-events.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@
#ifndef PMU_EVENTS_H
#define PMU_EVENTS_H

enum aggr_mode_class {
PerChip = 1,
PerCore
};

/*
* Describe each PMU event. Each CPU has a table of PMU events.
*/
Expand All @@ -14,6 +19,7 @@ struct pmu_event {
const char *pmu;
const char *unit;
const char *perpkg;
const char *aggr_mode;
const char *metric_expr;
const char *metric_name;
const char *metric_group;
Expand Down

0 comments on commit 560ccbc

Please sign in to comment.